to(device)赋值踩坑

参考:pytorch Tensor.to(device)和model.to(device) 的区别_module.to-CSDN博客

遇到的问题:

用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,详情见:

RuntimeError: unsupported operation: some elements of the input tensor and the written-to tensor ref-CSDN博客

把这里改了之后,to(device)赋值就没问题了。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值