文章

NVLink 与 NVSwitch 拓扑详解

NVLink 与 NVSwitch 拓扑详解

NVLink 和 NVSwitch 是 GPU 集群性能的关键。理解 GPU 间互联拓扑,是诊断多卡训练性能瓶颈的必修课。


1.1 PCIe 的瓶颈

GPU 0 ──PCIe 4.0 x16 (32 GB/s)──> CPU ──QPI──> CPU ──PCIe 4.0 x16──> GPU 1
                                                                    (32 GB/s)

问题:
- GPU 间通信必须经过 CPU,延迟 5-10μs
- 带宽受限于 PCIe 4.0 ×16 = 32 GB/s(双向)
- 大数据量通信(AllReduce)成为训练瓶颈
GPU 0 ────── NVLink (900 GB/s) ──────> GPU 1
               延迟 ~1μs, 直连

优势:
- GPU 间直连,不经过 CPU,延迟低 5-10×
- 单链路 50-100 GB/s,多路聚合带宽远大于 PCIe
- 支持 GPU Direct P2P(GPU 直接读写对方显存)

代际架构单链路速率链路数/GPUGPU 总带宽NVSwitch最大 GPU 数
V1Pascal25 GB/s4300 GB/s8 (Mesh)
V2Volta50 GB/s6300 GB/sNVSwitch V18
V3Ampere50 GB/s12600 GB/sNVSwitch V28
V4Hopper50 GB/s18900 GB/sNVSwitch V38
V5Blackwell100 GB/s181.8 TB/sNVSwitch V472 (NVL72)

2.2 各代 NVSwitch 参数

NVSwitch 代际支持架构单芯片端口每端口速率8 GPU 所需芯片数
V1Volta1850 GB/s6
V2Ampere3650 GB/s6
V3Hopper3650 GB/s4
V4Blackwell72100 GB/s— (NVL72 新架构)
GPU 通信带宽对比(每个方向):

                    NVLink              PCIe
P100 (Pascal)      300 GB/s           32 GB/s (3.0)
V100 (Volta)       300 GB/s           32 GB/s (3.0)
A100 (Ampere)      600 GB/s           64 GB/s (4.0)
H100 (Hopper)      900 GB/s           128 GB/s (5.0)
B200 (Blackwell)   1.8 TB/s           128 GB/s (5.0)

NVLink ≈ PCIe × 9-14

三、拓扑结构详解

3.1 DGX/HGX 8 卡全互联拓扑

NVSwitch 实现的全互联(All-to-All)拓扑:

     GPU0 ════╗               ╔════ GPU4
              ║               ║
     GPU1 ════╬═══ NVSwitch  ═╬════ GPU5
              ║    (4-6 颗)   ║
     GPU2 ════╬═══════════════╬════ GPU6
              ║               ║
     GPU3 ════╝               ╚════ GPU7

特点:任意两 GPU 间带宽 = GPU 总 NVLink 带宽
     H100: GPU0→GPU1 = 900 GB/s, GPU0→GPU7 = 900 GB/s(无衰减)
A100 PCIe 2 卡 NVLink Bridge:

    GPU0 ═══ NVLink Bridge (600 GB/s) ═══ GPU1
      │                                     │
    PCIe 4.0 x16                        PCIe 4.0 x16
      │                                     │
    CPU 0                               CPU 1

4 卡 PCIe 拓扑(无全互联):
    GPU0 ═══ Bridge ═══ GPU1
      │                   │
    GPU2 ═══ Bridge ═══ GPU3

GPU0 → GPU2 无 NVLink,必须经过 PCIe → 带宽仅 64 GB/s

3.3 Blackwell NVL72 新拓扑

Blackwell NVL72 机柜级互联:

    NVSwitch 背板
    ┌─────────────────────────────────────────┐
    │  9 颗 NVSwitch × 72 端口                │
    │  每 GPU → 18 路 NVLink 5.0 → 18 端口     │
    │  18 × 72 = 1296 端口 全交叉互联          │
    └─────────────────────────────────────────┘
         │  │  │  ...  │  (72 路)
      GPU0 GPU1 GPU2 ... GPU71

聚合带宽:130 TB/s(全互联)
单 GPU 到任意 GPU 带宽:1.8 TB/s

张量并行(Tensor Parallelism):每层参数切分到多卡,每步需要 AllReduce
→ 通信模式:GPU-GPU 点对点高频小数据量通信
→ NVLink 带宽 >>> PCIe 带宽 → TP 强依赖 NVLink

示例:TP=4,模型每层参数 4GB
每步通信量 = 4GB(前向)+ 4GB(反向)= 8GB
NVLink (900 GB/s): 8GB / 900 ≈ 9ms
PCIe 4.0 (64 GB/s): 8GB / 64 ≈ 125ms
→ NVLink 加速 14×
流水线并行:每层在不同 GPU 上,仅层间边界传递激活值
→ 通信量小,对带宽不敏感
→ PCIe 也够用
数据并行:每步 AllReduce 梯度
→ 通信量大(与模型大小成正比),但对延迟不敏感
→ NVLink 有帮助但非必需,RDMA 网络也可胜任
→ AllReduce 通常走 NCCL + 网络(跨节点)

4.4 典型并行策略的互联需求

并行策略通信模式通信量关键互联
张量并行 TPGPU-GPU 高频小量NVLink/NVSwitch
流水线并行 PPGPU-GPU 层间传递任意互联
数据并行 DP跨节点 AllReduceRDMA 网络
序列并行 SPGPU-GPU 高频NVLink
专家并行 EPGPU-GPU AlltoAllNVLink+RDMA

结论:TP 一定要同 node 内 NVLink 全互联(DGX/HGX);DP 可以跨节点走 RDMA。


五、运维实战

# 查看 NVLink 拓扑矩阵
nvidia-smi topo -m

# H100 SXM 8 卡 输出:
#         GPU0  GPU1  GPU2  GPU3  GPU4  GPU5  GPU6  GPU7
#  GPU0    X    NV18  NV18  NV18  NV18  NV18  NV18  NV18
#  GPU1   NV18   X    NV18  NV18  NV18  NV18  NV18  NV18
#  ...
# NV18 = 18 条 NVLink 通道连接
# PIX  = 同 PCIe 桥(无 NVLink 直连)
# PHB  = 不同 PCIe Host Bridge
# NODE = 不同 NUMA node(通过 QPI/UPI)

# 查看每路 NVLink 链路状态
nvidia-smi nvlink -s

# 典型正常输出:
# GPU 0: NVIDIA H100 80GB HBM3
#          Link 0: 50.000 GB/s   ← 当前速率
#          Link 1: 50.000 GB/s
#          ...
#          Link 17: 50.000 GB/s

# 异常示例:
# GPU 3: NVIDIA H100 80GB HBM3
#          Link 0: 50.000 GB/s
#          Link 1: 0.000 GB/s    ← 链路 Down!需排查
# 1. 查看链路错误计数
nvidia-smi nvlink -e

# 2. 检查 NVSwitch 状态(DGX/HGX 平台)
nvidia-fabricmanager -v      # 查看 Fabric Manager 版本和状态

# 3. 如果 NVLink 链路反复 UP/DOWN
# 原因可能:
#   - GPU 温度过高(thermal throttling 可能导致 NVLink 降速)
#   - NVSwitch 过热
#   - 线缆/基板物理故障
#   - 驱动版本与 Fabric Manager 版本不匹配

# 4. 重启 Fabric Manager(仅 DGX/HGX)
systemctl restart nvidia-fabricmanager

# 5. 查看 Fabric Manager 日志
journalctl -u nvidia-fabricmanager -f
# 使用 CUDA samples 测试 P2P 带宽
# 前提:已安装 cuda-samples
cd /usr/local/cuda/samples/1_Utilities/p2pBandwidthLatencyTest
make
./p2pBandwidthLatencyTest

# 预期结果(H100 SXM, NVLink 4.0):
# P2P Connectivity Matrix
#      D\D     0     1     2     3     4     5     6     7
#      0       1     1     1     1     1     1     1     1
#      1       1     1     1     1     1     1     1     1
#      ...
#
# Unidirectional P2P=Enabled Bandwidth Matrix (GB/s)
#    D\D     0      1      2      3      4      5      6      7
#      0 1889.34  37.49  37.54  37.52  37.51  37.50  37.52  37.54
#                          ↑ 只有 ~37 GB/s?说明走的是 PCIe!
# 正常 NVLink 带宽应该是 ~900 GB/s / 2 / 2 ≈ 225 GB/s (unidir)

# 注意:p2pBandwidthLatencyTest 结果偏低是正常的(测试方法限制)
# 更准确的测试用 NCCL bandwidthTest

5.4 DGX/HGX 平台 NVSwitch 管理

# 查看 NVSwitch 状态(需 nvidia-fabricmanager 运行中)
nvidia-smi nvswitch -q

# 关键输出:
# NVSwitch ID: 0
#   Firmware Version: 5.0.0
#   Temperature: 65°C        ← 监控此温度
#   Power: 45W
#   PCIe Error Count: 0       ← 任何非零值需关注

# NVSwitch 温度告警:
# > 85°C 开始降速
# > 95°C 自动保护性 shutdown

5.5 GPU Direct P2P 验证

# 检查 GPU 间 P2P 是否可用
nvidia-smi topo -p2p

# 正常输出(NVLink 连接):
#     GPU0    GPU1    GPU2    GPU3
# GPU0  X      OK      OK      OK
# GPU1  OK     X       OK      OK
# ...

# 如果输出 CNS(Chipset Not Supported),说明 P2P 不可用
# 常见原因:
# - PCIe Above 4G Decoding 未在 BIOS 中启用
# - IOMMU 未启用 / 配置错误
# - GPU 跨不同 PCIe root complex

6.1 AllReduce 带宽实测对比

测试环境:8 × A100 SXM 80GB, NCCL 2.18, 消息大小 512MB

互联方式            AllReduce 带宽    效率
─────────────────────────────────────────
NVSwitch (全互联)    ~550 GB/s        100%
NVLink Mesh (无 Switch) ~180 GB/s      33%
PCIe 4.0 ×16         ~30 GB/s          5%
1GbE TCP/IP           ~1 GB/s         <1%

6.2 GPT-175B 训练示例

GPT-175B 训练,8 × A100 SXM:
- 张量并行 TP=8(全在节点内,用 NVSwitch)
- 流水线并行 PP=8(跨 8 节点,用 IB/RoCE)
- 数据并行 DP=64(跨 64 副本)

TP 通信占训练时间 ≈ 5-10%(NVSwitch 全互联)
如果换成 PCIe 平台(无 NVSwitch):
TP 通信占训练时间 ≈ 40-50%(带宽下降 10×)

七、常见问题

Q1:为什么 nvidia-smi topo -m 显示 PIX 而不是 NV12?

PCIe 平台只有 NVLink Bridge,显示为 PIX(同一 PCIe 桥下)。SXM 平台才显示 NV18/NV12。

Q2:NVLink 链路 Down 了怎么办?

  1. 检查 nvidia-smi nvlink -e 错误计数
  2. 检查 GPU 和 NVSwitch 温度
  3. 确认驱动和 Fabric Manager 版本匹配(nvidia-fabricmanager -v
  4. 重启 Fabric Manager:systemctl restart nvidia-fabricmanager
  5. 如果仍不行 → 硬件故障,联系供应商更换 GPU/NVSwitch 基板

Q3:PCIe 4 卡能不能用 NVLink Bridge 全互联?

不能。NVLink Bridge 只支持 2 卡直连。4 卡时只有相邻的 2 对各自互联,跨对通信走 PCIe。

Q4:A100 PCIe 和 A100 SXM 的 NVLink 有区别吗?

有。PCIe 版仅支持 2 卡 NVLink Bridge(600 GB/s 对等),SXM 版通过 NVSwitch 支持 8 卡全互联(600 GB/s 任意对)。


关联知识

参考资源

学习时间

阶段时间备注
内容创建2026-06-30完整 NVLink/NVSwitch 详解

状态标记

📖 已掌握 — NVLink 代际、拓扑类型、分布式训练影响、故障排查命令 📝 待补充 — NVL72 实际部署拓扑细节、量子-经典混合互联(NVIDIA 下一代 Quantum-X NVLink Switch)