跳转到内容

节点内互连:NVLink、NVSwitch 与 PCIe

单机八卡是一台机器,还是八台机器共享一个机箱?答案取决于互连。张量并行能不能放、梯度同步有多快、NCCL 怎么选路径——全由节点内互连决定。 本章讲清楚三种互连的带宽差距,以及"八卡一个单位"的物理原因。

以一台 HGX H100 八卡机为例,任意两卡之间的可用带宽:

互连单向带宽(卡间)拓扑用途
NVLink4(点对点)450 GB/s全互联(18 条链路/卡)张量并行、NCCL 首选
NVSwitch(任意两卡)450 GB/s交换式全互联同上,且免协商
PCIe 5.0 x1664 GB/s经 CPU/PCIe 交换机兜底、跨 NUMA 慢路径

NVLink 与 PCIe 差约 7 倍——这个差距决定了什么并行能放在节点内:

  • 张量并行(每层通信量 GB 级、延迟敏感):必须在 NVLink 域内,跨 PCIe 或跨机会慢到不可用
  • 数据并行梯度同步(每 step 一次,量 = 梯度大小):NVLink 上几乎免费,PCIe 上可感知
  • 流水线并行(只传边界激活):PCIe 都能接受

NVLink 是卡间的直连高速总线。但八卡两两直连需要 28 条链路,成本爆炸——所以 Hopper 时代引入 NVSwitch:每卡只需连到交换芯片,由 NVSwitch 转发,实现任意两卡 450 GB/s 全互联。

GPU0 ── NVSwitch1 ── GPU4
GPU1 ── NVSwitch1 ── GPU5 HGX H100:
GPU2 ── NVSwitch2 ── GPU6 4 个 NVSwitch 芯片
GPU3 ── NVSwitch2 ── GPU7 每卡 18 条 NVLink4 链路
(全部两两 450 GB/s) 任意两卡 450 GB/s

Blackwell 再进一步:NVLink5 单卡 1.8 TB/s,且 GB200 NVL72 把 NVLink 域从 8 卡扩到 72 卡——张量并行的可用范围从"节点内"扩大到"机架内"。这是 Blackwell 最被低估的架构变化:它改变了并行策略的选择空间(大模型的 TP 可以放宽到 72 卡)。

NVSwitch 还集成了 SHARP(在网计算):all-reduce 的规约操作在交换芯片里完成,数据不用在每个卡上走一遍。NCCL 的 NVLS 算法直接利用它,把 all-reduce 的带宽需求进一步降低(见 NCCL 算法)。

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。这个输出决定了你所有并行策略的边界。

把"张量并行的通信代价"算一遍就明白。TP 的每层通信是两次 all-reduce(或 all-gather + reduce-scatter),通信量约 2×2 \times 激活大小。以 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"。

  1. nvidia-smi topo -m 确认 NVLink 域与 NUMA 结构。
  2. nvidia-smi nvlink -s 逐卡确认链路 up 且速率正常(坏一根链路,all-reduce 掉一半)。
  3. NCCL 调试:NCCL_DEBUG=INFO 看 selected algorithm,确认大消息走 Ring/NVLS 而不是落在 PCIe 树上。
  4. 跨 NUMA 的梯度同步:绑定进程到卡的 NUMA 节点(numactl),否则 CPU 侧聚合带宽减半。
  5. 基准测试用 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。