DataParallel多GPU RuntimeError:块期望至少一维张量

时间:2019-05-16 22:21:51

标签: pytorch multi-gpu

我试图通过设置model = nn.DataParallel(model).cuda()使用DataParallel在多个GPU上运行我的模型,但是每次都会收到此错误-

  

RuntimeError:块期望至少一个一维张量(块在   /pytorch/aten/src/ATen/native/TensorShape.cpp:184)。

我的代码是正确的。有人知道怎么了吗?

我尝试在终端上设置device_ids=[0,1]参数,也设置CUDA_VISIBLE_DEVICES。还尝试了不同的批次大小。

1 个答案:

答案 0 :(得分:0)

要确定问题所在,您应该检查每个微型批处理的输入数据的形状。该文档说,nn.DataParalleldim0中拆分输入张量,并将每个块发送到指定的GPU。根据错误消息,您似乎正在尝试传递0维张量。

一个可能的原因是,如果您有一个包含n个示例的微型批处理,并且您的程序在超过n个GPU上运行,那么您会收到此错误。

让我们考虑以下情况。

  • 培训总数= 161,批量= 80,迷你批次= 3
  • 为DataParallel指定的GPU数量= 3

现在,在上述情况下,在第三个迷你批处理中,将有1个示例。因此,不可能将块发送到所有特定的GPU,您将收到错误消息。因此,请检查您是否不是此问题的受害者。