Linux系统无法载入nvidia-smi驱动
问题描述
系统重启后,nvidia-smi指令无法正常使用,发现是nvidia驱动的问题。多次尝试重装不同版本驱动,仍然没有用。
问题表现
- 执行 nvidia-smi 显示: NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running;
- 执行 sudo modprobe nvidia 显示: modprobe: ERROR: could not insert ‘nvidia_384’: Exec format error;
- 执行 dmesg 显示: 很长的一段内容,末尾处是 nvidia: version magic '4.4.0-138-generic SMP mod_unload modversions ’ should be '4.4.0-138-generic SMP mod_unload modversions retpoline '之类的红色提示文字。
出错原因
当前使用的系统内核的BUG,需要对系统内核进行更新或降级。
解决方案
首先查看自己当前的Linux系统内核:
uname -r
结果会显示当前内核版本号。如果是116及以上的版本,可能需要对当前linux内核进行降级。具体操作步骤如下:
【第1步】搜索系统内核
sudo dpkg --get-selections | grep linux
【第2步】查看是否有低版本内核
如果有低版本内核,那么卸载高版本内核后会自动退回低版本内核;
如果没有低版本内核,那么卸载高版本内核后会回到BIOS界面!
如果没有低版本内核,那么可以安装一个112的
sudo apt-get install linux-image-4.4.0-112-generic
【第3步】卸载高版本内核
sudo apt-get remove linux-image-4.4.0-116-generic
【第4步】重启linux系统
sudo reboot
【第5步】安装和内核版本对应的headers
可不做,后面安装Nvidia依赖也会装一次。
sudo apt-get install linux-headers-$(uname -r)
然后再次uname -r查看内核版本,发现退回了112了。
上述步骤都操作完之后,先尝试一下nvidia-smi指令是否已经能够正常使用了,如果不行,按照正常步骤重装nvidia-smi驱动就可以了
其他方法
最近又遇到了上述问题,发现以上操作有点复杂,然后又找到了另一种方案:
【步骤1】执行命令:sudo apt-get install dkms
【步骤2】执行命令:sudo dkms install -m nvidia -v XXX.XX
其中,XXX.XX为NVIDIA的版本号,可进入/usr/src目录中,nvidia文件夹的后缀就是其版本号。
参考文献
1、《linux kernel bug 导致无法载入 nvidia 驱动》
2、《在ubuntu16.04上安装nvidia驱动》
3、《无法连接NVIDIA驱动:NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver》
其他博客
【深度学习论文翻译】Learning Spatiotemporal Features with 3D Convolutional Networks全文对照翻译
【深度学习论文翻译】Weakly Supervised Action Localization by Sparse Temporal Pooling Network全文翻译