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()相违背了,因此需要修改。

你可能感兴趣的:(深度学习,pytorch,python,深度学习)