Python Pytork';DataParallel仅使用一个GPU
我正在尝试使用两个GPU在PyTorch中训练一个模型。我使用的是Python Pytork';DataParallel仅使用一个GPU,python,parallel-processing,pytorch,gpu,Python,Parallel Processing,Pytorch,Gpu,我正在尝试使用两个GPU在PyTorch中训练一个模型。我使用的是torch.nn.DataParallel,但出于某种原因nvidia smi表示我只使用一个GPU 代码大致如下: >>> import torch.nn as nn >>> model = SomeModel() >>> model = nn.DataParallel(model) >>> model.to('cuda') 当我运行程序并观察nvidi
torch.nn.DataParallel
,但出于某种原因nvidia smi
表示我只使用一个GPU
代码大致如下:
>>> import torch.nn as nn
>>> model = SomeModel()
>>> model = nn.DataParallel(model)
>>> model.to('cuda')
当我运行程序并观察nvidia smi的输出时,我只看到GPU 0正在运行。有人知道问题出在哪里吗?也有同样的问题,我意识到自己用错了,于是解决了这个问题。也许这会帮助某人节省一些时间: 如果像
model=nn.DataParallel(model)
那样包装模型,它将只包装对该模型的调用(调用意味着model(input)
)。因此,如果您的模型有一个线性层,您现在直接使用它,就像model.my_linear(input)
一样,它将不会被包装
如果在代码中传递对模型实例的引用,那么最终可能会得到对未包装模型的引用,这也将不起作用
最简单的测试是在调用模型之前立即包装模型,并检查其是否有效。如果是这样,您以前的包装代码可能存在上述问题。您是否尝试过指定
设备\u id
?是的,我尝试过在函数调用中执行设备\u id=[0,1]
,但据我所知,默认情况是nn.DataParallel
使用所有可用设备。两者都不起作用(