今天打开ubuntu20.04操作系统,无奈发现使用 nvidia-smi 查看显卡状态,却报了下面的异常。然后原来配置的GPU环境也不起作用了。这里记录下这个问题的解决思路。
NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver. Make sure
问题剖析
起初还以为是显卡的接线出了问题,拔线拔了,又重新插了一遍,仍没有解决问题。最后经过查询才知道是因为我的ubuntu系统自动更新了系统的内核,导致原来装的 GPU 驱动无法和系统进行有效通信。当然解决此问题的方法之一是,将显卡驱动卸载然后重新安装,但是实在不想那么麻烦了,如果后续每更新一次内核,都要重新配置,真的太麻烦了!!!!
问题解决思路
1 关闭Ubuntu的内核自动更新
明显,内核我并没有手动更新,是系统自动更新的,所以,首要任务是先关了内核的自动更新。
分别输入下面的命令:
1
sudo vi /etc/apt/apt.conf.d/10periodic
2
sudo vi /etc/apt/apt.conf.d/20auto-upgrades
上面两个命令打开的文件内容是一个字典,将字典中的值统一改为 0 ,即不开启相应的更新,然后保存退出即可、
2 查看内核信息
uname -r
sudo dpkg --get-selections | grep linux-image
【注】带 install 的是可用内核
内核映像文件主要包括以下类型:
linux-image-版本号:内核映像文件
linux-headers-版本号:内核头文件
linux-image-extra-版本号:内核扩展文件
删除对应版本的内核文件:sudo apt-get purge linux-image-<版本号>
3 修改 grub 文件
sudo gedit /etc/default/grub
在打开的内容中,增加下面的内容,这个内容主要是为了自定保存默认的内核设置:
GRUB_SAVEDEFAULT=true
GRUB_DEFAULT=saved
然后注释掉 GRUB_TIMEOUT_STYLE 这一段代码,设置 GRUB_TIMEOUT 值为 10,即启动时会有十秒钟的时间停在选择界面上:
# GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=10
保存文件后,使用下面命令使其生效:
sudo update-grub
【一般要等30秒左右,有打印信息,会把所有可用的内核都设置一遍】
然后重启系统
sudo reboot
【注】重启系统后,开机之前的 grub 界面中,选择 Advantages for ubuntu 选项,接着选择自己想要的内核版本(最好不要选择recovery模式)进入,系统会默认选择你本次的启动内核为默认内核版本。
最后一步
由于我们设置了 GRUB_TIMEOUT=10,如果我们选定了系统内核,一般会通过在 grub 文件中添加的内容进行自动保存,所以下次在进入系统时,无需重复选择内核版本,这里需要重新设置一下 grub 文件中的内容 GRUB_TIMEOUT_STYLE=hidden 去掉注释即可:
GRUB_TIMEOUT_STYLE=hidden
然后保存文件后,运行下面的命令:
sudo update-grub
在下次启动时会自动选择该内核了!!!