跳过正文

GPU全在、驱动正常,训练就是卡死——NVLink悄悄坏了一半

·2116 字·5 分钟·
作者
闫工
十年运营商机房 IT 运维,CCIE。做数据中心网络架构、GPU 服务器与裸金属交付,顺手写点自研小工具。

📌 转载说明:本文首发于微信公众号《闫工的算力工具箱》 原文链接:https://mp.weixin.qq.com/s/jYKUvo2zwJCZ8OBNpBP-zg

【闫工的工具箱 · 第 12 弹|实战】
#

我是闫工,数据中心搬砖的 CCIE。

先直接说损失账:这台 8 卡 GPU服务器交付当天就趴窝,训练集群少算力一小时,客户那边就是一笔真金白银。更让人挠头的是,显卡全在、驱动正常,卡死的却是训练任务。

先解释下标题里的黑话:NVLink 是 GPU 之间的高速通道,Fabric Manager(FM)是管这条通道的服务。这台机器的问题,就是 NVLink 悄悄坏了一半,而 FM 这个"交警"直接罢工了。一开始按驱动问题处理,重装驱动、换 CUDA 版本,折腾了半天。后来才搞明白,FM 只需改一行配置,就能让这台机器"带伤上岗"。

— — —

1. 诡异现场:训练卡死,FM 反复起不来
#

新上架的 8 卡 A800-SXM4-80GB,跑分布式训练时 NCCL 疯狂报错。先看服务状态:

systemctl status nvidia-fabricmanager
● nvidia-fabricmanager.service - NVIDIA fabric manager service
     Active: activating (start) since Fri 2026-07-24 16:24:59 CST; 1s ago

activating → failed → activating → failed,无限循环。再看日志:

journalctl -u nvidia-fabricmanager -n 50
nv-fabricmanager[31506]: NVLink initialization failed for NodeId:0 nvswitch0 NVLink:24
nv-fabricmanager[31506]: NVLink initialization failed for NodeId:0 GPU PCI bus id:00000000:55:00.0 enumIndex:5 NVLinkIndex 3
nv-fabricmanager[31506]: global fabric manager initialization failed
More than one NVSwitches have trunk NVLink failed, set to abort Fabric manager

GPU全在、驱动正常,训练就是卡死——NVLink悄悄坏了一半

上面几行是细节,最后一句 More than one NVSwitches have trunk NVLink failed 才是破案核心——它直接告诉我们,故障发生在 NVSwitch 的 Trunk 链路上。不止一个 NVSwitch 的 trunk 链路坏了,FM 的安全机制直接中止启动,宁可停机也不带伤运行。这个设计平时是保护,排查时就成了迷惑源:明明 GPU 都在,服务却起不来,很容易让人误判成驱动问题。

2. 破案:nvidia-smi 一行看出 NVLink 伤情 #

FM 起不来,但 GPU 本身是活的。用 nvidia-smi nvlink –status 看每条 NVLink 链路:

GPU全在、驱动正常,训练就是卡死——NVLink悄悄坏了一半

结果是这样的:

GPU 故障链路 正常链路 故障率
GPU 0 1 条 7 条 12.5%
GPU 1 2 条 6 条 25%
GPU 2 1 条 7 条 12.5%
GPU 3 5 条 3 条 62.5%
GPU 4-7 0 条 8 条 0%(正常)

GPU 3 最惨,8 条 NVLink 废了 5 条,基本等于半残。还有个细节:GPU 0-3 在一台 NVSwitch 域里,GPU 4-7 在另一台,后者完全正常。

nvidia-smi topo -m 确认拓扑:

GPU全在、驱动正常,训练就是卡死——NVLink悄悄坏了一半

GPU 0↔GPU 3 只有 3 条 NVLink(NV3,正常应 8 条),GPU 4↔GPU 7 是完整的 NV8。问题集中在 GPU 0-3 这个 NVSwitch 域。

dmesg 也给出佐证:

dmesg | grep "NVRM.*fabric address"
NVRM: knvlinkCheckNvswitchP2pConfig_IMPL: GPU 0 doesn't have a fabric address
NVRM: knvlinkCheckNvswitchP2pConfig_IMPL: GPU 3 doesn't have a fabric address

GPU 0 和 GPU 3 拿不到有效的 fabric 地址,NVSwitch 的 trunk 链路没建立起来,GPU 连不上 NVSwitch。

3. Access Link 还是 Trunk Link?故障面完全不同 #

NVLink 链路分两种,故障影响差得远:

  • Access Link(GPU → NVSwitch):只影响单个 GPU 的通信;
  • Trunk Link(NVSwitch ↔ NVSwitch):影响整个 NVLink 域。

咱们这次是 Trunk Link 故障,NVSwitch 之间断了,整个 GPU 0-3 域通信瘫痪。这也是 FM 直接 abort 的原因:它检测到"多个 NVSwitch trunk 失败",认为整个 fabric 不可信,干脆停机保平安。

4. 为什么换块 GPU 没用?根子在 NVSwitch
#

有人会问:换块 GPU 试试?没用。根子不在 GPU 卡上,而在 NVSwitch 芯片或 GPU 与 NVSwitch 之间的物理连接(背板/线缆)。可能的硬件原因:

  • GPU 3 的 NVLink 引脚 / 背板接触不良;
  • NVSwitch 芯片部分 trunk 链路损坏;
  • 电源波动导致 NVLink 链路不稳定;
  • NVSwitch 过热自动降级。

5. 解决方案:修改 FM 配置,容忍 NVLink 故障 #

硬件换不了,业务不能停。那就改 Fabric Manager 配置,让它容忍部分 NVLink 故障,坏哪块禁哪块,剩下的 GPU 继续干活。

1. 停服务
systemctl stop nvidia-fabricmanager
2. 追加配置(NVLink 故障容忍)
cat >> /usr/share/nvidia/nvswitch/fabricmanager.cfg << 'EOF'
# NVLink故障容忍配置
TRUNK_LINK_FAILURE_MODE=1          # 禁用故障NVSwitch,不影响整体
ACCESS_LINK_FAILURE_MODE=0         # 移除故障GPU的P2P能力
NVSWITCH_FAILURE_MODE=1            # 禁用故障NVSwitch
FM_STAY_RESIDENT_ON_FAILURES=1     # 即使有故障也保持运行
EOF
3. 启动服务
systemctl start nvidia-fabricmanager

⚠️ 配置文件路径因发行版/厂商而异:不同发行版或服务器厂商(如 Dell、HPE)的配置文件路径可能不同,我这里是 /usr/share/nvidia/nvswitch/fabricmanager.cfg,你的机器可能是 /etc/nvidia/fabricmanager.cfg。如果上述路径不存在,用这条命令确认实际位置,别照抄: find / -name “*fabricmanager*.cfg” 2>/dev/null

GPU全在、驱动正常,训练就是卡死——NVLink悄悄坏了一半

GPU全在、驱动正常,训练就是卡死——NVLink悄悄坏了一半

FM 启动成功,故障 NVSwitch 被禁用,其余 GPU 继续工作,训练恢复。虽然 GPU 0-3 之间通信降级,但整体业务能跑,这已经是最好的结果了。

6. 备选方案(按风险从低到高)
#

方案 操作 效果 风险
① 改 FM 配置(推荐) 追加故障容忍配置 禁坏 NVSwitch,其余继续
② GPU 软重置 nvidia-smi –gpu-reset + 重载驱动 可能恢复部分 NVLink
③ 完全断电重启 关机、拔电源 30 秒、上电 最彻底,可能解决锁死 中高
④ 禁用全部 NVLink 内核参数 NVreg_NvLinkDisable=1 GPU 走 PCIe 通信,性能暴跌约 95%

⚠️ 方案③的风险:A800 SXM 是整机系统(DGX/HGX),完全断电会导致所有 GPU 同时掉电,可能影响 NVLink fabric 的初始化顺序,甚至让本来正常的链路也暂时起不来。部分节点重启后需要重新配置 FM。建议作为最后手段,先试 ①②。

方案④的性能账:NVLink 域内带宽约 600 GB/s,禁用后 GPU 之间走 PCIe 4.0 x16(约 32 GB/s),暴跌约 95%,等于把 8 卡机变成 8 台独立机器。

7. 给交付团队的建议
#

几条血的教训,写进你的检查清单:

  • 验收必查 NVLink:nvidia-smi nvlink –status + nvidia-smi topo -m,别只看 nvidia-smi 8 卡在不在;
  • FM 状态要看:systemctl status nvidia-fabricmanager 必须 active,activating 就是有坑;
  • 区分 Access/Trunk:trunk 故障影响整域,故障面比单卡大得多;
  • NVLink 故障不致命但影响性能:把坏域 GPU 放同一节点、不同通信组,能有效规避影响。

相关文章