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)
在下面的代码中,我希望张量 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)