pytorch的DP和DDP

参考

https://andrew.gibiansky.com/blog/machine-learning/baidu-allreduce/#

https://zhuanlan.zhihu.com/p/343951042

本文只记录一下,为什么DDP的通信比DP的高效。

1、DP

Data transfer to and from a single reducer GPU

 假设共有K个GPU,GPU的通信带宽是B,每个GPU要发送的数据量是P(所有参数的梯度信息),那GPU0接收完所有信息,需要耗时(K-1)P/B,GPU0更新完参数后,需要同步给其他GPU,又需要耗时(K-1)P/B,所以每迭代训练一次,通信耗时2(K-1)P/B,耗时和GPU数量线性相关。

2、DDP

DDP 支持 Ring AllReduce,其通信成本是恒定的,与 GPU 数量无关。

GPUs arranged in a logical ring

 DDP模式下,GPU会把要同步的数据分成K份,K为GPU的个数,每次循环每个GPU需要接收和发送的数据量为P/K。

首先是Scatter-reduce过程,下图第一次循环的情况:

Data transfers in the first iteration of scatter-reduce

第一次循环后,每个GPU会把收到的数据和自己的数据进行相加,然后进行下一个循环:

Scatter-reduce data transfers (iteration 2)

 经过K-1次后,每个GPU都有其中一部分参数的完整数据,比如GPU0有完整的b,GPU1有完整的c。

Final state after all scatter-reduce transfers

 经过上述的Scatter-reduce后,后续再进行Allgather。

Allgather第一次循环:

Data transfers in the first iteration of the allgather

第二次循环:

Allgather data transfers (iteration 2)

经过K-1次后,所有的GPU都有所有参数的完整数据:

Final state after all allgather transfers

 所以整个同步过程需要时间为2(K-1)(P/K)/B,耗时不会随着GPU数量增加而等比增加,大大提高了GPU之间的数据同步效率。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值