当前位置: 首页 > news >正文

【NCCL】Ring Allreduce

AllReduce算法概述

AllReduce主要目的是在所有处理器上收集并汇总数据,使得每个处理器都能获得全局数据的归约结果。

AllReduce就像一个“班级大合唱的收票统计”:

假设一个班有4个小组,每个小组算出了自己应该交的班费(比如A组10元,B组20元,C组30元,D组40元)。AllReduce的目标就是让每个小组都知道全班总共要交多少钱(10+20+30+40=100元),而不仅仅是知道自己小组的数额。

为什么这个很重要?在深度学习(比如训练大模型)中:

  • 每个处理器(GPU) = 上面的一个“小组”

  • 每个处理器的数据 = 这个小组算出的“班费”(实际上是模型参数的梯度)

  • 归约操作(Reduce) = “把班费加起来”(通常是求和或求平均)

如果每个GPU只知道自己算出来的梯度,然后用它来更新模型,那么各个GPU的模型就会变得不一样,训练就会乱套。AllReduce确保了所有GPU在更新模型之前,对梯度达成全局共识,这样模型才能保持同步和正确。

AllReduce算法种类

Ring  Allreduce 、Tree Allreduce、NVLS Allreduce 等

Ring Allreduce算法原理

核心思想是将所有处理器连接成一个环形结构。在这种结构中,每个处理器都只有一个前驱和一个后继处理器。数据在处理器之间通过环形路径传递,每个处理器在接收到数据后进行归约操作,然后将结果发送给下一个处理器。

算法步骤

  1. scatter-reduce阶段:每个处理器将本地数据发送给其右邻处理器,并接收来自左邻的数据进行归约操作。

  2. allgather阶段:处理器将scatter-reduce阶段的结果发送给其右邻处理器,并从左邻处理器接收数据。

通信优化

Ring Allreduce算法的通信成本是恒定的,与系统中处理器数量无关,这大大降低了通信开销。此外,由于所有处理器都参与数据传输,因此可以充分利用网络带宽,提高通信效率。

算法优势

其他算法的缺点:https://zhuanlan.zhihu.com/p/79030485

  1. 通信成本恒定:Ring Allreduce算法的通信成本与处理器数量无关,这使得算法在处理器数量增加时仍能保持高效。

  2. 降低网络拥塞:由于数据传输路径明确,算法可以减少网络拥塞,提高通信效率。

  3. 易于实现:Ring Allreduce算法的实现相对简单,易于在现有分布式系统中集成。



Ring All-reduce 的数学性质

(这部分摘自:https://segmentfault.com/a/1190000041762026)

 all-reduce

如图 1 所示,一共 4 个设备,每个设备上有一个矩阵(为简单起见,我们特意让每一行就一个元素),all-reduce 操作的目的是,让每个设备上的矩阵里的每一个位置的数值都是所有设备上对应位置的数值之和。

图 2:使用 reduce-scatter 和 all-gather 实现 all-reduce

reduce-scatter 的实现和性质

图 3:通过环状通信实现 reduce-scatter

从图 2 可以看出,reduce-scatter 的结果是每个设备保存一部分 reduce 之后的结果。为了方便讨论,我们先定义一些符号。

假设有 p 个设备(上面的例子中 p=4);假设整个矩阵大小是 V, 那么 reduce-scatter 后,每个设备上有V/p大小的数据块;假设卡和卡之间通信带宽是β,而且是双工通信(duplex),即每个设备出口和入口带宽可以同时达到β,所有设备的入口带宽总和是 p xβ,所有设备的出口带宽总和也是 p xβ。

高效实现一个集群通信的关键是如何充分利用设备和设备之间的带宽,基于环状(ring)通信实现的集群通信算法就是这一思想的体现。我们以 reduce-scatter 为例来看看环状通信算法是怎么工作的。

一共有 p 个设备,每个设备上数据都划分为 p 份,环状 reduce-scatter 一共需要 p-1 步才能完成。

在第 1 步中,每个设备都负责某一块 V/p的数据并向左边的设备发送这块数据,譬如在图 3 中,第 1 个设备负责第 2 片数据并向第 0 个设备发送(也就是第 4 个设备),第 2 个设备负责第 3 片数据并向第 1 个设备发送,第 3 个设备负责第 4 片数据并向第 2 个设备发送,第 4 个设备负责第 1 片数据并向第 3 个设备发送,每个设备收到右边设备的数据后,就把收到的数据累加到本地对应位置的数据上去(通过逐渐变深的颜色表示数据累加的次数更多)。注意,在这样的安排下,每个设备的入口带宽和出口带宽都被用上了,而且不会发生争抢带宽的事情(挑战一下自己,能不能想出比环状通信更厉害的集群通信实现?)。

在第 2 步中,第 1 个设备把累加后的第 3 片数据向第 0 个设备发送(也就是第 4 个设备),第 2 个设备把累加后的第 4 片数据向第 1 个设备发送,第 3 个设备把累加后的第 1 片数据向第 2 个设备发送,第 4 个设备把累加后的第 2 片数据向第 3 个设备发送,每个设备收到右边设备发过来的数据后,就把收到的数据累加到本地对应位置的数据上去(累加后颜色更深)。

在第 3 步中,第 1 个设备把累加后的第 4 片数据向第 0 个设备发送(也就是第 4 个设备),第 2 个设备把累加后的第 1 片数据向第 1 个设备发送,第 3 个设备把累加后的第 2 片数据向第 2 个设备发送,第 4 个设备把累加后的第 3 片数据向第 3 个设备发送,每个设备收到右边设备发送过来的数据后,就把收到的数据累加到对应位置的数据上去(累加后颜色更深)。

经过 p-1 步之后,每个设备上都有了一片所有设备上对应位置数据 reduce 之后的数据。整个过程中,每个设备向外发送了 (p−1)V/p大小的数据,也收到了(p−1)V/p大小的数据,因为每个设备的出口或入口带宽是β,所以整个过程需要的时间是(p−1)V/pβ,如果 p 足够大,完成时间近似为V/β,神奇的是,这个时间和设备数 p 无关。当然,在所有设备间传递的数据量是 (p-1)V,和设备数 p 成正比。

让我们强调一下:基于环状通信的集群通信算法执行时间几乎和设备数无关,但总通信量和设备数成正比。

3

all-gather 的实现和性质

reduce-scatter 执行结束之后,再通过 all-gather 过程就可以实现 all-reduce,其中 all-gather 也可以通过环状通信算法来实现。

图 4 :通过环状通信实现 all-gather

图 4 给出了环状 all-gather 的实现过程,我们就不详细描述了,值得注意的是,它的通信时间和通信量的分析与 reduce-scatter 一模一样:整个过程需要的时间是 (p−1)V/pβ,如果 p 足够大,完成时间近似为V/β,这个时间和设备数 p 无关,当然,在所有设备间传递的数据量是 (p-1)V,和设备数 p 成正比。

不过,请注意在 reduce-scatter 里,V 都是完整矩阵的数据量,即 reduce-scatter 输入矩阵的数据量和 all-gather 输出矩阵的数据量。

通信量和冗余显存之间的关系

上文只分析了通信量,而没有分析对设备显存的占用量。以图 3 为例,每个设备上的输入矩阵大小是 V,但经过 reduce-scatter 之后每个设备上只需要 V/p大小的显存,也就是 (p−1)V/p的空间是冗余的,因为一共有 p 个设备,所以整个集群中有 (p-1)V 的显存是可以节省下来的。注意,每个设备冗余的显存恰好和每个设备的通信量一致,所有设备冗余的显存和所有设备的总通信量一致。

以图 4 为例,每个设备上的输入矩阵大小是V/p,但经过 all-gather 之后每个设备上需要的显存是 V,而且每个设备上的矩阵的大小和数值都完全一样,也就是经过 all-gather 之后,在设备之间产生了冗余,不同的设备存储了一些完全一样的数据。同样,每个设备冗余的显存恰好和每个设备的通信量一致,所有设备冗余的显存和所有设备的总通信量一致。

当然,冗余量和通信量之间的等价关系不是偶然的,正是因为这些通信才造成了设备之间数据的冗余。

因此,当保持 V 不变时,增大设备数 p(我们不妨称 p 为集群通信的并行宽度)时,所有设备之间的通信量是正比增长的,而且在所有设备上造成的冗余显存是正比例增长的。当然,完成一个特定的集群通信所需要的时间基本和并行宽度 p 无关。

因此,增加并行宽度 p 是一个双刃剑,一方面它让每个设备处理的数据量更小,即V/p,从而让计算的时间更短,但另一方面,它会需要更多的通信带宽(p-1)V,以及更多的显存空间(p-1)V。

5

环状算法的最优性

我们在前面提了一个问题:你能不能想出比环状算法更好的集群算法实现?答案是,理论上不可能有更好的算法了。

我们已经分析过了要完成 reduce-scatter 和 all-gather 每个设备至少要向外发送(以及同时接收)的数据量是 (p−1)V/p,无论使用什么算法,这个数据量是不可能更少了。

在这个数据量下,最少需要多少时间呢?出口带宽是β,因此一张卡向外发送数据至少需要的时间是(p−1)V/pβ,这也正是环状算法需要的时间。

当然,我们这里的通信时间只考虑传输带宽,而没有考虑每次传输都包含的延迟(latency)。当数据量 V 比较大时,延迟项可以忽略,上文的分析就是成立的。

当 V 特别小,或者设备数 p 特别大时,带宽β就变得不重要了,反而是延迟比较关键,这时更好地实现就不是环状算法了,而应该使用树状通信。这也是为什么英伟达 NCCL 里既实现了 ring all-reduce,也实现了 double-tree all-reduce 算法(
https://developer.nvidia.com/...)。

参考:https://www.oryoy.com/news/jie-mi-allreduce-ring-suan-fa-gao-xiao-bing-xing-ji-suan-de-mi-mi-wu-qi.html

http://www.dtcms.com/a/462677.html

相关文章:

  • 压缩感知的波达方向估计技术
  • 如何查网站关键词重庆免费网站制作
  • gps的时间基准
  • 网站策划案4500企业黄页的含义是什么
  • 李笑来做的一个网站火是用什么做的视频网站
  • Unity各种报错问题 定位与解决
  • Spring 面试宝典
  • 阳朔县建设规划局网站备案域名租用
  • 网站建设需要哪些工具与知识wordpress图片分享主题
  • 智能化 DDOS 防护平台架构与演进方向
  • 中石化网站是哪个公司做的做企业网站用什么框架
  • 第二步:创建写接口的模块,建立moogodb数据库连接,写添加与查询接口
  • 滑动窗口题目:K 个不同整数的子数组
  • qq网站临时会话静态网站跟动态的区别
  • 阿里云万网建网站家居企业网站建设报价
  • VBA效率大揭秘:选对数据结构,性能飙升300%!
  • LLM 论文精读(九)A Survey of Reinforcement Learning for Large Reasoning Models
  • The “Next“-价值度量与评估
  • 深圳营销网站建设多少钱frontpage网页制作实例
  • 家用电器行业外贸建站世界工厂采购网app
  • synchronized (Java)
  • LINUX——调试器gdb/cgdb的使用
  • GIS实战:投影变换教程与问题解答(上)
  • 项目(3) - LVGL 图形用户界面(GUI)库
  • 长春专业网站推广给我高清电影
  • Redis07-面试题
  • 甘肃省建设社厅网站电商要怎么做起来
  • 做软件常用的网站四川建筑职业技术学院教务网
  • 公司营业执照可以做几个网站微信小程序怎么制作自己的程序
  • 磁悬浮轴承的“眼睛”与“神经”:位移传感原理深度解析