【分布式深度学习-文章阅读】GPipe: Efficient Training of Giant Neural Networksusing Pipeline Parallelism

一、小纪要

1、这篇文章是近期大多数做分布式并行训练的 baseline之一 ;

2、这篇文章侧重点就是model parallelism,往细了说就是layer parallelism,再通俗点就是,grouped layer parallelism;

3、曾经最常用的是,data parallelism,但是随着transformer等大模型的出现,不用model parallelism基本上等于放弃研究了,所以model parallelism再次回归,然后大热。

二、提出问题

1、大多数现存的model parallel在结构上会有特定要求或改变,或者只能针对一些特殊任务;(就是会设计模型修改)

2、玩深度学习的人需要一个可靠,灵活的框架来实现model parallelism

3、模型越来越深,参数越来越多

       作者给出了下,近期在CV和NLP两个领域的模型与精度的点图,就是想让我们看下,参数越多精度越高

三、解决方法

1、将网络模型的layer 分组,每一个组是一个连续的layer序列

2、将minibatch(B)划分,提出microbatch(m)概念,B = M * m(这里M 就是microbatch的个数,理论上在Gpipe文章中,应该等于pipeline的个数)

 

 首先对“字母”进行一下说明:每个模型有L层,L_{i}就代表了某些的某一层,因此对应的forward标记为f_{i},参数标记为w_{i};c_{i}代表了计算开销;

假设我们要把整个model划分为K个部分,每个部分用p_{k}表示,其中包含了从ij的layer;那么p_{k}对应的forward就等价于f_{i}\cdot f_{i+1}...\cdot f{j};同理开销函数C_{k}= \sum_{j}^{l=i} c_{l}

因此,使用Gpipe就需要自定义三个东西(K,M--microbatch的个数,定义序列L)

这里可以发现,作者提出的方法,存在bubble time,O(\frac{K-1}{M+K-1}),但是当M\geq 4 \times K的时候这个bubble time就不用很在乎了

3、这种方式也可以和data parallelism结合,进一步增加并行规模(比如,可以每个node上多卡进行pipeline parallelism,跨node进行data parallelism)

4、re-materialization 重计算技术,因为pipeline之后,在等待反向传播的时候,需要保留每个layer,每个microbatch的activation,这部分需要很多的内存;因此可以不保存,只需要保存每个小组的output在内存中即可;反向传播的时候重新计算整个F_{k},就可以重建全部的activation;

这张图可以看出来,activation需要的内存开销是非常大的 

四、其他说明3

1、继续采用基于minibatch的同步梯度反向传播,也就是在一个minibatch中的最后一个microbatch结束才计算最终的loss和开始反向传播,最后更新权重

2、注意batch norm的统计正确

3、实验

4、代码:https://github.com/kakaobrain/torchgpipe

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值