NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver解决办法

NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver解决办法

参考链接1
参考链接2
参考链接3

2023.3.17更新

今天突然又出现这个问题,一开始我就以为内核自动更新,便想去降低内核版本,一看旧版本的内核,发现都被自动删除了,然后我之前也将内核自动更新取消了啊,输入命令dpkg --get-selections | grep linux-image打印内核版本显示也是hold,按道理内核并没有更新。
在这里插入图片描述
一开始没发现问题,便一直尝试下载旧版本内核来解决,一直没成功。最后无意间在ubuntu的应用中点开nvidia x server settings

在这里插入图片描述
将选择nvidia on-demand,再重启系统就可以了(原来选项选的是intel 省电模式,太坑了。。。)

在这里插入图片描述

1. 问题描述

终端输入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.

本来好好的,突然出现这个问题一般是内核自动更新,导致内核版本与显卡驱动不匹配的问题,解决办法最好是把内核版本降到之前的版本

  • 终端输入命令uname -r,输出当前内核版本,记住当前版本信息
2.切换到原来的内核

(1)如果ubuntu有图形化界面,则可以通过以下方法切换内核

  • 重启主机,进入grub引导界面,选择Advanced options for Ubuntu

20221117143456

  • 选择Advanced options for Ubuntu后,进入其子菜单,如下图所示

20221117143533

  • 选择一个低版本的内核进入系统,然后通过终端输入uname -r查看当前内核版本确认是否切换成功,若切换成功则输入nvidia-smi查看显卡配置能否打印

(2)如果ubuntu没有图形化界面(远程控制的服务器那种),则可以通过以下方法切换内核

  • 首先,查看自己的grub版本:
grub-install --version

记住(GRUB)之后的大版本是2.00以后还是2.00以前

  • 查看自己现有的内核版本(完全版)
grep 'menuentry' /boot/grub/grub.cfg
  • 找到自己想换回的内核
例如,这里我想要更换为5.8.0-50,就找到对应的选项,有
menuentry 'Ubuntu,Linux 5.8.0-50-generic' --class ubuntu 
--class gnu-linux --class gnu --class os $menuentry_id_option 
'gnulinux-5.8.0-50-generic-advanced-237310b8-5d8a-4e13-bcbd-37ef97be8341' {
    
    

这一选项,注意不是(recovery mode).

  • 复制上面信息中menuentry之后的单引号内的字符串

比如我是Ubuntu,Linux 5.8.0-50-generic

  • 修改grub

在终端中输入

sudo nano /etc/default/grub

将第一个

GRUB_DEFAULT=0

修改为刚才复制的内容

GRUB_DEFAULT = "Ubuntu,Linux 5.8.0-50-generic"

(注意要加双引号)

  • 更新grub设置

在终端中输入

sudo update-grub

如果看到有下面警告

Please don't use old title 'Ubuntu,Linux 5.8.0-50-generic' 	for GRUB_DEFAULT,
 use 'Advanced options for Ubuntu>Ubuntu,Linux 5.8.0-50-generic' 
 (for versions before 2.00) or 
 'gnulinux-advanced-237310b8-5d8a-4e13-bcbd-37ef97be8341>gnulinux-5.8.0-50-generic-
 advanced-237310b8-5d8a-4e13-bcbd-37ef97be8341' (for 2.00 or later)

则根据之前看到的grub版本,如果大于等于2.00,则把上面第三个单引号内的字符串复制粘贴.否则把第二个单引号内的字符串复制粘贴,也就是说一定要重新修改一次grub

例如我的grub版本大于2.00,则再次将之前的

GRUB_DEFAULT="Ubuntu,Linux 5.8.0-50-generic"

修改为

GRUB_DEFAULT="gnulinux-advanced-237310b8-5d8a-4e13-bcbd-
37ef97be8341>gnulinux-5.8.0-50-generic-
	 advanced-237310b8-5d8a-4e13-bcbd-37ef97be8341"`

否则修改为

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu,Linux 5.8.0-50-generic"

一定要再次修改一次GRUB_DEFAULT!!!注意看清楚是第二个单引号和第三个单引号内的内容!!!

  • 再次在终端中输入
sudo update-grub

此时不应再看到任何警告提示

  • 重新启动
sudo reboot

注意,此时grub引导时光标默认指向的应该是Ubuntu高级选项之类的选项,不要移动光标,让它自动选择启动

  • 查看是否成功
uname -r

如果已经变成你想要改的内核版本,则继续,否则检查是否忘了sudo update-grub或者grub修改错误

3.删除更新的内核
  • 查看当前的所有已安装的内核
dpkg --get-selections | grep linux-image

输出

linux-image-5.10.0-1023-oem             install
linux-image-5.4.0-42-generic			install
linux-image-5.8.0-50-generic			install
linux-image-generic-hwe-20.04			install

找到更新后的内核名字(一开始记住的内核版本信息),删除该内核

sudo apt-get remove linux-image-5.10.0-1023-oem
sudo dpkg -P linux-image-5.10.0-1023-oem

最后别忘记修改/etc/default/grub的GRUB_DEFAULT为=0,以及sudo update-grub(如果是采用第二种切换内核的方法才需要,第一种不需要)

4.禁止内核自动更新
  • 基于命令行修改配置文件

(1)输入:

sudo gedit /etc/apt/apt.conf.d/10periodic

如果要禁止自动更新配置文件设为如下:

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";
APT::Periodic::Unattended-Upgrade "0";

如果要打开自动更新配置文件设为如下:

APT::Periodic::Update-Package-Lists "2";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "0";
APT::Periodic::Unattended-Upgrade "1";

保存退出。

(2)输入:

sudo gedit /etc/apt/apt.conf.d/20auto-upgrades

如果要禁止自动更新配置文件设为如下:

APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Download-Upgradeable-Packages "0";
APT::Periodic::AutocleanInterval "0";
APT::Periodic::Unattended-Upgrade "0";

如果要打开自动更新配置文件设为如下:

APT::Periodic::Update-Package-Lists "2";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "0";
APT::Periodic::Unattended-Upgrade "1";

保存退出。

  • 打开“Software & Updates(软件和更新)

更新选项卡修改为

20221117150250

  • ubuntu默认启动了自动更新内核,为了避免出现重启系统后遇到错误进入不到系统中去,我们可以进一步关闭内核更新,使用当前内核。
sudo apt-mark hold linux-image-generic linux-headers-generic 

如果要重启启动内核更新:

sudo apt-mark unhold linux-image-generic linux-headers-generic

猜你喜欢

转载自blog.csdn.net/weixin_48319333/article/details/127904278