大参数输入下模型返回NoneType引发AttributeError,函数无有效返回值求助
大参数输入下模型返回NoneType引发AttributeError,函数无有效返回值求助
我最近在啃一个项目代码,卡在这里快崩溃了,网上搜了好几天都没找到有用的解决办法,真心求大家帮忙看看,哪怕给点排查方向也行!
项目运行时抛出了如下错误:
AttributeError: 'NoneType' object has no attribute 'item'
对应的完整报错栈是:
Traceback (most recent call last): File "pretrain/pretrain_eq.py", line 313, in main(args, 0) File "pretrain/pretrain_eq.py", line 262, in main loss, acc, bsz = model(batch['eq_tokens'], batch['wd_tokens'], batch['tgt_processed_tokens'], args.label_smoothing) AttributeError: 'NoneType' object has no attribute 'item'
我已经确认过传入的batch绝对不是None,但调用模型后居然返回了None!我用pdb调试的时候发现,代码确实进入了模型的调用逻辑,但一路走完所有的if判断和循环后,最终的返回结果居然是None。
我现在就想让这个项目能正常跑起来,下面是模型调用相关的_call_impl函数代码:
def _call_impl(self, *input, **kwargs): # Do not call functions when jit is used full_backward_hooks, non_full_backward_hooks = [], [] if len(self._backward_hooks) > 0 or len(_global_backward_hooks) > 0: full_backward_hooks, non_full_backward_hooks = self._get_backward_hooks() for hook in itertools.chain( _global_forward_pre_hooks.values(), self._forward_pre_hooks.values()): result = hook(self, input) if result is not None: if not isinstance(result, tuple): result = (result,) input = result bw_hook = None if len(full_backward_hooks) > 0: bw_hook = hooks.BackwardHook(self, full_backward_hooks) input = bw_hook.setup_input_hook(input) if torch._C._get_tracing_state(): result = self._slow_forward(*input, **kwargs) else: result = self.forward(*input, **kwargs) for hook in itertools.chain( _global_forward_hooks.values(), self._forward_hooks.values()): hook_result = hook(self, input, result) if hook_result is not None: result = hook_result if bw_hook: result = bw_hook.setup_output_hook(result) # Handle the non-full backward hooks if len(non_full_backward_hooks) > 0: var = result while not isinstance(var, torch.Tensor): if isinstance(var, dict): var = next((v for v in var.values() if isinstance(v, torch.Tensor))) else: var = var[0] grad_fn = var.grad_fn if grad_fn is not None: for hook in non_full_backward_hooks: wrapper = functools.partial(hook, self) functools.update_wrapper(wrapper, hook) grad_fn.register_hook(wrapper) self._maybe_warn_non_full_backward_hook(input, result, grad_fn) return result
备注:内容来源于stack exchange,提问作者Labouriouszfj
相关产品推荐
相关产品推荐

