模型并行训练

1.3d并行相关

流水线并行水平划分模型,即按照层对模型进行划分;张量并行则是垂直划分模型。
再好好理解激活和梯度!

梯度数目一般是等于参数数目的(除了梯度重新参数化那些!!)

注意激活值等也是要保存的!:存储wb,激活值,梯度,以及adam等,还有一些零时信息

3d并行的一个解释:这个很不错

更多的理解:ok

提到了tf的一些策略和异步方法:做个了结

 1.zero系列就是特殊的数据并行啊,感觉和其它3d并行不矛盾啊,但是通信可能比较多;2.但是对于tp很疑惑,这个是怎么实现呢,可以全部跑一遍(如果分开存在小的气泡且要通信,全跑存在浪费但是减少通信);3.zero2之后,后向过程中通信增加,就是梯度那个环境,假设是同步跨卡交互,zero还要allreduce,bloom也测试确实效率下降较多! 

 好好理解参数量,一共是3份,mv这两个默认是0,不需要传递!!另外正常情况下,要传递的只有梯度!!权重,优化器情况是不用管的,而且是先计算完,最后再同步,之后同步后调用更新!

 激活值开启混合精度也是fp16的!

2.ZeRO相关(微软的)

deepspead使用的一些技巧:标记,需要测试

使用方法补充:ok,需要重点标记

官网:标记

zero说明:这个文章解释的很不错

zero2补充:这个是可以使用cpu或gpu处理交互数据的!

非常不错,图很好!还有一堆知识 重点!!

 1.分析zero1:优化器不需要同步,如果一张卡一层这种,如果是不全的话,是需要同步的!是要按照层划分的;2.zero1后向通信不变,前向必须通信啊!不然w怎么同步呢?

3.并行训练相关(直接用ddp和horovod)

horovod说明:这个也是一个并行库,uber开源的,相关安装方法,比较麻烦,需要自己配置对应的通信库(默认是基于mpi的)、gpu支持 信息很全面!

horovod代码细节:重点标记

mpi+nccl组成

对于ddp方法,每一个gpu一个进程(确实观察到了这个现象)

目前好像torch.distributed.launch已经建议废除,使用torchrun

ddp的代码细节 大佬非常厉害

ddp相关的一些说明:这个比较全面

gpu用nccl,cpu用gloo一般

对比说明:先就用ddp自带的,那个找别的机器测试一下

4.通信相关

常用的通信库:openmpi(2009,没有考虑节点延迟,带宽不同的问题),nccl(2015还不支持,2017之后支持多节点),gloo,加油一个阿里巴巴的accl(基于Having-Doubling,做了拓扑,但是会变换节点链接)

allreduce有很多种方法,很多种代码!

经典架构是ps

α + S / B + S * C 通信时间包括:节点通信第一项,数据/带宽第二项,数据计算时间第三项

1.ps:2*(α + S/B) + NSC,主节点带宽非常容易成为瓶颈

2.树状算法:2*(log2k+1)次通信,如果是2n次,没有1 ,整理耗时 2*log2N(α + S/B + S*C )*

3.蝴蝶算法:全部通信,log2N*(α + S/B + S*C )

4.环状通信:*2*(N-1)[α+S/(NB)] + (N-1)[(S/N)C]

非常全面这个文章写的很好,而且给出了相关的可能时间,重点标记!

ring-allreduce 最早是百度的文章

allreduce原理:可以看一下百度的文章

accl说明:暂时没有看,标记一下,优化了环形通信的节点太多时延问题

还有异步相关的:这个看到的不多

有个很好奇的,allreduce比如2*8情况,是16节点还是8节点2个主通信?

第一个是2(16-1)=30

第二个是2(8-1)+1+7=22

上面3种的补充:仔细研究

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值