如何在PyTorch中修复``输入张量和隐藏张量不在同一设备上''

时间:2019-09-25 09:47:15

标签: python-3.x gpu pytorch lstm

当我要将模型放到GPU上时,出现错误! 它说Inputs在GPU上,但是隐藏状态在CPU上。 但是,所有这些都已放在GPU上。 我用

for m in model.parameters():
    print(m.device) #return cuda:0

可以在GPU设备上查看模型上的所有状态。 错误是“ RuntimeError:输入张量和隐藏张量不在同一设备上,在cuda:0处找到输入张量,在cpu处找到了隐藏张量”

Windows 10服务器 pytorch 1.2.0 + CUDA 9.2 CUDA 9.2 cudnn 7.6.3 for CUDA 9.2

if torch.cuda.is_available():

    model = model.cuda()

if torch.cuda.is_available():
    `test= test.cuda() #test is the Input`

2 个答案:

答案 0 :(得分:1)

您需要将模型,输入和目标移动到Cuda

if(torch.cuda.is_available()):

   rnn.cuda()# rnn is your model 
   inputs = inputs.cuda() 
   target = target.cuda()

答案 1 :(得分:0)

当 PyTorch 尝试计算存储在 CPU 上的张量和 GPU 上的张量之间的运算时,会发生此错误。在高层次上,有两种类型的张量 - 数据类型和模型参数类型,两者都可以像这样复制到同一设备:

device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

data = data.to(device)
model = model.to(device)