NNetpath
原理深入预计 35 分钟

NVLink 与 NVSwitch:机内的 GPU 高速网

GPU 之间走 PCIe 太慢,于是有了另一张网。搞清它的边界在哪,才知道哪些流量会上机间网络。

学完这节你能做到

  • 说出各代 NVLink 的单卡带宽与链路数,并把它和 PCIe、机间网络放在同一把尺子上比
  • 解释 NVSwitch 让 8 卡全带宽互联的原理,以及 NVL72 把域扩到 72 卡意味着什么
  • 用 nvidia-smi 读出 NVLink 状态与吞吐,判断某条链路是否掉了

为什么不能让 GPU 走 PCIe

上一节算过:PCIe Gen5 x16 单向约 63 GB/s。听起来不小,但放到 GPU 之间的通信需求里完全不够看—— 一次张量并行的 all-gather 要在几张卡之间搬几十 GB,PCIe 这个带宽会直接成为墙。

而且还有个结构问题:PCIe 的所有流量都要经过 Root Complex 附近的层级, 8 张卡两两通信时互相抢同一批上游链路。

所以 NVIDIA 干脆给 GPU 之间单独修了一张网,这就是 NVLink。它和 PCIe 是并存关系,不是替代: PCIe 继续负责 CPU ↔ GPU、GPU ↔ 网卡,NVLink 只管 GPU ↔ GPU。

各代规格

代际架构单卡总带宽最大链路数每链路
第 3 代Ampere(A100)600 GB/s1250 GB/s
第 4 代Hopper(H100 / H200)900 GB/s1850 GB/s
第 5 代Blackwell(B200 / GB200)1,800 GB/s18100 GB/s
第 6 代Rubin3,600 GB/s36100 GB/s
!这张表全是双向聚合值,别直接和网卡比

官方规格里 NVLink 一律写双向聚合("900GB/s bidirectional")。而网卡、PCIe 的习惯是 每方向。两把尺子直接比,又是一次 2 倍误差。

换成单向:第 4 代是 450 GB/s、第 5 代 900 GB/s。本节后面的对照表统一用单向。

顺便:第 6 代(Rubin)的数字官方标注为"preliminary specifications, may be subject to change", 做规划时别当承诺值用。

nvidia-smi topo -m 里的 NV18 就是"这两张卡之间有 18 条 NVLink"—— 数字对不上预期(比如 H100 上只显示 NV9)就说明有链路没起来。

NVSwitch:从直连到全互联

只有链路还不够。8 张卡如果两两直连,每对之间只能分到总链路数的一部分:

直连 mesh(无 NVSwitch):
  18 条链路要分给 7 个邻居 → 每个邻居约 2 条 → 两卡之间只有约 100 GB/s

经 NVSwitch:
  18 条链路全部接到交换芯片上
  → 任意两卡之间都能用满 900 GB/s
  → 而且是无阻塞的:所有卡同时全速通信也不掉带宽

这正是 L3 里讲的 Spine-Leaf 思路在机内的翻版:用交换芯片换取任意两点的全带宽

NVLink Switch 代际GPU 域大小单对 GPU 带宽域内总聚合带宽
NVLink 4 Switch8900 GB/s7.2 TB/s
NVLink 5 Switch8 或 721,800 GB/s130 TB/s(NVL72)
NVLink 6 Switch8 或 723,600 GB/s260 TB/s(NVL72)

这是整节最关键的一个概念。NVLink 域之内是一张网,域之外必须走 IB/RoCE。

┌─────────── NVLink 域(HGX 8 卡基板)───────────┐
│  GPU0 ─┐                                      │
│  GPU1 ─┤                                      │
│   ...  ├── NVSwitch ── 任意两卡 900 GB/s       │
│  GPU7 ─┘                                      │
└───────────────────┬───────────────────────────┘
                    │ 每张 GPU 配一张 400G 网卡(PCIe Gen5 x16 直连)
                    ▼
        ┌──────── 机间网络(IB / RoCE)────────┐
        │  leaf → spine → leaf,rail-optimized │
        └──────────────────────────────────────┘

传统 HGX 机型的域边界就是一台机器的 8 张卡。GB200 NVL72 把这个边界推到了 72 张卡(用机柜级的 NVLink Switch tray),意味着原本必须跨网络的通信有一大部分回到了 NVLink 域内。

i这解释了 L3 里那句「NVLink 与网络的分工」

Rail-Optimized 布线账 那节的计算器只算机间网络, 不管机内——现在能说清为什么了:机内通信由 NVLink 承担,压根不经过 leaf 交换机。

所以规划时两笔账要分开:

  • 机内:由服务器型号决定(HGX 8 卡 / NVL72),你选不了,只能选机型
  • 机间:由你的布线决定,就是 L3 那套 rail / leaf / spine 的账

带宽层级全景

把这一节和上一节、以及机间网络放在同一把尺子上(H100 级节点,单卡视角,单向):

层级单向带宽相对倍数
HBM3 显存(读写合计)≈ 3,350 GB/s≈ 53×
NVLink 4(域内 GPU ↔ GPU)450 GB/s≈ 7×
PCIe Gen5 x16(GPU ↔ 网卡 / CPU)63 GB/s≈ 1.3×
机间网络(每 GPU 一张 400G)50 GB/s

这四行是整个 AI 基础设施性能直觉的来源。三个立刻能推出来的结论:

  1. 显存带宽比什么都大一个数量级——所以算子融合、减少显存往返比优化通信更基础
  2. NVLink 比机间网络快约 9 倍——所以通信量最大的并行策略必须留在域内
  3. PCIe 和机间网络几乎同一量级——所以 400G 网卡配 Gen5 x16 是"刚好匹配", 而不是富余(上一节的账在这里闭环)

并行策略如何贴合这个层级

并行方式通信量应该放在哪
张量并行(TP)每层都要 all-reduce,最重NVLink 域内(所以 TP 度数通常 ≤ 8 或 ≤ 域大小)
流水线并行(PP)只在 stage 边界传激活,较轻可以跨机
数据并行(DP)每步一次梯度 all-reduce,可与计算重叠跨机
专家并行(MoE)all-to-all,重且不规则尽量域内,跨机时对网络最苛刻

NVL72 把域从 8 扩到 72,直接的意义就是TP 度数可以开得更大, 或者让 MoE 的 all-to-all 留在域内。这是它的核心卖点,不只是"带宽数字更大"。

NVSwitch 里带了归约引擎,可以把 all-reduce 的一部分计算搬到交换芯片上做:

普通 all-reduce:每张卡都要收全部数据、各自算一遍
SHARP:交换机边转发边归约,卡只收最终结果

收益是减少了实际搬运的数据量和参与轮数。IB 侧也有对应的 SHARP(在交换机里做归约), 思路完全一样——把集合通信的一部分从端侧卸载到网络里。

观测与排障

# 每条链路的状态与速率
nvidia-smi nvlink -s

# 链路能力(版本、条数)
nvidia-smi nvlink -c

# 吞吐计数器(d = data)
nvidia-smi nvlink -gt d

# 拓扑矩阵里的 NV# 就是链路数
nvidia-smi topo -m

nvidia-smi nvlink -s 正常输出长这样:

GPU 0: NVIDIA H100 80GB HBM3
	 Link 0: 26.562 GB/s
	 Link 1: 26.562 GB/s
	 ...
	 Link 17: 26.562 GB/s

18 条全在、速率一致就是健康的。掉链的症状

现象说明
某条 Link 显示 <inactive> 或缺失该链路没起来,这对 GPU 的带宽按比例下降
topo -mNV 数字小于预期同上,最直观的检查
某两张卡之间显示 PIX/SYS 而非 NV#NVLink 完全没用上,退化到 PCIe
AllReduce 出现长尾、总带宽小幅下降集合通信是同步的,一条慢链拖慢所有卡
×掉一条 NVLink 不会报错,只会变慢

和 PCIe 降速一样,NVLink 少几条链路时功能完全正常:程序跑得通、结果正确, 只是那对 GPU 之间的带宽按比例缩水。

而 AllReduce 是同步操作——所有卡都得等最慢的那条路径。所以一条链路的问题会表现为 整个作业小幅但稳定地变慢,非常难归因。

因此 GPU 节点的例行体检里应该固定包含这两条:

nvidia-smi nvlink -s | grep -c 'GB/s'    # 链路总数是否符合预期(8 卡 × 18 = 144)
nvidia-smi topo -m | grep -o 'NV[0-9]*' | sort -u    # NV 数字是否一致

生产环境用 DCGM 采集 NVLink 的错误与流量计数(DCGM_FI_DEV_NVLINK_*)做告警, 比人工巡检可靠。

检查点

检查点单选

H100 的 NVLink 官方标称 900 GB/s。要和一张 400G 网卡(50 GB/s 单向)比较,应该用哪个数字?

检查点单选

为什么张量并行(TP)的度数通常不超过 NVLink 域的大小?

检查点单选

某个 8 卡节点上 nvidia-smi topo -m 显示大部分卡对是 NV18,但有一对显示 NV9。会有什么后果?

这节课的落点

  • NVLink 与 PCIe 并存:PCIe 管 CPU↔GPU 与 GPU↔网卡,NVLink 只管 GPU↔GPU
  • 官方规格是双向聚合:第 4 代 900 GB/s(单向 450)、第 5 代 1,800(单向 900)
  • NVSwitch 让域内任意两卡都能跑满全带宽,是 Spine-Leaf 思路在机内的翻版
  • 域的边界决定哪些流量上网络:HGX 是 8 卡,GB200 NVL72 是 72 卡
  • 带宽层级(H100,单向):HBM ≈ 3,350 > NVLink 450 > PCIe 63 ≈ 网络 50 GB/s
  • 由此推出:TP 留域内、PP/DP 可跨机、MoE 的 all-to-all 对网络最苛刻
  • 400G 网卡配 Gen5 x16 是"刚好匹配",这是上一节 PCIe 账的闭环
  • NVLink SHARP 把归约卸载进交换芯片,与 IB SHARP 同一思路
  • 掉链是静默故障:功能正常、只是变慢;固定检查链路数与 NV#,生产用 DCGM 告警

延伸资料