问题出现得很突然,日志倒是留得挺全。A100 80G 的机器 nvidia-smi 显示的显存从 80896MiB 变成 80384MiB,日志里有 ECC error corrected,训练还能跑,但 batch 一大就 OOM,重启机器也没有恢复,驱动 535。
刚开始盯着「有残留进程占用,nvidia-smi 默认列表没显示」,折腾了半个多小时,排掉了。
原因不止一个,得分开看。显存颗粒出现可纠正 ECC 错误,硬件保留了坏块。另一种情况是ECC 开启本身会占用一部分显存。
另外,驱动版本与固件不匹配,报告的容量不准。
上来先看 ECC 的错误计数和模式
nvidia-smi -q -d ECC | grep -E 'ECC Mode|Volatile|Aggregate'
接着确认有没有隐藏进程占着显存
nvidia-smi --query-compute-apps=pid,used_memory --format=csv
尝试复位 GPU 看容量是否恢复
nvidia-smi --gpu-reset -i 0
末了查内核日志里有没有 Xid 与 ECC 记录
dmesg -T | grep -i -E 'Xid|ecc' | tail -20
别只看报错消失,验证要多做一步。ECC 错误计数不再增长,可用显存回到 80896MiB 或稳定在扣减后的值,训练 batch 能恢复到原来的大小。
提醒一点。可纠正 ECC 会永久保留坏块,容量减少通常不可逆;如果 Xid 频繁出现要尽快走 RMA,靠调小 batch 只能拖延,不能修复硬件。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
