pytorch使用gpu(linux服务器上)

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快,原因(猜测):几块卡之间的通信损失大于并行计算的增益

你可能感兴趣的:(Deep,Learning)