【发布时间】:2019-06-27 22:27:10
【问题描述】:
我正在尝试在 pytorch 中训练 LSTM 层。我正在使用 4 个 GPU。初始化时,我添加了 .cuda() 函数将隐藏层移动到 GPU。但是当我使用多个 GPU 运行代码时,我得到了这个运行时错误:
RuntimeError: Input and hidden tensors are not at the same device
我尝试通过在 forward 函数中使用 .cuda() 函数来解决这个问题,如下所示:
self.hidden = (self.hidden[0].type(torch.FloatTensor).cuda(), self.hidden[1].type(torch.FloatTensor).cuda())
这条线似乎解决了这个问题,但它引起了我的担忧,即如果在不同的 GPU 中看到更新的隐藏层。我应该在批处理的前向函数结束时将向量移回 cpu,还是有其他方法可以解决问题。
【问题讨论】:
-
一开始你是如何在多个 GPU 上运行它的?你在用
DataParallel吗? -
是的,在初始化模型后,我正在运行这一行:model = torch.nn.DataParallel(model) 并且在运行代码时我正在设置 CUDA_VISIBLE_DEVICES
-
这个问题你解决了吗?谢谢