CANN集合通信技术解读——NHR算法

举报
昇腾CANN 发表于 2025/12/24 15:11:00 2025/12/24
【摘要】 1.摘要大模型分布式训练离不开集合通信,HCCL集合通信库除了集成了业界常用的Ring、HD等通信算法外,还自研了NHR算法。该算法是一种节点(AI Server)间的通信算法,传输步数在对数级别,能很好适应非2次幂的集群规模。该算法具有组网亲和的特点,大数据量传输尽量控制在物理距离接近的节点间,减少数据经过的交换机跳数,可有效提升大规模集群中通信算子的执行效率。2.常见的节点间通信算法AI...
1.摘要
大模型分布式训练离不开集合通信HCCL集合通信除了集成业界常用的RingHD通信算法外,NHR算法该算法是一种节点(AI Server通信算法,传输步数在对数级别,能很好适应非2的集群规模。算法具有组网亲和的特点,大数据传输尽量控制在物理距离接近的节点间,减少数据经过的交换机跳数,可有效提升大规模集群中通信算子的执行效率
2.常见的节点间通信算法
AI计算集群常常采用节点节点间分级网络架构节点内通过直连电缆互联,节点间同号卡通过交换机互联,如下图所示,拓扑结构称为Spine-Leaf网络架构拓扑中节点的任意两同号卡经过交换机链路上是互通的,且带宽相等其中虚线框范围表示集群网络的第一层,如果不同节点的同号卡通过一层的Leaf交换机直接相连,则不用经过二层Spine交换机。

图片6.png

HCCL针对此类拓扑结构一般采用分级算法,将节点内和节点间分为两级,针对每一级不同的拓扑形态和集群规模分别选择最适合的算法。本文主要讲述节点间同号卡间的通信场景,在该场景下,卡间收发是全双工的(可以同时进行且互不影响),但需保证同一时间任意卡上没有数据流量冲突(即保证每个卡同时只从1对端收数据,且只往1对端发数据),否则会产生带宽争抢导致通信算法整体性能下降。下面介绍几种常见的通信算法。
2.1Ring算法
Ring算法N串联成一个环,每个卡只会和左右相邻的卡之间通信。在Ring算法的通信过程中,每一张卡的数据沿着环形结构在卡间传递,直到完成通信,数据也就到达了目的

图片7.png

优点Ring算法每一步通信的通信对端不会发生变化,链路是固定的,在经过交换机时发生流量冲突的概率非常低
缺点Ring算法的通信步数通信节点规模增长而线性增长,复杂度为O(N)在中小数据量下容易出现较大延迟,因此Ring算法更适合小集群规模、大数据包场景。
2.2HD算法
HDHalving-Doubling)算法基本思想是多个之间两两通信,通信节点间的距离和通信数据量在每步的过程中呈现折半或者加倍的关系4ReduceScatter为例,需要将输入数据切分为4份,0卡第一步先与2通信2份数据,接着与1卡通信1份数据,最后0卡上就得到了对应数据片的Reduce结果。

图片8.png

优点该算法在2的集群规模中,具有O(logN)级别理论最优的通信步数,理论耗时少,并且计算需求和带宽需求可以适当分摊给多个节点。
缺点HD算法的一个缺点是最大数据量的通信步骤传输一半的总数据量)发生在物理距离较远的两个节点间,而通信数据最小的步骤发生在距离最近的节点间距离越远,经过的交换机层数越多,网络带来的性能损失可能就越大。


图片9.png

此外,在集群规模为非2的整数次时,HD算法会退化为RHDRecursive HD算法,如下图所示



图片10.png

该算法需要将部分卡上的数据转移到其他卡上,将通信规模转化为2以应用HD算法这样在头尾各引入一步额外的通信链路带宽始终有部分闲置,产生规模集群下的通信性能比规模集群通信性能还差的反常现象下表展示了不同规模下的HDRHD算法步数对比,其中箭头代表通信时数据传输的方向,并分Step表示每步的传输情况


图片11.png

2.3Tree算法
Tree的角度去构建节点间的通信关系也可以实现O(logN)级别复杂度个树结构一般连接所有节点,从叶子节点到节点的深度是O(log2N)每个通信节点只需要父节点和子节点进行通信,且对于一个非叶子节点,每一步只能和其一个子节点进行通信。实现一个AllReduce算子的过程一般被分为ReduceBroadcast过程。对于Reduce,每个源节点将自己的数据自下而上的逐层传播Reduce到根节点。对于Broadcast节点将数据自上而下地传播到各个子节点 


图片12.png

优点Tree算法2规模引入额外的数据通信步骤因此针对任意集群规模均有O(logN)级别的理论最优性能
缺点Tree算法在具体实现需要引入切片、流水等特性来提升带宽利用率,在小数据包情况下会引入额外的开销。此外,由于Tree算法实现采用Reduce+Broadcast的通信模式导致Tree算法不能很好地支持ReduceScatterAllGather等算子
3.NHR算法技术解读
3.1简介
NHR算法是Nonuniform Hierarchical Ring的缩写,即非均衡的层次环算法目前支持A2/A3服务器AllReduce/ReduceScatter/AllGather/Scatter/Broadcast通信算子NHR算法旨在解决Ring、RHD等算法的缺陷,具有以下特点:
22次幂规模集群的通信步数均在理论最优的O(logN)级别2次幂场景下没有冗余流量实现整体链路利用率最大化
通信数据量最多的步骤发生在物理距离最相近的节点之间可以有效利用物理近邻的高带宽优势这样的跨交换机流量冲突最小

接下来分别以2规模和非2次幂规模为例,展示NHR算法的过程
3.2 2场景
通信步骤的表示方法
我们一般Rank代表通信域中每张卡的编号,3->2[0,2]”来简单表示“Rank3Rank2发送编号为02的数据片”这一步通信过程,箭头表示数据的流动方向为节点3发送给节点2括号内的数字表示需要发送的数据切片的编号

ReduceScatterAllGather算子的实现步骤
基于该表示方法,下表展示了4卡场景下ReduceScatterAllGather算子在NHR算法下的通信关系S表示总数据量


图片13.png

算法优点
可以看到,我们得到了一个不均匀的层次环通信关系:第一层Rank编号的间隔为1;第二层Rank编号的间隔为2,以此类推不同层通信Rank编号间隔不相等,总的环数为log2N

图片14.png

每一步通信保证是同间隔、同方向的环形发送,同时保证了最大数据量通信的步骤发生在近邻(表中的ReduceScatter算子Step0在相邻节点间发送2份数据),吸取了Ring算法的优势。

AllReduce算子进一步的优化点
针对AllReduce算子,NHR算法通过重排数据片编号,在不改变通信对端的情况下,实现每一步数据片的聚合发送。表展示了AllReduce算子经过重排后的通信关系。可以发现,此时Step0每两个节点间发送的数据数据虽然还是2份,但是们的内存地址变成了连续的,可以视为1size更大的内存数据

图片15.png

从底层机制上看单个通信任务在语义上是针对一块连续内存数据的,对于每一块连续内存的通信,底层都需要下发一个单独的任务,所以NHR算法通过这种方式将每次发送中的不同数据块尽可能拼成一块连续的内存数据块,可以进一步减少通信任务下发的开销和通信的头开销,提升通信性能。

AllReduce完整的通信过程
4卡场景完整的AllReduce算子的通信过程如下图所示其中ReduceScatter阶段第一步交换一半大小的数据,每次通信数据量减半,每一步刚好都只交换1份数据,AllGather阶段的收发关系则完全对称

图片16.png

观察ReduceScatter阶段的输出结果,Rank 1得到了第2份数据切片的Reduce结果,Rank2得到了第1份数据切片的Reduce结果,因为交换了通信的数据切片编号,因此得到的输出(要求的输入)是乱序的由于AllReduce的通信过程由ReduceScatterAllGather两阶段组成,中间结果乱序并不影响最终的通信结果,因此这一重排的优化方案仅适用于AllReduce等两阶段的算子,对单独的ReduceScatter/AllGather算子不适用,但仍具有NHR算法本身的优点
3.3 非2场景
rank数等于5为例针对AllReduce算子的NHR算法经过重排后通信关系如下表所示。

图片17.png

5节点的集群中,通信的ReduceScatter阶段一共分3步(AllGather阶段是对称的)。第一步中每个节点与相邻的节点进行通信,通信数据份数为2;第二步通信间隔为2,通信的数据份数为1;第三步通信间隔为4,通信的数据份数为1可以看到在这样的算法编排下,大部分的数据切片仍然可以连续收发,只有少部分卡间通信的数据切片是不连续的。
这一场景的完整通信过程如下图所示,可以看到通信过程中没有闲置链路,保证了带宽最优

图片18.png

4. 性能评估
最后给出RingHD以及NHR算法下AllReduce算子的理论耗时计算公式作对比。假设有N节点,那么在Sever间通信时每个通信节点上的数据被切分为N,假设S为通信的数据块大小B为两个通信节点之间的带宽每秒传输的字节数L为两个通信节点之间的延迟(需要乘以2是因为AllReduce分为ReduceScatterAllGather两个阶段)
Ring算法的理论耗时为:


11.png

HD算法在2场景下的耗时为:



22.png

RHD算法在非2次幂场景下需要在头尾步骤做额外数据通信以将节点规模等效到2次幂,然后再应用HD算法,整体性能劣于NHR算法。

NHR算法通信的理论耗时为:


33.png

理论建模时只能考虑通信的步数和数据量,但无法考虑算法受网络情况的影响程度。因此虽然评估公式中第二部分数据传输的时间是相同的,但是实际业务中仍可以观察到明显区别。下图给出了HCCL集合通信库中的AllReduce算子在A2不同集群规模下ring、H-D_R和NHR算法的实测性能趋势(通信数据量为32MB),可发现NHR算法在大规模集群下受网络因素影响最小。

图片19.png




【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。