适用读者:要做多机训练/推理的通信预算、要解释"为什么加了服务器没变快"的人。
前置:S23-J19(集合通信与超节点)。
覆盖旧文:A-4340 §7.1–§7.3(从超节点走向集群 + 跨节点流量与物理路径 + 远程访问路径与并发,441 点)→ 441 点。
扩展点:E-S23-067(跨机诱因是容量不是算力:8B 训练状态 128 GB、284B 约 4.5 TB)、E-S23-068(割集带宽:50 → 400 GB/s 让 7.6 ms 变 1.3 ms)、E-S23-069(交错环把跨机流量放大 8 倍,时间不变)、E-S23-070(分层归约的门限:本地带宽 ≥ 网卡带宽;PCIe 反例 64 GB/s)。
上一篇:S23-J19 · 集合通信、超节点组织与内存池
下一篇:S23-J21 · 数据交接、拥塞与任务完成。
1. 一句话结论
跨机的瓶颈不是"总带宽",是"割集带宽"。 16 卡、192 MiB 梯度、3 ms 预算:连续环 30 轮每轮都要等一条 12 MiB 的跨机边(50 GB/s),7.6 ms 直接爆预算;分层归约把跨机压成 2 轮、8 张网卡并行(400 GB/s),1.3 ms。
出处:AI Infra 教材 §7.1–§7.3(
id 4340),16 个 rank、NVLink 450 GB/s/方向、NIC 50 GB/s/方向、每轮启动 0.83 μs。
T_comm = Σ_r ( α + max_e V_{r,e}/B_e )
一轮之内:由最慢的那条边决定;轮与轮:依次相加
2. 为什么要跨机:容量先到墙(E-S23-067)
| 对象 | 占用 | 结论 |
|---|---|---|
| 8B 训练(Adam 混合精度,16 B/参数) | 128 GB | 单卡 80 GB 放不下;2 卡 160 GB 只剩 32 GB 给激活 |
| 284B 训练(同表示) | 约 4.5 TB | 必须分散到更多卡 |
| DeepSeek V4-Pro(1.6T,0.5 B/参数) | 约 800 GB | 单台 640 GB(8×80)→ 至少 2 台 |
| Kimi K3(2.8T,0.5 B/参数) | 约 1.4 TB | → 至少 3 台 |
判据:MoE 只减少"这次前向算多少",不减少"权重存多少"。 未选中的专家照样占显存——这是跨机需求最常被低估的一项。
2.1 本算例的网络参数(可直接替换成你自己的实测值)
16 个 rank(A: 0–7,B: 8–15)
机内:NVLink 900 GB/s 双向 = 每方向 450 GB/s
跨机:每卡一张 400 Gbit/s NIC = 50 GB/s/方向,独立 PCIe,不与其他卡共用
同号网卡接同一交换机 → 一条 rail
每轮启动 α = 0.83 μs(nccl-tests 实测:16 B–128 B 的 AllReduce 约 25 μs,除以 30 轮)
梯度张量:192 MiB;通信预算:3 ms(训练步 20 ms,梯度 17 ms 就绪)
判据:"跨超节点边界"本身不改变要传多少字节。 算法、放置、精度决定字节数;路径决定这些字节走哪个出口、等多久。只知道是 IB 还是 RoCE,推不出有效带宽、延迟、超售比和在途窗口。
3. 同一份梯度的三种走法(E-S23-068)
逻辑发送总量都是 5,760 MiB,区别只在"多少走网卡":
| 方案 | 跨机流量 | 跨机轮次 | 每轮谁在等 | 总时间 |
|---|---|---|---|---|
| 连续环(0-1-2-…-15) | 720 MiB | 30 | 一条 12 MiB 跨机边 | 7.6 ms |
| 交错环(A/B 交替) | 5,760 MiB(8×) | 30 | 16 条边各走网卡 | 7.6 ms |
| 分层归约 | 384 MiB(−47%) | 2 | 8 张网卡并行各 12 MiB | 1.3 ms |
3.1 逐项算(分层归约)
本地 ReduceScatter + AllGather:14 轮 × 24 MiB / 450 GB/s = 0.78 ms
跨机交换:2 轮 × 12 MiB / 50 GB/s = 0.50 ms
启动:16 轮 × 0.83 μs ≈ 0.013 ms
合计 ≈ 1.30 ms
判据:交错环让所有网卡都忙起来,却把跨机流量放大 8 倍,时间一点没省。 时间是"最慢边的和",不是"总字节数"。
3.2 为什么分层能省 83%
| 项 | 连续环 | 分层归约 |
|---|---|---|
| 割集有效带宽 | 50 GB/s(一条 rail) | 400 GB/s(8 张网卡并行) |
| 跨机轮次 | 30 | 2 |
| 机内是否吃满 | 其余 14 条边 0.03 ms 就等 | 本地 14 轮用满 NVLink |
4. 分层不是免费的:两个门限(E-S23-070)
4.1 NVLink 服务器(本算例)
令 336 MiB/B_L + 0.5 ms = 7.6 ms → B_L ≈ 50 GB/s
判据:只要本地互联不慢于一张网卡(50 GB/s),分层归约就更快。 NVLink 450 GB/s 远高于门限,所以"没有代价"。
4.2 PCIe 反例(4×A100 PCIe + 双端口 CX-7)
本地:PCIe Gen4 x16 点对点 32 GB/s/方向
网卡:两个 200 Gbit/s 端口各 25 GB/s,共用同一 x16 插槽 → 也是 32 GB/s
| 方案 | 时间 |
|---|---|
| 连续环(14 轮,每轮 32 GB/s) | 11.0 ms |
| 分层归约 | 15.7 ms ❌ |
门限:B_L ≈ 64 GB/s(约网卡插槽带宽的 2 倍)
四卡若每边都有 300 GB/s 的桥接,分层才降到约 7.3 ms(< 11.0 ms)
判据:共享接口是反例的根因。 分层把远端字节集中到 2 轮,全部挤同一个 32 GB/s 插槽;本地省下的读取又被更长的远端轮次抵消。
5. 远程访问路径与并发(§7.3)
一次跨机数据要依次经过:GPU 内存 → 加速器接口 → 网卡 → 交换网络 → 接收方内存。不同数据块可以在各段上重叠,形成流水;持续发送时,最慢的一段决定吞吐。
| 机制 | 作用 | 代价/边界 |
|---|---|---|
| 完成通知 | 接收方知道数据可用,才能开始算 | 需要事件/轮询,占控制路径 |
| 加速器直接发起通信(RDMA 类) | 省掉 CPU 中转与额外拷贝 | 需注册内存、地址交换 |
| 内存语义(Load/Store vs Read/Write) | 一侧用线程语义、一侧用消息语义 | 两套语义混用要显式同步 |
| 并发与吞吐模型 | 在途请求数 × 单请求字节决定有效带宽 | 并发不足 → 带宽用不满 |
判据:"网卡 50 GB/s"是上限,实际能到多少取决于在途数据量。 消息太小、并发太少,有效带宽会远低于线速——与 J14 的 α + V/R 是同一个道理,只是 α 变成跨机延迟。
6. 可复算(实测)
$ cd /root/博客运营官/blog-v2 && python3 tools/s23_book_calc.py | tail -7
跨机梯度 AllReduce(16 rank、192 MiB、α=0.83 μs)
连续环: 30 轮 × 12 MiB/50 GB/s = 7.60 ms(预算 3 ms,超)
交错环: 同 7.60 ms,跨机流量 5760 MiB(8×)
分层归约: 14×24 MiB/450 + 2×12 MiB/50 + 16α = 1.30 ms
跨机流量: 720 / 5760 / 384 MiB → 分层 -47%,时间 -83%
门限 B_L ≥ 50 GB/s(NVLink 450 ✅)
PCIe 反例: 连续环 11.0 ms vs 分层 15.7 ms(门限约 64 GB/s,需 2× 插槽带宽)
7. 前提与边界
| 结论 | 成立条件 | 不成立时 |
|---|---|---|
| 割集决定时间 | 每轮等最慢边、等轮同步 | 允许乱序重叠 → 更接近 max |
| 分层省 83% | 8 张网卡并行、本地带宽 ≥ 网卡 | PCIe 共享插槽 → 反而更慢 |
| 交错环无收益 | 同一条 rail、无多轨调度 | 多轨全互联 → 另算 |
| 3 ms 预算 | 梯度 17 ms 就绪、步 20 ms | 步更短 → 预算更紧 |
8. 常见误区
| 误区 | 纠正 |
|---|---|
| "跨机就看网卡总带宽" | 看割集:一条 rail 只有 50 GB/s |
| "所有网卡都用上就更快" | 交错环 8× 流量、时间不变 |
| "分层归约总是更优" | PCIe 反例:15.7 vs 11.0 ms |
| "MoE 让模型变小了" | 权重照存,只是少算 |
| "知道 IB/RoCE 就能估时间" | 还需超售比、在途窗口、故障恢复 |
9. 自测
- 8B 模型 Adam 混合精度训练,参数状态多少字节/参数、共多少 GB?
- 16 rank、192 MiB 梯度,连续环为什么是 30 轮?每轮跨机多久?
- 分层归约三项时间各是多少?合计?
- 为什么 PCIe 服务器上分层归约反而更慢?
答案
- 16 B/参数 → 128 GB。
2(n−1) = 30轮;每轮 12 MiB / 50 GB/s = 0.25 ms。0.78 + 0.50 + 0.013 ≈ 1.30 ms。- 跨机 2 轮的流量全部挤同一个 32 GB/s 的 x16 插槽,本地省下的时间补不回来。
10. 下一篇
S23-J21 · 数据交接、拥塞与任务完成 —— 分片生成与缓冲区复用、事务层与传输层分离、请求槽位与背压,以及共享网络里的拥塞与尾延迟。