微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

nn.DataParallel - 培训似乎没有开始

如何解决nn.DataParallel - 培训似乎没有开始

我在使用 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。