pytorch DataParallel multi-gpu RuntimeError:chunk至少需要1维Tensor

goqiplq2  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(377)

我试图通过设置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。还尝试了不同的批量大小。

zqry0prt

zqry0prt1#

要识别问题,您应该检查每个小批处理的输入数据的形状。文档说,nn.DataParallel将输入Tensor拆分为dim0,并将每个块发送到指定的GPU。从错误消息来看,似乎您正在尝试传递一个0维Tensor。
一个可能的原因是,如果你有一个包含n示例的mini-batch,并且你在超过n GPU上运行程序,那么你会得到这个错误。
让我们考虑以下场景。

  • 训练样本总数= 161,批量大小= 80,小批量总数= 3
  • 为DataParallel指定的GPU数量= 3

现在,在上面的场景中,在第三个小批量中,将有1个示例。因此,不可能将块发送到所有特定的GPU,您将收到错误消息。请检查您是否是这个问题的受害者。

iyr7buue

iyr7buue2#

以下是您可以执行的操作:
1.批量大小应该是GPU数量的整数倍。或
1.检查你是否在参数中传递了一个标量值,它的形状是0。您可以使用.reshape(1)将该Tensor重新整形为大小1

相关问题