2296 字
约 7 分钟
7
S23-J19 · 集合通信、超节点组织与内存池

适用读者:要评估"多机扩展划不划算"、要读懂 NCCL 测试结果、要设计超节点拓扑的人。
前置:S23-J18(六种并行与切分维度)。
覆盖旧文:A-4339 §6.4–§6.7(集合通信 + 超节点物理组织 + 内存池 + 规模选择,472 点)→ 472 点。
扩展点:E-S23-063(集合通信时间模型:2(n−1)α + 2(n−1)M/(nB),启动主导)、E-S23-064(TP16 跨机 6.67 ms 反而比 TP8 的 5.15 ms 慢)、E-S23-065(交换机基数与收敛比:32/32 → 800 GB/s,48/16 → 400 GB/s)、E-S23-066(内存池借用不增加物理内存)。
上一篇:S23-J18 · 从单卡到并行:六种并行方式
下一篇:S23-J20 · 跨节点网络与远程访问路径。


1. 一句话结论

并行度的上限由"通信的启动开销"决定,不是带宽。 TP8 一次归约 11.55 μs 里 11.51 μs 是 14 轮的启动,传输只有 0.04 μs——所以带宽翻倍只省 2.5 μs,把每轮启动减半却能省 0.74 ms。

出处:AI Infra 教材 §6.4–§6.7(id 4339),平台 HGX H100、NVLink 每方向 450 GB/s、α = 0.822 μs(MSCCL++ 实测 NVLink 单向延迟)。

T_ring = 2(n−1)·α + 2(n−1)·M/(n·B)
         └─启动项─┘   └────接近 2M/B────┘

2. 切分方式决定通信原语

并行 需要什么通信 数据量
DP(训练) 梯度 AllReduce 全参数梯度
TP 每层输出部分和 AllReduce(或 ReduceScatter + AllGather) m×h(每 token 10 KiB)
PP 相邻阶段交接激活 m×h 每边界
EP All-to-All(token 送到专家所在卡) t_e×h
SP/CP 收集 / 交换 K、V 与序列分片同量

判据:TP 每层两次归约(注意力输出 + FFN 输出),64 层共 128 次。 通信次数是层数量级,不是请求量级。


3. 环形 AllReduce:轮次与字节(E-S23-063)

n 卡、每卡部分和 M 字节,分成 n 块
ReduceScatter:n−1 轮 → 每卡持有一块的完整和
AllGather:   n−1 轮 → 每卡收齐全部
每卡总发送量:2(n−1)M/n
总时间:T = 2(n−1)α + 2(n−1)M/(nB)

跟踪块 0(四卡,贡献 1/10/100/1000):沿途 1 → 11 → 111 → 1111(卡 3 持有完整和)。

3.1 TP 的实测账

M = 10 KiB、B = 450 GB/s、α = 0.822 μs:

TP 本地内存访问 128 次归约 单步时间
1 29.35 ms 0 29.35 ms
2 14.68 ms 0.21 ms 14.89 ms
4 7.34 ms 0.64 ms 7.97 ms
8 3.67 ms 1.48 ms 5.15 ms
TP8 单次归约:14 轮 → 14×0.822 = 11.51 μs 启动 + 17.5 KiB 传输 ≈ 0.04 μs → 11.55 μs

边际收益:2→4 卡净省 6.92 ms;4→8 卡净省只剩 2.83 ms。

判据:优化方向由"哪一项占主导"决定:

手段 效果(TP8、128 次归约)
带宽翻倍 省约 2.5 μs(≈0)
每轮启动减半 省约 0.74 ms

3.2 跨机 TP16 反而更慢(E-S23-064)

两台 HGX H100、16 卡、TP16,一次归约 30 轮过网卡:

方案 本地 每次归约 128 次 单步
TP8(机内) 3.67 ms 11.55 μs 1.48 ms 5.15 ms
TP16(跨机,理论环) 2.48 ms 约 113 μs 14.5 ms 16.9 ms
TP16(实际通信库,nccl-tests 16 KiB 档实测) 2.48 ms 32.74 μs 4.19 ms 6.67 ms
TP16 比 TP8 慢约 1.52 ms:权重读取减半(−1.19 ms),但同步成本从 11.55 → 32.74 μs(×2.8)

判据:跨机并行必须先算"省下的本地时间"是否大于"增加的同步时间"。 这里几乎打平且为负。


4. 超节点拓扑:基数与收敛比(E-S23-065)

一颗交换芯片的端口数 = 基数(radix)
第三代 NVSwitch:64 个 NVLink 4 端口,每端口每方向 25 GB/s
端口分配 下联 GPU 带宽 上联带宽 说明
32 下联 / 32 上联 800 GB/s 800 GB/s 无收敛
48 下联 / 16 上联 1,200 GB/s 400 GB/s 3:1 收敛

DGX H100 的 NVLink Switch System:每节点只引出全部 NVLink 带宽的一半(2:1 收敛)。

判据:端口总数不变时,多接 GPU 就少上联带宽。 收敛比直接决定"跨交换机的集合通信能跑多快"——这是超节点规模的真实上限。


5. 内存池:借用不增加物理内存(E-S23-066)

场景:4 个节点 × 80 GB = 320 GB;任务需求 100 / 60 / 40 / 40 = 240 GB。

总量够(240 < 320),但任务 0 的 100 GB > 单节点 80 GB

做法:把任务 0 的 20 GB 放到节点 1 的空闲区。

节点 借用前 借用后
0 100(超 20) 80
1 60 80(60 自己 + 20 借出)
2 40 40
3 40 40
空闲合计 100 80
工作集仍是 100 GB:80 GB 本地 + 20 GB 远端
借用没增加物理内存,只是让任务用上别处的空闲

判据:内存池解决"分布不均",不解决"总量不足"。 代价是远端访问——那 20 GB 的每次读写都要过互联(J14 的 α + V/R)。

5.1 借用的边界条件

项 要求
谁提供 提供方开放一段区域
谁使用 借用方建立地址映射
权限 系统管理访问权限
生命周期 记录何时可释放/重分配
独占 vs 共享 独占:原持有者等归还;共享:按一致性/同步规则访问

6. 给定模型与硬件,怎么选切分(§6.7)

步骤 判断 不通过就换
1 单卡容量够不够(含 KV p95) 不够 → TP/PP/EP 分散权重
2 TP 卡数 ≤ KV 头数? 超了 → 只增副本(J18)
3 跨机同步成本 vs 本地节省? 不划算 → 留在机内(TP16 案例)
4 交换收敛比够不够? 2:1 以上收敛 → 集合通信排队
5 PP 气泡 b/(q+b−1) 可接受? 否 → 减阶段或加 micro-batch
6 内存池能补多少空闲? 只补不均衡,补不了总量

7. 可复算(实测)

$ cd /root/博客运营官/blog-v2 && python3 tools/s23_book_calc.py | tail -10
环形 AllReduce: T = 2(n−1)α + 2(n−1)M/(nB),α=0.822 μs,B=450 GB/s,M=10 KiB
  TP8: 14 轮 → 启动 11.51 μs + 传输 0.04 μs = 11.55 μs
  TP1: 本地 29.35 ms + 0 ms = 29.35 ms
  TP2: 本地 14.68 ms + 0.21 ms = 14.89 ms
  TP4: 本地 7.34 ms + 128 次归约 0.64 ms = 7.98 ms
  TP8: 本地 3.67 ms + 128 次归约 1.48 ms = 5.15 ms
  TP16 跨机: 2.48 + 128×32.74 μs = 6.67 ms(TP8 为 5.15 ms,慢 1.52 ms)
  理论环跨机(30 轮 × 3.76 μs): 2.48 + 14.4 ms = 16.9 ms
环 4 卡逐轮: 1 → 11 → 111 → 1111(块 0 在卡 3 完成)
端口分配: 32/32 → 上联 800 GB/s;48/16 → 上联 400 GB/s(3:1 收敛)
内存池: 320 GB 总容量 / 240 GB 需求,借 20 GB → 占用 80/80/40/40,空闲剩 80 GB

8. 前提与边界

结论 成立条件 不成立时
环模型 2(n−1)α + … 等轮同步、每卡等带宽 分层算法(树/双环)→ 轮次更少
TP8 最优 KV 头数 ≤ 8、机内 NVLink 跨机 → 用实测 32.74 μs 而非理论环
收敛比决定上限 跨交换机流量占比高 全机内 → 收敛比无影响
内存池补不均衡 远端访问代价可接受 热点数据 → 远端带宽成瓶颈

9. 常见误区

误区 纠正
"带宽翻倍,集合通信就快一倍" TP8 只省 2.5 μs,启动项主导
"卡越多越快" TP16 跨机 6.67 ms > TP8 5.15 ms
用理论环估跨机通信 实际库用分层算法:113 μs → 32.74 μs
"内存池能扩容" 它只是把别处空闲借过来,总量不变
忽略收敛比 48/16 上联只有 400 GB/s,是 3:1 收敛

10. 自测

  1. n=8, M=10 KiB, α=0.822 μs, B=450 GB/s,一次环形 AllReduce 多久?哪项占主导?
  2. 为什么 TP16 的本地时间只从 3.67 降到 2.48 ms?
  3. 64 端口 NVSwitch 按 32/32 与 48/16 分配,上联带宽各多少?
  4. 4×80 GB、需求 100/60/40/40,借 20 GB 后各节点占用与总空闲?
答案
  1. 14×0.822 = 11.51 μs 启动 + 0.04 μs 传输 ≈ 11.55 μs;启动主导。
  2. 权重减半,但只有 8 个 KV 头 → TP16 时每头两份副本,每卡 KV 读取与 TP8 相同。
  3. 800 GB/s(无收敛)与 400 GB/s(3:1 收敛)。
  4. 80/80/40/40;总空闲 320−240 = 80 GB。

11. 下一篇

S23-J20 · 跨节点网络与远程访问路径 —— 进入第 7 章:一次跨机通信经过哪些设备、RDMA 为什么快、拥塞与尾延迟从哪来。

S23-J19 · 集合通信、超节点组织与内存池
https://www.clxhxhhr.top/posts/5546/
作者
clxstart
发布于
2024-12-31
许可协议
CC BY-NC-SA 4.0
评论
0 条
还没有评论,先写一条吧。