Skip to content
NVIDIA 535驱动与Linux Kernel 5.x不兼容导致的问题以及通过升级内核解决问题

最近,由于未关闭自动更新,导致NVIDIA驱动被自动升级至535.x版本,进而造成了执行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.
  • Failed to initialize NVML: Driver/library version mismatch

因此无法正常调用显卡并进行模型训练。

解决方案

Ubuntu 20.04 LTS没有官方维护的Linux Kernel 6.x内核,因此通过升级至Ubuntu 22.04 LTS的方法安装新版本的内核。

首先,升级发行版前需要确保全部软件均为最新版,按序执行如下的命令:

shell
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade

执行上述命令后需要确保全部软件包均完成了升级。我在处理该问题时发现如果apt源选择不正确的话会造成部分软件包无法升级,建议使用清华源、中科大源或者阿里源。

随后,执行Ubuntu自带的发行版升级命令,即:

shell
sudo do-release-upgrade

按照提示一步步进行即可。

完成更新后会提示需要重启,重启后使用uname -a再次查看内核版本,此时很可能自动升级至了6.x内核;如果内核仍然停留在5.x,可以按照下面的步骤升级内核:

shell
# 查找可以使用的内核版本
sudo apt search linux-image
# 安装6.x内核,这里我选择的是6.5.0-41内核
sudo apt-get install linux-headers-6.5.0-41-generic linux-image-6.5.0-41-generic linux-modules-6.5.0-41-generic linux-modules-extra-6.5.0-41-generic -y

安装完成后会自动修改grub设置以确保启动时加载正确的内核,此时建议重启系统看看内核有没有正确应用。此时,nvidia-smi命令应该可以正常执行了。

为了避免上述问题再次出现,如果可以的话可以冻结内核更新和NVIDIA驱动更新,即:

shell
# 冻结内核更新
sudo apt-mark hold linux-generic linux-image-generic linux-headers-generic
# 冻结NVIDIA驱动更新
sudo apt-mark hold nvidia-driver-535

冻结内核更新可能存在安全隐患,按需执行!

上次更新于: