首页优化地图方法索引基础概念
返回技术汇总表 ↗

M025 · 独立详解

通信算法、协议与拓扑:同样的结果,怎样交换得更快

先看 AllReduce 在做什么,再分开理解 Ring、Tree、传输协议、设备链路与分层通信。

通信与互联详解已编写
视频讲解待制作

这篇文章的小视频尚未制作;可以先阅读下方文字详解。

本页目录

01 · 卡多了,为什么反而花时间等

分布式训练反向之后,要把多个数据副本的参数梯度合并;张量并行的 Linear 也可能需要合并局部结果。设备各自算得快,如果这些结果迟迟不能到达,依赖它们的计算仍不能继续。优化通信要先知道交换的结果是什么,再决定交换路径。

操作结果常见使用位置
AllReduce 求和每个 rank 得到相同的逐元素总和DP 梯度同步、部分 TP 层输出。
ReduceScatter逐元素归约后,各 rank 只保留自己的片段分片梯度、某些分片输出。
AllGather按 rank 顺序收集片段,各 rank 得到完整内容FSDP 参数汇集、TP 输出拼接。
AlltoAll / 变长分发各 rank 向不同目的 rank 发送不同内容MoE token dispatch/combine。

rank 是通信组中的成员编号,不是设备型号。AllGather 的片段顺序取决于 rank;ReduceScatter 也有既定片段归属。若仅改调用名称、没有改后续数据布局,就可能得到错误结果。

依据:NCCL 2.32 · 集合通信操作与rank语义 ↗

02 · 算法、协议、通路和拓扑分别是什么

维度回答的问题示例
集合通信算法谁先发给谁,如何分片、归约和传播?Ring、Tree、分层 ReduceScatter/AllReduce/AllGather。
库内传输协议用怎样的块、标志和同步方式推进?NCCL 的 LL、LL128、Simple;适配能力与版本相关。
传输通路数据怎样真正跨设备?同机设备直连、PCIe、主机中转、网络 RDMA。
物理拓扑与映射哪些设备/NIC更近,哪些链路共享?设备—交换机—NIC连接、跨机网络、rank绑定。

NCCL 协议名称不是 TCP/RDMA 的另一种叫法;Ring 也不要求物理设备恰好接成一个圆。库可在物理网络上选择逻辑邻居,使用多个通道和分块流水。算法、协议、通路共同决定成本。

依据:NCCL 2.32 · 算法、协议与配置约束 ↗ · NVIDIA · GPUDirect RDMA通路与约束 ↗

03 · Ring AllReduce:先分片求和,再传完整结果

四个 rank 各有一份长度4的向量;把向量分成4个块。ReduceScatter 阶段,每轮沿环传一个块并累加接收到的对应贡献,3轮后每个 rank 拥有一个已经汇总四方的块。AllGather 再传播这些已完成块,3轮后所有 rank 都拥有完整总和。

阶段轮数(p个rank)每rank发送量
ReduceScatterp−1(p−1)×S/p
AllGatherp−1(p−1)×S/p
合计2(p−1)2(p−1)S/p

S 是每 rank 原始完整向量的字节数。表中是单 rank 发出的字节,不是整个集群流量,也不是发送和接收相加。增加 rank 后,理想单 rank 字节接近2S,但同步推进的轮数增加,所以短消息可能被每轮启动延迟主导。

教学示意 · 不代表硬件实测
每rank输入:
r0 = [1,2,3,4]
r1 = [10,20,30,40]
r2 = [100,200,300,400]
r3 = [1000,2000,3000,4000]
最终每rank = [1111,2222,3333,4444]
# 教学脚本实际模拟每轮传递与累加,并与直接求和核对。

依据:NCCL 2.32 · 集合通信操作与rank语义 ↗ · NVIDIA nccl-tests · algbw/busbw指标定义 ↗

04 · Tree:减少依赖深度,不只是“让根节点忙”

简单二叉归约树让子节点结果逐层合并,再沿树广播。p为2的幂时,每方向深度log₂p;比环的p−1轮更浅。若每个阶段传整份S,关键路径字节为2log₂p×S;这是帮助理解的整块教学树,没有分块流水。

实际 NCCL 的双二叉树让两棵互补树分别处理部分数据,减少单个内部节点的负担,并结合流水获取高带宽。因此,不能从上面的整块树模型得出“Tree只适合小消息、大消息必定用Ring”。真实选择依赖拓扑、规模、实现与消息。

依据:NVIDIA · NCCL双二叉树与分层通信设计 ↗

下方只比较两个简化模型:每轮固定延迟α,有效单向链路带宽B,不计归约计算、争用、通道和流水。Ring≈2(p−1)α+2(p−1)S/(pB);教学整块树≈2log₂p×(α+S/B)。

轮数与字节,哪个占主导?

固定B=25 GiB/s,p为2的幂;忽略归约计算、共享链路、通道和流水。Tree指教学整块单树,不代表NCCL双二叉树性能;表格可横向滚动。

05 · 分层通信:先利用近处链路,再跨机

假设2台机器、每台4卡。同机高速互联和跨机网络的代价不同,可以先在机内做ReduceScatter,把每台本地四方贡献分成四份;再让跨机器的对应分片组分别AllReduce;最后机内AllGather恢复完整向量。数学上仍是八方总和。

教学示意 · 不代表硬件实测
机内组:A0/A1/A2/A3 与 B0/B1/B2/B3
1. 每台机内 ReduceScatter → 每卡持有一段本机总和
2. A0↔B0、A1↔B1、A2↔B2、A3↔B3:对应段 AllReduce
3. 各机内 AllGather → 每卡持有八方完整总和

这样安排可能更好地利用多NIC与局部带宽,但四个跨机组并发若共用一张NIC,不会得到四倍带宽。链路瓶颈、交换网络超卖、设备到NIC距离和NUMA绑定仍需检查。具体库可能采用不同分层方案。

依据:NVIDIA · NCCL双二叉树与分层通信设计 ↗ · CANN 8.2.RC1 · HCCL通信域与分层算法 ↗

06 · 直接传输与归约卸载各省什么

设备→主机→网络→主机→设备会引入中转。兼容的 GPUDirect RDMA 通路让 NIC 直接访问设备内存,减少主机中转;仍需要内存注册、正确拓扑、驱动支持和完成依赖。RDMA不会把数据传输时间变成零,也不等于计算与通信已重叠。

支持的互联或交换设施还可参与集合归约,如 NCCL 的 NVLS/NVLSTree 涉及 NVLink SHARP 能力。它们依赖对应硬件、通信操作和软件支持;不能把“普通以太网通信”自动理解为“网络中已经完成求和”。

M025关注通信自身的算法与通路;M026是在依赖允许时,让通信与其他计算同时推进;M027则进一步在算子块层面组织通算融合。三者可以组合,优化对象不同。

依据:NVIDIA · GPUDirect RDMA通路与约束 ↗ · NCCL 2.32 · 算法、协议与配置约束 ↗

07 · 从默认策略和实测开始

NVIDIA nccl-tests 单机8GPU示意命令 · Linux测试程序需预先构建,未在本机执行
./build/all_reduce_perf -b 4K -e 64M -f 2 -g 8

按实际消息分布测试小、中、大消息,先保留库的自动选择。分别测单机与多机、单独通信与有计算并发。出现异常时,用日志和拓扑工具确认实际NIC、传输方式、通信组与算法;诊断后撤掉临时强制参数。

nccl-tests 的 algbw 是输入数据大小除以耗时,busbw 再按集合操作换算。例如AllReduce常用因子2(p−1)/p。两列不是同一指标,busbw也不是每根物理链路的抓包读数;比较报告应统一操作、rank数、单位和算法。

NCCL官方不建议随意强制协议;不支持的LL128等设置存在正确性风险。因此本篇不提供“把所有场景锁成某协议”的通用配方。

依据:NVIDIA nccl-tests · algbw/busbw指标定义 ↗ · NCCL 2.32 · 算法、协议与配置约束 ↗

08 · 通信变快,怎样验证模型也获益

  • 正确性:相同通信组、元素数、dtype、归约语义和rank顺序;浮点加法顺序变化可产生舍入差异。
  • 通信:各消息大小的延迟、带宽、尾部等待、实际传输字节和并发争用。
  • 系统:CPU/设备/NIC绑定、机内/机间连接及rank放置,不能只记录设备型号。
  • 端到端:同模型、batch与精度下比较训练step或服务TTFT/TPOT及吞吐。

训练梯度分桶变大可摊薄启动成本,但可能推迟第一次可发时刻;要和重叠一起看。只加快已被计算完全覆盖的通信,不一定缩短step;关键路径上的归约尾巴更值得关注。

09 · NVIDIA 与昇腾怎样对应

NVIDIA主要从NCCL算法/协议及设备网络通路阅读;昇腾HCCL文档列出Mesh、Ring、RHD、Pipeline等通信算法,并按Server内、Server间与超节点间组织。算法名称不能逐项视为等价性能,设备组网和具体版本支持要分别记录。

“超节点”描述一定规模内设备互联和资源组织,不能仅由Ring/Tree判断。NVIDIA也有大规模NVLink域,例如GB200 NVL72的72GPU域;跨域时仍需要合适通信分层。应比较域内带宽、域间出口和集合通信路径,而不是给两家贴互斥标签。

依据:CANN 8.2.RC1 · HCCL通信域与分层算法 ↗ · NCCL 2.32 · 算法、协议与配置约束 ↗ · NVIDIA · GB200 NVL72及72GPU NVLink域 ↗

  • 为什么8卡Ring每rank发送量接近2S,而不是8S?
  • 把消息从4KiB改成64MiB,教学模型的主导项怎样变化?
  • 机内分片后四组同时跨机通信,共用一个NIC时能否将带宽乘4?

流程位置与关联方法

这个方法可能出现在多个位置;计算线包含模型计算与算子实现,执行线包含运行时、内存和通信。

资料与核查范围

原理依据以原始论文和官方文档为主;算例与时间线是教学推导。文档核查日期:2026-10-10。引用 main / latest 文档时,实际接口以安装版本为准。

代码为接入片段或教学伪代码;本页没有声称完成 NVIDIA / 昇腾硬件实测。

← 返回总表中的 M025继续阅读:通信分桶、预取与计算重叠 →
AI Infra 知识库 · 总览 → 独立讲解网站更新 2026-10-08
搜索知识库

搜索方法与基础概念 · Esc 关闭