1.查看服务器中GPU信息: 转自这里-->https://blog.csdn.net/handsome_bear/article/details/80903477
nvidia-smi
2.使用单个gpu: 转自-->https://blog.csdn.net/yzy__zju/article/details/85014576
# 指定gpu/cpu, 指定使用gpu号x ‘cuda:x’
device=torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# 网络转gpu
model=model.to(device)
# tensor转gpu
x=x.to(device)
y=y.to(device)
3.多gpu并行: 转自-->https://blog.csdn.net/qq_19598705/article/details/80396325
(1)使用torch.nn.DataParallel进行多gpu并行处理,官方文档给出了工作原理和注意事项:https://pytorch.org/docs/stable/nn.html#torch.nn.DataParallel
(2)具体使用方法
在定义模型和优化器时做出的更改:
# 指定gpu号
device_ids = [0,1,2,3]
# 处理model
# 此处device可以随便指定一个,并行时是replication,同理tensor处也无需修改
model = Net().to(device_ids[0])
model = torch.nn.DataParallel(model, device_ids=device_ids)
# 处理优化器
optimizer = optim.Adam(model.parameters(), lr=learning_rate)
optimizer = torch.nn.DataParallel(optimizer, device_ids=device_ids)
在训练时做出的更改: optimizer.module.step()
def train(model, device, train_loader, optimizer):
model.train()
loss = 0
for data, target in tqdm(train_loader):
data, target = data.to(device), target.to(device)
optimizer.zero_grad()
output = model(data)
loss = F.nll_loss(output, target)
loss.backward()
# 这里将optimizer.step()修改
optimizer.module.step()
print('Train Loss: {:.6f}'.format(loss.item()))
(3)事实上我训练时使用多GPU还不如用一个GPU快,原因(猜测):几块卡之间的通信损失大于并行计算的增益
来源:CSDN
作者:baiyuwujia
链接:https://blog.csdn.net/baiyuwujia/article/details/99842590