Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pytork';DataParallel仅使用一个GPU_Python_Parallel Processing_Pytorch_Gpu - Fatal编程技术网

Python Pytork';DataParallel仅使用一个GPU

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

我正在尝试使用两个GPU在PyTorch中训练一个模型。我使用的是
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
使用所有可用设备。两者都不起作用(