python - 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):
有人可以解释一下为什么这不起作用吗?
非常感谢!!
解决方案
我在这里做个猜测,因为我没有多个 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
推荐阅读
- eclipse - 通过 Xtext 使用 Sirius 建模的教程
- javascript - 间隔后如何出现console.log或提示
- android - Volley 中的 API 问题
- ruby-on-rails - 表单对象创建规则
- python - “-: 'int' 和 'tuple' 不支持的操作数类型”是什么意思?
- python-3.x - Python 脚本检查是否安装了 pip、python 和 adb,如果没有安装它
- r - 如何使用 R 找到 cos(x + b) = a 的最小正解
- android - 如何使用 Kotlin 在函数中应用多个泛型
- regex - 用于替换部分字符串的正则表达式,包括单引号 (')
- javascript - 如何为 IE 正确使用 onchange 元素