节点内互连:NVLink、NVSwitch 与 PCIe
单机八卡是一台机器,还是八台机器共享一个机箱?答案取决于互连。张量并行能不能放、梯度同步有多快、NCCL 怎么选路径——全由节点内互连决定。 本章讲清楚三种互连的带宽差距,以及"八卡一个单位"的物理原因。
三种互连,一个数量级的差距
Section titled “三种互连,一个数量级的差距”以一台 HGX H100 八卡机为例,任意两卡之间的可用带宽:
| 互连 | 单向带宽(卡间) | 拓扑 | 用途 |
|---|---|---|---|
| NVLink4(点对点) | 450 GB/s | 全互联(18 条链路/卡) | 张量并行、NCCL 首选 |
| NVSwitch(任意两卡) | 450 GB/s | 交换式全互联 | 同上,且免协商 |
| PCIe 5.0 x16 | 64 GB/s | 经 CPU/PCIe 交换机 | 兜底、跨 NUMA 慢路径 |
NVLink 与 PCIe 差约 7 倍——这个差距决定了什么并行能放在节点内:
- 张量并行(每层通信量 GB 级、延迟敏感):必须在 NVLink 域内,跨 PCIe 或跨机会慢到不可用
- 数据并行梯度同步(每 step 一次,量 = 梯度大小):NVLink 上几乎免费,PCIe 上可感知
- 流水线并行(只传边界激活):PCIe 都能接受
NVLink 与 NVSwitch:交换式全互联
Section titled “NVLink 与 NVSwitch:交换式全互联”NVLink 是卡间的直连高速总线。但八卡两两直连需要 28 条链路,成本爆炸——所以 Hopper 时代引入 NVSwitch:每卡只需连到交换芯片,由 NVSwitch 转发,实现任意两卡 450 GB/s 全互联。
GPU0 ── NVSwitch1 ── GPU4GPU1 ── NVSwitch1 ── GPU5 HGX H100:GPU2 ── NVSwitch2 ── GPU6 4 个 NVSwitch 芯片GPU3 ── NVSwitch2 ── GPU7 每卡 18 条 NVLink4 链路 (全部两两 450 GB/s) 任意两卡 450 GB/sBlackwell 再进一步:NVLink5 单卡 1.8 TB/s,且 GB200 NVL72 把 NVLink 域从 8 卡扩到 72 卡——张量并行的可用范围从"节点内"扩大到"机架内"。这是 Blackwell 最被低估的架构变化:它改变了并行策略的选择空间(大模型的 TP 可以放宽到 72 卡)。
NVSwitch 还集成了 SHARP(在网计算):all-reduce 的规约操作在交换芯片里完成,数据不用在每个卡上走一遍。NCCL 的 NVLS 算法直接利用它,把 all-reduce 的带宽需求进一步降低(见 NCCL 算法)。
PCIe:兜底路径与它的坑
Section titled “PCIe:兜底路径与它的坑”PCIe 是每台机器都有的兜底。三个真实的坑:
一、拓扑不是均匀的。 典型双路服务器:每颗 CPU 挂 4 张卡,跨 CPU 的两卡通信要过 UPI(~80 GB/s),比同 CPU 下慢且抖。不看拓扑直接开 P2P,性能可能差 2–3 倍。
二、IOMMU/虚拟化开销。 开启 IOMMU 或在虚拟机里,P2P DMA 可能被强制走 IO TLB 中转,带宽掉一个数量级。裸金属跑训练的理由之一。
三、PCIe 是共享总线。 4 张卡共享一条 PCIe 交换机上游链路时,同时通信会互相挤压——NCCL 会自动感知拓扑选树形算法,但自定义通信代码经常踩这个坑。
实用建议:拿到新机器先跑 nvidia-smi topo -m,看清楚哪两卡之间是 NVLink、哪两卡要过 CPU。这个输出决定了你所有并行策略的边界。
为什么八卡是一个单位
Section titled “为什么八卡是一个单位”把"张量并行的通信代价"算一遍就明白。TP 的每层通信是两次 all-reduce(或 all-gather + reduce-scatter),通信量约 激活大小。以 7B 模型、batch 8、seqlen 4096、TP=8 为例,每层 all-reduce 约 100+ MB,一层前向 < 1 ms 的计算时间:
| 通信域 | 一次 all-reduce 延迟 | 每层占比 | 结论 |
|---|---|---|---|
| NVLink(450 GB/s) | ~0.5 ms | <50%,可接受 | ✅ TP=8 成立 |
| PCIe(64 GB/s) | ~3 ms | 计算 5 倍 | ❌ 不可用 |
| 跨机 IB(400 Gbps) | ~20 ms + 抖动 | 计算 30 倍 | ❌ 完全不可用 |
张量并行的可行域 = NVLink 域。 这就是"八卡一个单位"的物理原因:通信量与延迟的要求恰好卡在 NVLink 的能力边界上。跨机后剩下的选择是数据并行、流水线并行、序列并行——它们通信量小或可隐藏(见混合并行)。
反过来,TP=16、TP=32 的需求推动了 NVLink 域的扩张:NVL72 本质上是在回答"张量并行的边界能不能从 8 推到 72"。
组网实践清单
Section titled “组网实践清单”nvidia-smi topo -m确认 NVLink 域与 NUMA 结构。nvidia-smi nvlink -s逐卡确认链路 up 且速率正常(坏一根链路,all-reduce 掉一半)。- NCCL 调试:
NCCL_DEBUG=INFO看 selected algorithm,确认大消息走 Ring/NVLS 而不是落在 PCIe 树上。 - 跨 NUMA 的梯度同步:绑定进程到卡的 NUMA 节点(
numactl),否则 CPU 侧聚合带宽减半。 - 基准测试用
nccl-tests的all_reduce_perf,对比实测带宽与理论值(NVLink 域内应达 70%+)。
- NVLink 450 GB/s 与 PCIe 64 GB/s 差 7 倍,这个差距决定并行策略的可行域。
- NVSwitch 实现任意两卡全互联 + SHARP 在网规约;Blackwell 把 NVLink 域从 8 卡扩到 72 卡。
- PCIe 的坑:NUMA 拓扑不均、IOMMU 中转、共享总线挤压——先看
nvidia-smi topo -m。 - 张量并行的通信代价(每层 GB 级、延迟敏感)恰好卡在 NVLink 能力边界内,所以"八卡一个单位"。
- 跨机之后只能用通信量小的并行方式:DP/PP/SP/EP。
- 功耗、散热与机房约束 — 下一章:节点的另一面约束
- NCCL 与集合通信算法 — 硬件之上:算法怎么选路径
- 张量并行 — 通信代价的完整推导
- 混合并行与配置方法论 — 把并行放到正确的域里