RuntimeError: module must have its parameters and buffers on device cuda:0 (device_ids[0]) but found

跑Pytorch模型的时候,经常会遇到一个问题,就是RuntimeError: module must have its parameters and buffers on device cuda:0 (device_ids[0]) but found one of them on device: cuda:4,这个问题真的很烦人,每次都花了我很长时间去解决。这个问题其实无非就是有些参数本来加载在gpu0的,被程序加载到了gpu4上,导致出错。接下来我总结一下它的解决方法:
(1)修改主gpu:程序默认使用gpu0作为主gpu,所以如果出现上面这个错误可能是你希望使用其它序号的gpu,但是没有对主gpu进行修改导致出错,可以尝试通过加入如下程序修复错误。

device = torch.device("cuda:{}".format(4) if torch.cuda.is_available() and not args.no_cuda else "cpu")
model = model.to(device)
if args.n_gpu > 1:
    model = torch.nn.DataParallel(model, device_ids=[4,5,6,7])

(2)检查代码变量中是否有使用torch.cuda.tensor(变量名)之类的语句,统统改为torch.tensor(变量名).to(device)。因为torch.cuda.tensor(变量名)会默认使用gpu0作为主gpu,这样子就与我们所设置的device = torch.device("cuda:{}".format(4) if torch.cuda.is_available()相违背了,因此需要修改。

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值