#Pytorch#单服务器多GPU训练&碰见问题

 

pytorch多gpu并行训练

  • 单机多卡并行训练

单机多卡并行训练的目的是,实现大batch训练模型,设置模型参数放置到多个GPU上。

在pytorch1.0之后的版本中,多GPU运行变得十分方便,

API : torch.nn.DataParallel

流程:

  • 使用os.environ['CUDA_VISIBLE_DEVICES']来限制使用的GPU个数,注意该限制必须放在所有使用GPU的命令之前,否则会失效 ,见碰见问题第一条。
os.environ['CUDA_VISIBLE_DEVICES'] = '4,5'
  • 若加载的是网络模型, 执行下述代码
##设定多GPU
model_mulit = nn.DataParallel(FTDNN(24)) ####FTDNN改成你自己的模型
model_mulit = model_mulit.cuda()
 
  • 若加载的是训练数据,执行下属代码:

inputs = inputs.cuda()
labels = labels.cuda()
  • 以上为博主采用的设置,也可采用pytorch官网示例代码:
model = Model(input_size, output_size)
if torch.cuda.device_count() > 1:
    print("Let's use", torch.cuda.device_count(), "GPUs!")
    # dim = 0 [30, xxx] -> [10, ...], [10, ...], [10, ...] on 3 GPUs
    model = nn.DataParallel(model)

model.to(device)

拓展:nn.DataParallel(model) 实现

class DataParallel(Module):
    def __init__(self, module, device_ids=None, output_device=None, dim=0):
        super(DataParallel, self).__init__()

        if not torch.cuda.is_available():
            self.module = module
            self.device_ids = []
            return

        if device_ids is None:
            device_ids = list(range(torch.cuda.device_count()))
        if output_device is None:
            output_device = device_ids[0]
  • 多机多卡并行训练

待补充!

碰见问题:

  1. 设置 os.environ['CUDA_VISIBLE_DEVICES'] = '4,5'  无效

      原因:这一行代码放置的位置不对

      解决方法:错误代码如下

print(torch.cuda.is_available())
###使用多块GPU
GPUID ="4,5"
###设置对当前程序可见GPU
os.environ['CUDA_VISIBLE_DEVICES'] = GPUID

      正确代码:一定要把os.environ['CUDA_VISIBLE_DEVICES']=‘1‘放在所有访问GPU的代码之前。

###使用多块GPU
GPUID ="4,5"
###设置对当前程序可见GPU
os.environ['CUDA_VISIBLE_DEVICES'] = GPUID
print(torch.cuda.is_available())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值