报错是这么冒出来的。8 卡 A100 训练到第 4 个小时,nvidia-smi 里一张卡消失,dmesg 出现 Xid 31,训练进程被 kill,重启后同一位置再次出现。

中间走过弯路,把「PCIe 链路或供电不稳定」当成主因,改完现象没变。

原因不止一个,得分开看。显存访问越界触发 GPU 侧异常。另一种情况是驱动与 CUDA 版本不匹配。

不容易想到的是,同卡上的其他进程占满显存后触发回收。

上来先查内核日志里的 Xid

dmesg -T | grep -i xid | tail -20

再往下看卡的健康状态

nvidia-smi --query-gpu=index,name,ecc.mode.pending --format=csv

单独压测可疑的那张卡

nvidia-smi -i 3 -q -d MEMORY,ECC | head -40

剩下的就是换卡或换槽后长跑验证

python train.py --max-steps 2000 --device cuda:3

命令输出我都留了记录,免得改完记不清原来的值。

改之前先确认了最近有没有人动过配置,避免白查一遍。

怎么算真的好了,看的是同一批现象。换卡或换槽后连续跑 8 小时不再出现 Xid,nvidia-smi 里 8 张卡都在。

Xid 31 是显存访问错误,先怀疑代码越界再怀疑硬件,两者现象一样但处理方式不同。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。

作者 9823189