nvidia-smi报错主因是内核升级后nvidia驱动模块未适配:先用uname -r和dpkg -l | grep linux-modules-nvidia比对版本,再查lsmod | grep nvidia确认是否加载,最后通过dkms install或回退旧内核解决。

nvidia-smi 报错 NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver,基本就是内核升级后驱动模块没跟上——不是驱动卸载了,是它根本没为新内核编译过。
怎么看是不是内核和驱动版本对不上
别猜,直接查:
- 当前运行的内核:
uname -r - 已安装的 NVIDIA 内核模块对应哪个内核:
dpkg -l | grep "linux-modules-nvidia"(Ubuntu/Debian)或dkms status(若用了 DKMS) - 模块有没有加载:
lsmod | grep nvidia—— 空输出就说明没加载成功 - 驱动源码是否就位:
ls /usr/src/ | grep nvidia—— 比如nvidia-535.129.03,这个版本号后面要用
如果 uname -r 输出的是 6.17.0-24-generic,但 linux-modules-nvidia 只装在 6.17.0-22-generic 上,问题就坐实了。
用 dkms 重编译驱动模块(推荐优先试)
前提是你的驱动是通过 DKMS 安装的(比如用 ubuntu-drivers autoinstall 或 apt install nvidia-driver-535),否则这步会失败。
- 确认 DKMS 已安装:
sudo apt install dkms - 查看驱动状态:
dkms status,找到类似nvidia, 535.129.03, 6.17.0-22-generic, x86_64: installed - 为当前内核重新构建:
sudo dkms install -m nvidia -v 535.129.03 - 加载模块:
sudo modprobe nvidia
失败常见原因:gcc 版本太低(报 -fstack-protector-strong 错误)、kernel-devel 包缺失、或 /usr/src/linux-headers-$(uname -r) 不完整。先跑 sudo apt install linux-headers-$(uname -r) 补齐头文件。
删掉新内核回退到旧内核(最稳)
如果你刚升完内核,nvidia-smi 就挂了,而旧内核还能进系统、驱动正常,那就别硬扛——删新留旧更省事。
- 列出所有内核:
ls /boot/vmlinuz-*,确认旧内核还在(比如vmlinuz-6.17.0-22-generic) - 重启,在 GRUB 菜单选
Advanced options for Ubuntu → Ubuntu, with Linux 6.17.0-22-generic - 进系统后卸载新内核:
sudo apt remove linux-image-6.17.0-24-generic linux-headers-6.17.0-24-generic linux-modules-6.17.0-24-generic - 更新引导:
sudo update-grub
注意:别直接 apt autoremove,它可能误删你正在用的旧内核。手动指定版本删除更安全。
为什么不能只重装驱动?
重装驱动包(比如 sudo apt install --reinstall nvidia-driver-535)看似合理,但有三个现实卡点:
- APT 源里未必有适配你当前内核的
linux-modules-nvidia包(尤其新内核刚发布几天时) - 如果你之前用的是 .run 文件手动安装,它默认不注册 DKMS,也不会随内核升级自动重建模块
- 某些老驱动(如 470.x)压根不支持 6.15+ 内核,强行编译会报
unknown symbol或直接失败
所以,判断驱动版本是否支持当前内核,比“重装”动作本身更重要。查 NVIDIA 官网的 Linux Driver Release Notes,看 Support Matrix 里明确写的 kernel version range。











