我试图通过设置model = nn.DataParallel(model).cuda()
使用DataParallel在多个GPU上运行我的模型,但每次都得到这个错误-
运行时错误:chunk至少需要1维Tensor(chunk at /pytorch/aten/src/ATen/native/TensorShape.cpp:184)。
我的代码是正确的。有谁知道出了什么问题吗?
我试过在终端上设置device_ids=[0,1]
参数和CUDA_VISIBLE_DEVICES
。还尝试了不同的批量大小。
2条答案
按热度按时间zqry0prt1#
要识别问题,您应该检查每个小批处理的输入数据的形状。文档说,
nn.DataParallel
将输入Tensor拆分为dim0
,并将每个块发送到指定的GPU。从错误消息来看,似乎您正在尝试传递一个0维Tensor。一个可能的原因是,如果你有一个包含
n
示例的mini-batch,并且你在超过n
GPU上运行程序,那么你会得到这个错误。让我们考虑以下场景。
现在,在上面的场景中,在第三个小批量中,将有1个示例。因此,不可能将块发送到所有特定的GPU,您将收到错误消息。请检查您是否是这个问题的受害者。
iyr7buue2#
以下是您可以执行的操作:
1.批量大小应该是GPU数量的整数倍。或
1.检查你是否在参数中传递了一个标量值,它的形状是0。您可以使用.reshape(1)将该Tensor重新整形为大小1