【发布时间】:2021-07-09 18:13:00
【问题描述】:
我在使用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):
谁能解释一下为什么这不起作用?
非常感谢!!
【问题讨论】:
标签: python pytorch gpu gnu-parallel multi-gpu