CUDA 与 DataParallel:为什么不同?
CUDA vs. DataParallel: Why the difference?
我有一个简单的神经网络模型,我在模型上应用 cuda()
或 DataParallel()
,如下所示。
model = torch.nn.DataParallel(model).cuda()
或者,
model = model.cuda()
当我不使用 DataParallel,而是简单地将我的模型转换为 cuda()
时,我需要将批处理输入显式转换为 cuda()
,然后将其提供给模型,否则它 returns下面的错误。
torch.index_select received an invalid combination of arguments - got (torch.cuda.FloatTensor, int, torch.LongTensor)
但是使用 DataParallel,代码可以正常工作。其余的都是一样的。为什么会这样?为什么当我使用 DataParallel 时,我不需要将批处理输入显式转换为 cuda()
?
因为 DataParallel 允许 CPU 输入,因为它的第一步是将输入传输到适当的 GPU。
信息来源:https://discuss.pytorch.org/t/cuda-vs-dataparallel-why-the-difference/4062/3
我有一个简单的神经网络模型,我在模型上应用 cuda()
或 DataParallel()
,如下所示。
model = torch.nn.DataParallel(model).cuda()
或者,
model = model.cuda()
当我不使用 DataParallel,而是简单地将我的模型转换为 cuda()
时,我需要将批处理输入显式转换为 cuda()
,然后将其提供给模型,否则它 returns下面的错误。
torch.index_select received an invalid combination of arguments - got (torch.cuda.FloatTensor, int, torch.LongTensor)
但是使用 DataParallel,代码可以正常工作。其余的都是一样的。为什么会这样?为什么当我使用 DataParallel 时,我不需要将批处理输入显式转换为 cuda()
?
因为 DataParallel 允许 CPU 输入,因为它的第一步是将输入传输到适当的 GPU。
信息来源:https://discuss.pytorch.org/t/cuda-vs-dataparallel-why-the-difference/4062/3