Pytorch:不使用 to() 函数在 GPU 上传输层

Pytorch: layer not transferred on GPU with to() function

在下面的代码中,我希望张量 x 和层 l 都在 GPU 上,而不是只有张量 x 结果在 GPU 上,而不是层l。事实上,在学习阶段使用这种方法会导致 RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cpu and cuda:0!

import torch
x = torch.zeros(1)
x = x.to('cuda')
try:
    x.get_device()
    print('x: gpu')
except:
    print('x:','cpu')

l = torch.nn.Linear(1,1)
l = l.to('cuda')
try:
    l.get_device()
    print('l: gpu')
except:
    print('l:','cpu')

输出为:

x: gpu
l: cpu

而不是两者 gpu。 这是为什么?

手电筒版本:1.10.2+cu113

您不能在 nn.Linear 对象上调用 .get_device(),因此您的第二个 try 块失败并在异常部分打印代码。为了检查您的模块在哪个设备上,您可以执行以下操作:

print(next(l.parameters()).device)

输出:

>> device(type='cuda', index=0)