GPU主机常见问题——nvidia驱动失效

发布时间 2023-10-10 22:27:52作者: treasurew_wang

新开个坑,记录一些GPU主机的常见问题。

问题描述

某次开机后驱动无法使用,nvidia-smi显示无法连接nvidia驱动。
image

原因

如果没有关闭自动更新,ubuntu重启后可能切换内核,导致驱动失效。

确认问题

查看当前内核:

uname -a

查看已安装内核:

dpkg --get-selections |grep linux-image

看看是否存在多个内核且使用了最新的。

如果是双系统,可以开机的时候进入grub界面,然后进入高级选项,选择之前的内核
image

image

开机后输入nvidia-smi检查驱动是否正常,若正常则是内核问题,可以继续往下操作,其余问题不在本文范围内。

解决方法

为了方便起见,我将所有的自动更新都进行关闭

暂时解决——重装驱动

重装驱动可以暂时解决该问题。但是后续内核更新依然会导致驱动失效。

禁止ubuntu更新

vim /etc/apt/apt.conf.d/10periodic
vim /etc/apt/apt.conf.d/20auto-upgrades

10periodic文件为例,将后面所有数字改成0,20auto-upgrades同理
image

hold内核

可以hold内核,使其保持当前状态

输入以下指令查看现有内核:

dpkg --get-selections |grep linux-image

输入以下指令hold所需内核:

sudo apt-mark hold <kernel_version>

image

关闭软件包更新

Software & Update软件中,将自动更新关闭
image

切换内核

输入以下指令查看内核启动顺序:

gre gnulinx /boot/grub/grub.cfg

其中可以看到启动顺序分为menuentrysubmenu,编号分别为0和1,在编号为1的submenu下,还有4个条目,编号为0-3。
其实这个就对应着上文“确认问题”中的grub,其中0为第一个选项,1为第二个选项(ubuntu高级启动),而后面的0-3对应高级启动中的四个选项。
image

我们输入以下指令选择默认启动顺序:

vim /etc/default/grub

修改图示所示的内容。
默认该值为0,也就是默认从menuentry启动,我们需要修改它。以将其修改为从5.15.0-56-generic启动,即编号1的submenu中,编号为2的内核为例。
我们需要将该值修改为GRUB_DEFAULT="1> 2",注意>右侧有空格。
image

之后,我们需要更新grub,然后重启系统即可

sudo update-grub
sudo reboot

小问题

对于双系统来说,进入gurb时会发现从第一项启动依然会使用之前的内核,因为我们修改的只是默认启动的条目,并未修改每个条目对应的内核(博主也不知道如何修改)。但是光标默认停留在第二行的"ubuntu高级选项"处,如果我们回车点进该选项,会发现光标默认停留在选定的内核处。如下图所示:

光标默认在ubuntu高级选项处
image

点进去会发现光标默认在选中的内核处
image

因此,我们可以通过以下方式进入对应的内核:

  • 什么都不干,倒计时结束会默认从对应的内核启动
  • 摁两下回车,主动进入对应的内核
  • 如果想从第一条进入,可以删除多余内核,但是考虑到删除内核的风险,并未这么做

至此,该问题得到解决。