问题:有时在重启机器后,nvidia-smi之后会显示nvidia驱动丢失,这是由于linux内核升级,之前的nvidia驱动就不匹配。
报错NVIDIA_SMI has failed because it couldn’t communicate with the NVIDIA driver
对于这个问题有两种解决方式:
1)切换回初始内核(无需网络)
2)编译当前显卡驱动适配当前内核版本(需要网络)
方法1:切换回初始内核
一、查看当前内核版本
输入
uname -a
5.4.0-135这串数字代表当前内核版本,原始版本为5.4.0-132
后面需要切换为初始内核版本
二、查看当前电脑上已下载的内核排序
grep menuentry /boot/grub/grub.cfg
可以看到当前存在132、135、213三种版本的内核
记录132不带recovery字段的字符(多个内核的字符好像是一样的),后续会用到
即:
gnulinux-5.4.0-132-generic-advanced-d9577f3c-585b-4eec-90ab-15b6977348ed
(若没有132版本的内核,可以自行安装sudo apt-get install linux-image-VERSION-generic linux-headers-VERSION-generic)
三、修改内核默认启动项
输入sudo vim /etc/default/grub
,输入用户密码,会弹出文本框修改配置文件。
打开后注意前4行是否注释掉了,否则后面时无法更新成功的。
将GRUB_DEFAULT后面改为
gnulinux-advanced-d9577f3c-585b-4eec-90ab-15b6977348ed>gnulinux-5.4.0-132-generic-advanced-d9577f3c-585b-4eec-90ab-15b6977348ed
若默认内容已为以上格式,仅修改135为132即可
修改后输入:wq退出vim编辑器
四、内核配置更新
输入sudo update-grub
进行配置更新
五、切换内核重启服务器
输入sudo reboot重启服务器
可以看到,切换为初始内核后,显卡驱动恢复了
方法2:编译当前显卡驱动适配当前内核版本
若重启后发现内核未切换成功,显卡驱动依然不存在,尝试让当前驱动兼容当前内核版本
一、查看已安装的驱动信息
检查cuda是否存在
nvcc -V
查看已安装驱动的版本信息
ls /usr/src | grep nvidia
记录当前驱动版本号为470.82.01(此版本号不固定,不同服务器驱动版本存在差异)
二、安装dkms
DKMS(Dynamic Kernel Module Support)是DELL的一个项目,可以做到内核变更后自动编译模块,适配新内核
输入sudo apt-get install dkms
安装dkms
在这里插入图片描述
(可能会需要输入sudo apt autoremove
命令,若无该提示则忽略)
三、使用dkms重新编译当前驱动适配当前内核
sudo dkms install -m nvidia -v 470.82.01
可以看到目前并没有切换为132版本的内核,在135版本的内核下,显卡驱动依然可以正常使用,解决了版本不匹配的问题