Pytorch(十一) —— 分布式(多GPU/多卡)训练 并行 (DP & DDP)

      从PyTorch 0.2版本开始,PyTorch新增分布式GPU支持

      注意分布式和并行的区别:分布式是指有多个GPU在多台服务器上,而并行一般指的是一台服务器上的多个GPU。分布式涉及了服务器之间的通信,因此比较复杂,PyTorch封装了相应的接口,可以用几句简单的代码实现分布式训练。

       分布式对普通用户来说比较遥远,因为搭建一个分布式集群的代价很大,使用也比较复杂。相比之下,一机多卡更现实

       如果服务器具有多个GPU,tensor.cuda()方法会将tensor保存到第一块GPU上,等价于tensor.cuda(0)。此时如果想使用第二块GPU,需手动指定tensor.cuda(1)

Pytorch多卡训练的原理

(1)将模型加载到一个指定的主GPU上,然后将模型复制(浅拷贝)到其它的从GPU上;

(2)将总的batch数据等分到不同的GPU上进行计算(坑:需要先将数据加载到主GPU上);

(3)每个GPU根据自己分配到的数据进行forward计算得到loss,并通过backward得到权重梯度;

(4)得到的输出在主GPU上进行汇总,主GPU将所有从GPU得到的梯度进行合并并更新主GPU上的权值。再将更新后的模型参数复制到其他GPU 中

要区分DP和DDP,不能这么笼统地说,二者不一样

主 GPU 默认情况下是 0 号 GPU,也可以通过 torch.cuda.set_device(id) 来手动更改默认 GPU。

Pytorch中多GPU并行计算(分布式)

我们主要谈论的是单主机多GPU(单机多卡)训练

  • DataParallel(DP) 实现简单,代码量较少,启动速度快一点。但速度较慢,且存在负载不均衡的问题。单进程,多线程主卡显存占用比其他卡会多很多。不支持 Apex 的混合精度训练。是Pytorch官方很久之前给的一种方案。
  • DistributedDataParallel(DDP)   All-Reduce模式,本意是用来分布式训练(多机多卡),但是也可用于单机多卡。配置稍复杂。多进程数据分配较均衡。是新一代的多卡训练方法。使用torch.distributed 库。

现在都是用DistributedDataParallel

使用DistributedDataParallel,需要用torch.distributed.launch去launch程序,
 

DP的话就像这样

所有的卡都是一个进程

Pytorch中多GPU并行计算教程_霹雳吧啦Wz-CSDN博客_pytorch多gpu并行训练

Pytorch中多GPU并行计算教程_霹雳吧啦Wz-CSDN博客_pytorch多gpu并行训练

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值