参考:pytorch Tensor.to(device)和model.to(device) 的区别_module.to-优快云博客
遇到的问题:
用accelerator包(v 0.23.0) 对 pytorch架构下的model进行部署时,发现部署后model变为None了,部署前 model 实例化正常,debug一圈下来发现是问题在accelerator里面的代码:
# accelerate/accelerator.py /Accelerator/prepare_model
model = model.to(self.device)
这行代码后model就变为none了,但这其实和accelerator包没关系,是这行代码与我的模型实例之间的问题,我作了个单独测试:
encoder = build_models(opt)
encoder = encoder.to(accelerator.device) # device是cuda:x
print(type(encoder))
1)to(device)后不赋值就没问题,或者2)用其他的模型也没问题,所以就是这个模型实例化与这行代码之间可能有python底层的什么bug?? 我没再细查了,因为网上查不到相关的资料,就连我这个问题我都很难查到,碰巧看到参考博客才发现了解决方法,但至于它为什么会这样,不懂。
解决方案一
model.to(device)后不赋值
更新解决方案二:问题源找到了
在之后的调试中发现了模型的关键点在于:使用了PositionalEncoding,其中用到register_buffer,详情见: