先把当时的情况摆出来。Ubuntu 20.04 的 GPU 训练机 apt upgrade 顺带升了内核,重启后 nvidia-smi 报 Failed to initialize NVML: Driver/library version mismatch,CUDA 程序全部起不来。

这类报错背后常见的原因有几处,逐个排除就行。内核升级后 nvidia 的 DKMS 模块没跟着重编,内核模块还是旧内核的。也可能是驱动包被部分升级,用户态库与内核模块版本号对不上。

还有一种情况,Secure Boot 开着,新编的模块没签名被拒载。

上来先对比两边版本

cat /proc/driver/nvidia/version; nvidia-smi | head -3

随后让 DKMS 重编模块

dkms status; dkms autoinstall

版本不一致就重装对齐

apt install --reinstall nvidia-dkms-535

剩下的就是重启后看内核日志

dmesg | grep -i nvrm | tail

排查用的命令都是临时敲的,没有写成脚本,事后才整理。

手上没有现成的复现脚本,就照着线上请求手工拼了一个。

恢复的判定其实很直接。nvidia-smi 正常列出 GPU,驱动版本与 /proc/driver/nvidia/version 一致,dmesg 里没有 NVRM 报错,CUDA 程序能枚举到设备。

GPU 机器升级内核前先看 DKMS 有没有对应版本,签不上名就把 Secure Boot 关掉或走 MOK 注册;重启前留一个串口或带外通道。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。

作者 9823189