我试图通过设置model = nn.DataParallel(model).cuda()
使用DataParallel在多个GPU上运行我的模型,但是每次都会收到此错误-
RuntimeError:块期望至少一个一维张量(块在 /pytorch/aten/src/ATen/native/TensorShape.cpp:184)。
我的代码是正确的。有人知道怎么了吗?
我尝试在终端上设置device_ids=[0,1]
参数,也设置CUDA_VISIBLE_DEVICES
。还尝试了不同的批次大小。
答案 0 :(得分:0)
要确定问题所在,您应该检查每个微型批处理的输入数据的形状。该文档说,nn.DataParallel
在dim0
中拆分输入张量,并将每个块发送到指定的GPU。根据错误消息,您似乎正在尝试传递0维张量。
一个可能的原因是,如果您有一个包含n
个示例的微型批处理,并且您的程序在超过n
个GPU上运行,那么您会收到此错误。
让我们考虑以下情况。
现在,在上述情况下,在第三个迷你批处理中,将有1个示例。因此,不可能将块发送到所有特定的GPU,您将收到错误消息。因此,请检查您是否不是此问题的受害者。