python - nn.DataParallel - 训练似乎没有开始

标签 python pytorch gpu gnu-parallel multi-gpu

我在使用 nn.DistributedDataParallel 时遇到很多问题,因为我找不到如何在单个节点中指定 GPU id 的良好工作示例。因此,我想从使用 nn.DataParallel 开始,因为它应该更容易实现。根据文档 [https://pytorch.org/docs/stable/generated/torch.nn.DataParallel.html],以下内容应该有效:

device = torch.device('cuda:1' if torch.cuda.is_available() else 'cpu')
model = Model(arg).to(device)
model = torch.nn.DataParallel(model, device_ids=[1, 8, 9])
for step, (original, keypoints) in enumerate(train_loader):
                    original, keypoints = original.to(device), keypoints.to(device)
                    loss = model(original)
                    optimizer.zero_grad()
                    total_loss.backward()
                    optimizer.step()

但是,当我开始处理模型时,模型已分发到所有三个 GPU,但训练并未开始。 GPU 的 RAM 几乎是空的(用于加载模型的内存除外)。这可以在这里看到(参见 GPU 1、8、9):

enter image description here

有人可以解释一下为什么这不起作用吗?

非常感谢!!

最佳答案

我在这里进行猜测,但由于我没有多个 GPU,所以还没有测试过。

因为您假设先将其加载到并行,然后将其移动到 GPU

model = Model(arg)
model = torch.nn.DataParallel(model, device_ids=[1, 8, 9])
model.to(device)

您可以在这里查看我在这里引用的教程:https://pytorch.org/tutorials/beginner/blitz/data_parallel_tutorial.html

关于python - nn.DataParallel - 训练似乎没有开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67096073/

相关文章:

大型矩阵的 CUDA 矩阵乘法中断

python - 如何使用 Paramiko 下载昨天的文件?

python - 带有字典的 pandas 中的列到行?

python - 使用鼠标移动和缩放 tkinter Canvas

python - Python 中张量的全变分正则化

Java 使用 GPU 进行 BigInteger 计算

python - 在 django 应用程序中使用 beautifulsoup 和 requests 跟踪链接的正确语法是什么?

python-3.x - 如何在 Pytorch 中使用 KNN、随机森林模型?

python - 如何在 PyTorch 中平衡(过采样)不平衡数据(使用 WeightedRandomSampler)?

cuda - CUDA内存是如何管理的?