超节点账:容量、吞吐与同步代价
单卡显存放不下、单卡带宽喂不饱,行业给出的答案是超节点——用机内高速互连把 8~64 张卡包装成一个"大 GPU"抽象。但包装是有代价的:容量线性加,带宽受拓扑限制,同步代价随规模增长。本文把超节点的三本账算清:聚合容量、聚合吞吐、同步代价。方法框架参考开源书稿《深入理解 AI Infra》(Apache-2.0),公式与算例为本站自行推导整理,可复算。
1. 为什么需要超节点
两个原因为什么"卡越多越好但单卡不够用":
- 显存墙:700B 模型 FP16 权重 1.4 TB,单卡 80G 放不下——需要 N 卡分摊;
- 带宽墙:decode 每 token 读全量权重(见 加速器算力账),单卡带宽决定了单卡吞吐上限。
超节点的本质:把 N 张卡的容量相加,同时把卡间互连带宽当作"新的内存带宽"。设计问题变成:互连要多快,同步代价才不至于吃掉并行收益?
2. 容量账:线性相加,但要扣内存墙
容量与算力随卡数线性增长——但"可交付"的容量要扣掉三笔:
| 扣减项 | 说明 |
|---|---|
| 并行切分冗余 | TP/PP 每卡都要保留一部分重叠状态,聚合显存利用率 70-90% |
| KV/激活驻留 | 推理超节点里 KV 也要摊到各卡,占用不可用于权重的显存 |
| 通信缓冲区 | NCCL 等集合通信要预留缓冲,规模越大占比越高 |
判断:规划超节点规模时按"聚合显存 × 0.8"做可用容量,别按 N×VRAM 拍脑袋。
3. 吞吐账:机内互连才是超节点的灵魂
超节点与"一堆服务器"的区别,全在机内互连带宽。数量级对比(单向,近似):
| 互连 | 带宽 | 相对 200G IB |
|---|---|---|
| NVLink 3(H 系列) | ~900 GB/s | ~36× |
| NVLink 4(新一代) | ~1800 GB/s | ~72× |
| PCIe Gen4×16(L40S 机内) | ~32 GB/s | ~1.3× |
| 200G HDR IB(机间) | ~25 GB/s | 1× |
| 400G NDR IB(机间) | ~50 GB/s | 2× |
这就是超节点的核心账:把通信从"机间 IB 25GB/s"搬到"机内 900GB/s",同一笔梯度同步快 36 倍。反过来看 L40S:机内 PCIe 只有 32GB/s,和机间 IB 几乎一个数量级——L40S 的"超节点"体验约等于没有超节点(见 L40S 无 NVLink),训练规模一大就必须靠机间拓扑补。
4. 同步代价账:通信时间 vs 计算时间
训练中每步的集合通信时间(ring 模型,见 通信账):
超节点规模的选择标准:同步占比 < 30%。两个推论:
- 超节点越大,单步梯度 Msg 固定、busbw 越接近 2×BW——机内互连的 busbw 优势是超节点能撑大的前提;
- 超节点内适合放通信频繁的并行(TP/PP 每层都同步),超节点间放通信稀疏的并行(DP 每步一次)——这就是"TP 在超节点内、DP 跨超节点"的标准架构。
5. 可复算 Python 函数
python
def supernode_sync(msg_gb, bw_gbps, n, compute_s):
"""超节点内 ring 同步时间与占比;bw 传机内互连聚合带宽(Gbps)"""
busbw = bw_gbps * (2 * (n - 1) / n) / 8 # GB/s
t_sync = 2 * (n - 1) / n * msg_gb / busbw
ratio = t_sync / (compute_s + t_sync)
return t_sync, ratio
supernode_sync(msg_gb=140, bw_gbps=7200, n=8, compute_s=5) # NVLink 聚合 ~7.2Tbps
# (0.155 s, 3.0%) → 机内同步占比 3%,可忽略
supernode_sync(msg_gb=140, bw_gbps=256, n=8, compute_s=5) # PCIe 聚合 ~256Gbps
# (4.38 s, 46.7%) → 占比 47%,通信吃掉一半时间,扩展效率崩6. 交付清单
- 先定超节点"够不够":聚合显存 × 0.8 ≥ 模型+KV,否则扩大规模或换并行;
- 看机内互连数量级:机内带宽 ≤ 机间带宽 × 2 时,"超节点"名不副实,直接按普通节点设计拓扑;
- 同步占比 <30% 才扩超节点规模,否则先优化互连或改并行策略;
- 并行放置:TP/PP 放超节点内、DP 跨超节点,别混放;
- 实测每步通信时间与模型对比(见 验收基线)。
本文为本站自行推导整理,方法框架参考开源书稿《深入理解 AI Infra》(Apache-2.0);具体版本号与实测数据以现场为准。