我正在this pytorch page关注CIFAR-10 PyTorch教程,无法在GPU上运行PyTorch。代码与教程完全相同。
我得到的错误是
Traceback (most recent call last):
File "(file path)/CIFAR10_tutorial.py", line 116, in <module>
outputs = net(images)
File "/usr/local/lib/python3.5/dist-packages/torch/nn/modules/module.py", line 491, in __call__
result = self.forward(*input, **kwargs)
File "(file path)/CIFAR10_tutorial.py", line 65, in forward
x = self.pool(F.relu(self.conv1(x)).cuda())
File "/usr/local/lib/python3.5/dist-packages/torch/nn/modules/module.py", line 491, in __call__
result = self.forward(*input, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/torch/nn/modules/conv.py", line 301, in forward
self.padding, self.dilation, self.groups)
我的CUDA版本是9.0,Pytorch 0.4.0。我在机器上使用了tensorflow-gpu,所以我知道CUDA设置正确。我必须在教程中建议使用.cuda()和.to(设备)吗?
答案 0 :(得分:2)
我要留下答案,以防其他人被困在同一地方。
首先,配置Pytorch以使用GPU(如果可用)
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(device)
然后,在 init 函数中,通过在 NN的每个元素上调用.cuda()来强制转换为gpu,例如
self.conv1 = nn.Conv2d(3, 24, 5).cuda()
self.pool = nn.MaxPool2d(2, 2).cuda()
如果您对GPU不确定,请在每个元素上调用 .to(device)。
在前进(自我,x)功能中,在步骤之前,我做了
x = x.to(device)
创建net对象后,通过
将其强制转换为设备net.to(device)
在对设备执行任何操作之前,应将所有输入和标签强制转换为设备。
inputs, labels = inputs.to(device), labels.to(device)
我正在跳过编写整个代码,因为问题中已经提到了链接。如果似乎有一些冗余转换为gpu,它们不会破坏任何东西。我也可以将ipynb与变化放在一起。