【问题标题】:nn.DataParallel - Training doesn't seem to startnn.DataParallel - 训练似乎没有开始
【发布时间】: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


    【解决方案1】:

    我在这里做个猜测,因为我没有多个 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

    【讨论】:

    • 不幸的是,这并不能解决它:/
    猜你喜欢
    • 2020-09-29
    • 2021-12-20
    • 1970-01-01
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多