NVLink 诊断与实操

基于 A100-SXM4-80GB (8 GPU, NVSwitch Gen 2) 服务器实测。本文覆盖 nvidia-smi nvlink 的完整命令集,从链路状态、能力查询、拓扑解读到错误检测,并提供一个真实的 NVLink 故障案例(GPU 7 走 PCIe 而非 NVLink)。


1. 命令速查

nvidia-smi nvlink --status         # 每条 link 的当前带宽 (GB/s)
nvidia-smi nvlink --capabilities   # P2P / atomics / SLI 能力
nvidia-smi nvlink --errorcounters  # 链路错误计数器 (Replay/Recovery/CRC)
nvidia-smi nvlink --getthroughput d # tx/rx 数据量 (KiB)
nvidia-smi topo -m                 # GPU 间拓扑矩阵 (NV12/SYS/NODE/PXB)
nvidia-smi nvlink --resetcounters  # 清零计数器(调试前先复位)

消费级 GPU (GeForce RTX 系列) 不支持 NVLink,执行 nvidia-smi nvlink 会输出 Device does not have or support Nvlink


2. 链路状态:--status

nvidia-smi nvlink --status

A100 正常输出(每条 link 25 GB/s,共 12 条):

GPU 0: NVIDIA A100-SXM4-80GB
   Link 0: 25 GB/s
   Link 1: 25 GB/s
   Link 2: 25 GB/s
   ...
   Link 11: 25 GB/s

解读

  • A100 使用 NVLink 3.0,12 条 link,每条单向 25 GB/s → 总双向带宽 = 12 × 25 × 2 = 600 GB/s,与 nvlink_intro.md 文档中 2.2 节记录一致
  • 所有 link 均为 25 GB/s 表示链路处于最高速率(active state)
  • 若出现 Inactive 或更低速率 → 物理层问题或链路未协商到满速

只查某个 GPU

nvidia-smi nvlink --status -i 3   # 只查 GPU 3

3. 链路能力:--capabilities

nvidia-smi nvlink --capabilities

A100 输出:

GPU 0: NVIDIA A100-SXM4-80GB
   Link 0, P2P is supported: true
   Link 0, Access to system memory supported: true
   Link 0, P2P atomics supported: true
   Link 0, System memory atomics supported: true
   Link 0, SLI is supported: true
   ... (12 条 link 全部为 true)
能力 含义 依赖场景
P2P is supported GPU 间可直接访问对方显存 (GPUDirect P2P) NCCL All-Reduce、Tensor Parallelism
Access to system memory 可通过 NVLink 访问 Host 内存 Unified Memory、GPUDirect RDMA
P2P atomics 支持对远端 GPU 显存的原子操作 分布式梯度累加
System memory atomics 支持对 Host 内存的原子操作 GPUDirect + atomic
SLI is supported 支持 SLI 桥接(图形渲染用途) 专业可视化

12 条 link 全部能力为 true 是正常状态。如果某条 link 的 P2P is supported: false,应立刻检查该 link 的错误计数器。


4. 拓扑矩阵解读:nvidia-smi topo -m

这是诊断多 GPU 系统最重要的命令——它直接告诉你 GPU 对之间走的是 NVLink 还是 PCIe:

        GPU0  GPU1  GPU2  GPU3  GPU4  GPU5  GPU6  GPU7
GPU0     X    NV12  NV12  NV12  NV12  NV12  NV12  NV12
GPU1    NV12   X    NV12  NV12  NV12  NV12  NV12  NV12
GPU2    NV12  NV12   X    NV12  NV12  NV12  NV12  NV12
GPU3    NV12  NV12  NV12   X    NV12  NV12  NV12  NV12
GPU4    NV12  NV12  NV12  NV12   X    NV12  NV12  NV12
GPU5    NV12  NV12  NV12  NV12  NV12   X    NV12  NV12
GPU6    NV12  NV12  NV12  NV12  NV12  NV12   X    NV12
GPU7    SYS   SYS   SYS   SYS   NODE  NODE  PXB    X

4.1 连接类型含义

标识 含义 带宽层级 延迟
NV12 NVLink 3.0 (Ampere), 12 links 全连 600 GB/s 双向 ~μs
NODE 同一 NUMA node 内,经 PCIe Host Bridge PCIe 带宽 ~10-20 μs
SYS 跨 NUMA node,经 SMP (QPI/UPI) PCIe + CPU 间互联 更高
PXB PCIe Host Bridge 直连 PCIe 带宽 ~10 μs

4.2 GPU 7 异常案例分析

GPU 7 与其他 GPU 的连接是 SYS / NODE / PXB 而非 NV12。这意味着 GPU 7 的 NVLink 未正常工作,所有 GPU 间通信走 PCIe + CPU 中转:

GPU7 → GPU0-3: SYS  (跨 NUMA node,经 QPI/UPI → 延迟最高)
GPU7 → GPU4-5: NODE (同 NUMA node 1,经 PCIe Host Bridge)
GPU7 → GPU6:   PXB  (同一 PCIe Host Bridge 下)

排查步骤

# 1. 确认 NVLink 状态
nvidia-smi nvlink --status -i 7      # 预期:输出为空(所有 link inactive)

# 2. 检查 NVLink 能力
nvidia-smi nvlink --capabilities -i 7 # 预期:无输出或全部 false

# 3. 检查物理层错误
nvidia-smi nvlink --errorcounters -i 7

# 4. 对比正常 GPU
nvidia-smi nvlink --status -i 0      # 预期:12 links × 25 GB/s

常见原因

原因 现象 解决
NVSwitch 端口故障 仅个别 GPU 断开 NVLink 替换 NVSwitch tray
GPU 基板连接松动 拓扑中该 GPU 全部走 SYS 重新插拔 GPU tray
NVLink 桥接器 (bridge) 损坏 物理层错误计数器持续增长 检查物理连接
固件/驱动版本不匹配 所有 link 显示 inactive 更新驱动或 GPU 固件

在本环境中,GPU 7 是 ECC enabled + MIG disabled 状态,且 nvidia-smi nvlink --status -i 7 返回空——确认是一个活跃的 NVLink 故障。但 GPU 7 仍通过 PCIe 可用(只是 P2P 带宽会大幅下降)。NCCL 在检测到拓扑后会走 PCIe fallback 路径,不会崩溃但性能会显著下降。


5. 链路错误检测:--errorcounters

NVLink 物理层使用 CRC 校验和 replay 机制保证数据完整性。错误计数器持续增长 → 物理层信号质量问题:

nvidia-smi nvlink --errorcounters

正常输出(健康链路):

GPU 0:
   Link 0: Replay Errors: 0
   Link 0: Recovery Errors: 0
   Link 0: CRC Errors: 0
   ... (12 条 link 全部为 0)

三类错误

错误类型 含义 严重程度
CRC Errors 数据校验失败 中——物理层比特错误
Replay Errors 需要重传数据包 高——链路质量下降
Recovery Errors 链路需要重新训练 严重——物理层不稳定

诊断流程

# 1. 清零计数器(开始测试前)
nvidia-smi nvlink --reseterrorcounters -i 0

# 2. 施加负载(运行 NCCL all-reduce 或 bandwidth test)
# ... 运行你的 GPU workload ...

# 3. 再次检查
nvidia-smi nvlink --errorcounters -i 0
# 如果 Replay > 100 / minute → 链路质量有问题
# 如果 Recovery > 0 → 硬件可能需要更换

6. GPU 0-6 健康 vs GPU 7 异常:全量对比

检查项 GPU 0-6 (正常) GPU 7 (异常)
nvlink --status 12 links × 25 GB/s 无输出
nvlink --capabilities 全部 true 无输出
topo -m 连接类型 NV12 全互联 SYS/NODE/PXB
nvlink --errorcounters 全部 0 N/A

生产环境建议:部署时通过脚本检查所有 GPU 的 nvidia-smi nvlink --status,如果某 GPU 的输出为空,立即告警——这比依赖 NCCL 报错快得多(NCCL 可能在 NVLink 故障时自动回退到 PCIe,不会报错但训练吞吐会腰斩)。


7. 相关文档


参考