如何在CUDA上使用PyTorch进行CIFAR-10?

时间:2018-05-26 05:34:57

标签: python deep-learning pytorch

我正在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(设备)吗?

1 个答案:

答案 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与变化放在一起。