资讯动态

推理 INFRA 方法论(1):通信模型:从集合原语到跨机拓扑

发布时间:2026/11/6 6:36:38 来源:尧图企业网站定制
博客Johney Zheng 的博客 · 全部文章索引 · 本文原文把集合通信拆成步数、启动时延和每卡字节数再结合 NVLink、RDMA、NUMA 与 PCIe 拓扑解释实测差异。常见通信算法类别原语 / 算法语义或机制每卡字节步数备注多对多★ ReduceScatter各卡拿到 1/P 的规约结果(P−1)/P·S ✓下界P−1ring每卡各发P 张网卡并行★ AllGather各卡拿到全量拼接(P−1)/P·S ✓下界P−1ring ReduceScatter 的逆向★ AllReduce各卡拿到全量规约2(P−1)/P·S ✓下界2(P−1)ring RS AG见下方变体★ AllToAll每卡给每卡发不同数据分块转置(P−1)/P·S ✓下界1全对并发字节由语义锁死省不掉单端点Broadcastroot 发给所有卡内容相同root 出 (P−1)·S朴素 每卡收 Slog₂P树朴素实现 root 出口瓶颈Scatterroot 切片发给各卡内容不同root 出 (P−1)/P·S 每卡收 S/P1字节数同 RS但全压一张网卡Gather各卡数据汇到 root 拼接root 入 (P−1)/P·S 每卡发 S/P1incastP−1 卡同时打 rootReduce各卡数据汇到 root 规约每卡发 ≈Slog₂P树规约计算集中在 rootAllReduce 的变体:Ring:2(P−1) 步,每步与固定邻居交换 S/P。字节最优;每卡恒 2 条连接、规约摊在每步的小块上 → 最易与计算 overlap、最易切流水。短板只有一个:步数 O§,小消息 α 累积(P8 时 14 个 α)。Halving-Doubling:2·log₂P 步,字节与 ring 相同。机制是配对距离每步翻倍、交换量每步减半(S/2→S/4→S/8,再原路返回)——用更大的块补上省掉的步,各卡之间完全均衡。要求 P 为 2 的幂,否则补步后常输给 ring。two-shot:2 步(每卡拉取自己负责的 1/P 切片规约 → 广播回去),字节仍是下界。这是不传冗余下的步数极限——规约结果没算出来之前无法扩散。代价:每卡 P−1 条连接(资源 O(P²))、规约计算集中在一步、依赖 NVLS/multimem 类硬件多播才真正高效。one-shot:1 步,每卡把完整 S 发给所有对端、各自本地全量规约需要更多计算资源。突破 2 步的唯一方式是传冗余:字节 (P−1)·S,是下界的 P/2 倍。适用域 小消息 且 小 P(交叉点 S* α·BW/(P−1−下界系数),8 卡机内约 130 KB)。公开拓扑示例8 卡 / 4 NIC 的 NUMA 与 PCIe 关系8 卡 4×400G NICNUMA / PCIe switch 架构示意以下根据 SGLang #5186 公布的 8×H20 实机拓扑重绘用于说明拓扑距离GPU0–3、NIC0–1 属于 NUMA0GPU4–7、NIC2–3 属于 NUMA1。图中的设备编号和 PIX 配对沿用公开示例。NIC0–3 对应mlx5_bond_0至mlx5_bond_3图中 400G 沿用本文的聚合口径2×200G。下图突出 NUMA 归属和共享 PCIe switch 的关系虚线表示拓扑距离省略 Host Bridge 内部层级和 GPU 间 NVLink 互联。完整 GPU–NIC 距离如下与上述公开实机矩阵一致GPUNUMANIC0NIC1NIC2NIC3GPU00NODENODESYSSYSGPU10PIXNODESYSSYSGPU20NODENODESYSSYSGPU30NODEPIXSYSSYSGPU41SYSSYSPIXNODEGPU51SYSSYSNODENODEGPU61SYSSYSNODEPIXGPU71SYSSYSNODENODE以NIC0为参照三类路径的区别是PIXGPU1 → 共享 PCIe switch → NIC0。NODEGPU0 → Host Bridge A → 同 NUMA 内的桥间互连 → Host Bridge B → NIC0 所在分支。关键是跨 Host Bridge不能仅凭“不同 switch”判断为 NODE。SYSGPU4 所在 PCIe 分支 → 跨 NUMA 的系统互连 → NIC0 所在 PCIe 分支。定义参考 NVIDIA 的 topo 说明。经过 CPU 侧 I/O 互连不等于必须由 CPU memcpy 或通过 host 内存中转。图中四个 switch 节点表示四组 PIX 共享关系不用于统计整机全部 PCIe switch下表给出本文的实测性能对比。协议源/目的 GPU 与 NIC0 的关系16 KB 块256 KB 块RDMAGPU1同 PCIe switchPIX41.9 GB/s48.9 GB/s打满单网卡RDMAGPU0同 NUMA不同 switchNODE46.0 GB/s48.9 GB/sRDMAGPU4跨 NUMASYS23.9 GB/s24.0 GB/s减半TCPGPU10.39 GB/s1.65 GB/s通信时延建模T步数 × α 每卡字节 / busBW参数GPU 侧建模参数与实测参考910B机内 busBWNVLink ~350-400 GB/s 有效(实测 AllReduce 128 MB busBW 336 GB/s,P2P 拷贝 395 GB/s)HCCS 56×7 392 GB/s (full-mesh)跨机 busBW/卡20 GB/s (4×400G NIC,2 卡共享 1 卡;实测裸 RDMA 绑 NUMA 后 24.5,NCCL 8 对跨机 P2P 15.1)25 GB/s (200G RoCE,1:1)机内 α~2 μs(单次 NVLink 写;一次完整集合通信实测下限 ~10 μs 自定义 kernel / ~20 μs NCCL)~2 μs跨机 α~15 μs(实测 RDMA verbs 单向 9 μs;NCCL 跨机 64 KB AllReduce 74 μs)~20 μs对All-Reduce下不同算法时延如下对于跨机场景因为机内带宽高于机间带宽所以通信方案为机内先 ReduceScatter:每台机内部把数据规约并切成 P_机内 份,每卡只留自己负责的那 1/P 切片——数据在进贵通道之前先瘦身。跨机只对切片做 AllReduce:各机的同号卡两两配对各自通信域做reduce_scatterall_gather,只交换这 1/P 切片——全程唯一过网的字节,是 flat 算法的约 1/P_机内。机内再 AllGather:把各卡凑齐的完整切片在机内广播回去,每卡集齐全量结果——机内字节多但机内带宽高得多。SRing 机内HD 机内two-shot 机内one-shot 机内Ring 跨机HD 跨机two-shot 跨机one-shot 跨机分层 跨机64 KB28.312.34.33.3213933331~401 MB33179222971781183656316 MB10892843221610149014305615480128 MB6686526442562114001129011210448152100上表是模型值。实测(μs;机内 8 卡,CUDA Graph 内连放取平均;跨机 2×8 卡,NCCL GDR):SNCCL 机内two-shot 机内(symm-mem)one-shot 机内(symm-mem)NCCL 跨机(分层)64 KB23.210.510.6741 MB29.013.934.112816 MB117106395421128 MB700(nccl-tests)~790(64 MB 时 395)—2068三条结论:小消息(≲1 MB)拼步数:α 累积支配(ring 14 步 28 μs,1 MB 传输仅 5 μs)。two-shot 2 步是无冗余下界;one-shot 1 步再快一档但只到 ≈130 KB。典型负载:TP 每层 AllReduce ~56 KB,一步 decode 上百次,正是这一档。实测排序成立(自定义 kernel 约为 NCCL 的一半),但绝对值高 2.5–3 倍:flag 同步和屏障让下限在 ~10 μs;one-shot 与 two-shot 在 64 KB 以下就打平,256 KB 起 two-shot 明显更快大消息没得拼:Ring/HD/two-shot 字节相同 → 时间收敛(实测差 10%)——交换式拓扑上瓶颈是每卡出口(没法并发)而非链路条。选型看图外成本:要 overlap / P 大 / 拓扑异构 → ring更有优势;支持 NVLS 时可评估 two-shot 类算法遇到 NVLS 初始化失败时应先确认硬件与软件支持情况再评估NCCL_NVLS_ENABLE0的回退路径。注意 910B 的 HCCS 是点对点 full-mesh 而不是交换式,ring 只用 7 条链路中的 1 条,大消息也会慢 7×。跨机拼字节:出口 ÷17.5、α ×7.5 → 跨机唯一有效的优化是砍机间通信量——分层把机间通信量压到 1/P_机内,机内多搬的部分因带宽差 17.5 倍近乎免费。跨机传输必须走 RDMA,TCP 只适合控制面。双机实测对比:项RDMA(RoCE,GPUDirect)TCP(容器网络 eth0,200 Gb/s)带宽单网卡 392 Gb/s;4 张按 NUMA 绑定 196 GB/s/节点(不绑 74%)iperf3 32 流 16.4 GB/s/节点,16 流吃掉 3 个以上 CPU 核小消息单向延迟9 μs56 μsNCCL 跨机(2×8 卡)AllReduce 128 MB 2.07 ms;8 对 P2P 15.1 GB/s/卡慢 12–28×(需NCCL_NET_PLUGINnone NCCL_NETSocket才真正走 TCP,NCCL_IB_DISABLE被外部插件忽略)亲和跨 NUMA 配对 GPU→网卡带宽减半(49→24 GB/s);关掉 GDR 后 P2P 15.1→7.3 GB/s—对于ALL2ALL来说同样有不同算法① 直发每卡把 3 个块同时发给各自目的地一步到位。步数和字节双最优短板是 P−1 条消息同时打到一张网卡跨机时容易 incast拥塞多打一。② 成对交换第 t 轮只和卡 i⊕t 换一块共 P−1 轮。字节仍在下界、任一时刻只有 1 条在途所以不会 incast代价是串行慢α 累加 P−1 次。③ Bruck块按二进制距离绕路中途搭别人的车、被邻卡代转log₂P 步走完步数最少但多出的中转块是过网字节还要末尾本地重排只在极小消息 × 超大 P 才划算。④ 分层两级先在机内把块按 rail 归堆走 NVLink再同 rail 卡跨机发一条大包大包落地后由 NVLink 拆分转发到各目的卡。跨机通信次数 P机内²→P机内8 卡机64 条 → 8 条、过网字节一字不变代价是多搬机内字节这笔开销不随消息变大而摊薄所以大消息≥16 MB反而不如直发。S直发 机内pairwise 机内Bruck 机内直发 跨机pairwise 跨机分层 跨机64 KB2.216.26.36268171 MB4.518.510.386924416 MB425675477484484128 MB322336555339734033764实测 NCCL AllToAll(μs):机内 8 卡 64 KB 9.5、1 MB 14.8、16 MB 72、64 MB 216(busBW 272 GB/s);跨机 2×8 卡 1 MB 173、16 MB 733、128 MB 4409。比模型值慢 1.3–4 倍,按 α≈10 μs(机内)、BW≈280 GB/s 重算更接近。系列导航章节文章编排日期0Roofline用算力与带宽建立性能预算2026-01-011通信模型从集合原语到跨机拓扑本篇2026-02-132分布式推理TP、DP、EP、CP 与 PP 的取舍2026-03-293推理硬件GPU、NPU 与存储层级2026-05-114Attention 演变从 GQA、MLA 到混合状态2026-06-245MoE 推理Batch、DeepEP、DeepGEMM 与负载均衡2026-08-066PD 与 EPD阶段分离、状态传输与资源配比2026-09-197核心优化CUDA Graph、投机推理、Overlap 与量化2026-11-01上一篇Roofline用算力与带宽建立性能预算 · 下一篇分布式推理TP、DP、EP、CP 与 PP 的取舍

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑