pytorch 模型训练的多GPU训练

pytorch针对多GPU训练提供了两个类来实现多GPU训练,分别是torch.nn.DataParallel和torch.nn.parallel.DistributedDataParallel,因为torch.nn.DataParallel相对比较简单,因此先介绍torch.nn.DataParallel。

当使用torch.nn.DataParallel的时候,数据会分配到各个GPU中,完成前向计算,然后再汇总到主卡计算loss,进行反向传播。显然,这种方式会使得多个GPU之间负载不均衡。

torch.nn.DataParallel具体的使用方法

model = BERTModel(pretrain_name,vocab_size)
device_ids = [0,1] #指定使用的显卡id
model = nn.DataParallel(model,device_ids=device_ids).to(device_ids[0]) # 多卡训练,用device_ids[0]只是定义一个样式,不需要逐卡指定设备。但没这一步会报错。数据的batch_size为单卡的batch_size*len(devices)

trainer = torch.optim.Adam(model.parameters(),lr=1e-3)
trainer = nn.DataParallel(trainer,device_ids=device_ids)

注意device_ids 为指定需要训练的GPU,以上的几行代码可以实现模型和优化器都放到GPU中,记得在进行训练的时候,数据也要放到GPU中,只需要将数据的tensor.cuda(device_ids[0]) 即可。torch.nn.DataParallel模块会自动将数据都分发到各个GPU中进行计算。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值