Nvidia NVML Driver/library 版本不匹配

Nvidia NVML Driver/library version mismatch

当我 运行 nvidia-smi 时,我收到以下消息:

Failed to initialize NVML: Driver/library version mismatch

一个小时前,我收到了同样的消息并卸载了我的 CUDA 库,我能够 运行 nvidia-smi,得到以下结果:

之后我从 the official NVIDIA page 下载了 cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb 然后简单地:

sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}

现在我已经安装了 CUDA,但是我得到了提到的不匹配错误。


一些可能有用的信息:

运行 cat /proc/driver/nvidia/version 我得到:

NVRM version: NVIDIA UNIX x86_64 Kernel Module  378.13  Tue Feb  7 20:10:06 PST 2017
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)

我正在 运行宁 Ubuntu 16.04.2 LTS(Xenial Xerus)。

内核版本为 4.4.0-66-generic。

惊喜,重启解决了问题(我以为我已经试过了)。

评论中的解决方案 也可能对其他人有用,因为它与我第一次解决问题时所做的非常相似。

一样,重启可以解决这个问题,但我认为不重启的程序会有所帮助。

中文请查看我的博客 -> 中文版

错误信息

NVML: Driver/library version mismatch

告诉我们Nvidia驱动内核module(kmod)有一个版本错误,所以我们应该卸载这个驱动,然后加载正确版本的kmod

我们该怎么做?

首先,我们应该知道加载了哪些驱动程序。

lsmod | grep nvidia

你可能会得到

nvidia_uvm            634880  8
nvidia_drm             53248  0
nvidia_modeset        790528  1 nvidia_drm
nvidia              12312576  86 nvidia_modeset,nvidia_uvm

我们的最终目标是卸载nvidiamod,所以我们应该卸载module depend on nvidia:

sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm

然后,卸载nvidia

sudo rmmod nvidia

疑难解答

如果你得到像rmmod: ERROR: Module nvidia is in use这样的错误,这表明内核module正在使用中,你应该终止使用kmod:[=24的进程=]

sudo lsof /dev/nvidia*

然后杀掉那些进程,然后继续卸载kmods.

测试

确认您成功卸载了那些 kmods

lsmod | grep nvidia

你什么也得不到。然后确认你可以加载正确的驱动程序:

nvidia-smi

你应该得到正确的输出。

我在 Ubuntu 16.04 上使用 nvidia-348 软件包(Ubuntu 16.04 上的最新 Nvidia 版本)也发生了这种情况。

但是我可以通过 Proprietary GPU Drivers PPA 安装 nvidia-390 来解决问题。

因此 Ubuntu 16.04 上描述的问题的解决方案是这样做的:

  • sudo add-apt-repository ppa:graphics-drivers/ppa
  • sudo apt-get update
  • sudo apt-get install nvidia-390

注意:本指南假定安装是干净的 Ubuntu。如果您安装了以前的驱动程序,可能需要重新启动以重新加载所有内核模块。

我遇到了这个问题,none 其他补救措施有效。错误消息是不透明的,但检查 dmesg 的输出是关键:

[   10.118255] NVRM: API mismatch: the client has the version 410.79, but
           NVRM: this kernel module has the version 384.130.  Please
           NVRM: make sure that this kernel module and all NVIDIA driver
           NVRM: components have the same version.

然而,我已经完全删除了 384 版本,并删除了所有剩余的内核驱动程序 nvidia-384*。但即使在重新启动后,我仍然得到这个。看到这意味着内核仍然被编译为引用 384,但它只找到 410。所以我重新编译了我的内核:

uname -a # Find the kernel it's using

Linux blah 4.13.0-43-generic #48~16.04.1-Ubuntu SMP Thu May 17 12:56:46 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux


update-initramfs -c -k 4.13.0-43-generic # Recompile it
reboot

然后成功了。

删除 384 后,我仍然有 384 个文件: /var/lib/dkms/nvidia-XXX/XXX.YY/4.13.0-43-generic/x86_64/module /lib/modules/4.13.0-43-generic/kernel/drivers

我建议使用 locate 命令(默认情况下未安装)而不是每次都搜索文件系统。

我也有这个问题(我是 运行 Ubuntu 18.04(仿生海狸))。

我做了什么:

dpkg -l | grep -i nvidia

然后 sudo apt-get remove --purge nvidia-381(以及每个重复版本,在我的例子中我有 381、384 和 387)

然后 sudo ubuntu-drivers devices 列出可用的内容。

然后我选择sudo apt install nvidia-driver-430

之后,nvidia-smi给出了正确的输出(不需要重启)。但我想你可以在有疑问时重新启动。

我也跟着this installation重装了cuda+cudnn

前2个答案不能解决我的问题。我在Nvidia官方论坛上找到了一个解决方案解决了我的问题。

出现以下错误信息可能是由于安装了两个不同版本的驱动程序的方法不同所致。例如,通过APT和官方安装程序安装Nvidia驱动。

Failed to initialize NVML: Driver/library version mismatch

解决这个问题,只需要执行下面两个命令之一即可。

sudo apt-get --purge remove "*nvidia*"
sudo /usr/bin/nvidia-uninstall

我已经重新安装了 Nvidia 驱动程序:运行 这些命令在 root 模式下:

  1. systemctl isolate multi-user.target

  2. modprobe -r nvidia-drm

  3. 重新安装Nvidia驱动:chmod +x NVIDIA-Linux-x86_64–410.57.run

  4. systemctl start graphical.target

最后检查 nvidia-smi

感谢:

我在对 CentOS machine. Since all CUDA and Nvidia drivers and libraries have been installed via YUM 存储库进行正常内核更新后遇到了这个问题,我设法使用以下步骤解决了这些问题:

sudo yum remove nvidia-driver-*
sudo reboot
sudo yum install nvidia-driver-cuda nvidia-modprobe
sudo modprobe nvidia # Or just reboot

它确保了我的内核和我的 Nvidia 驱动程序是一致的。我认为只是重新启动可能会导致加载错误版本的内核模块。

我将容器提交到 Docker 图像中。然后我使用这个 Docker 图像重新创建了另一个容器,问题就消失了。

这些答案对我不起作用:

dmesg

NVRM: API mismatch: the client has the version 418.67, but
NVRM: this kernel module has the version 430.26.  Please
NVRM: make sure that this kernel module and all NVIDIA driver
NVRM: components have the same version.

卸载旧驱动程序418.67并安装新驱动程序430.26(下载NVIDIA-Linux-x86_64-430.26.run):

sudo apt-get --purge remove "*nvidia*"
sudo /usr/bin/nvidia-uninstall
chmod +x NVIDIA-Linux-x86_64-430.26.run
sudo ./NVIDIA-Linux-x86_64-430.26.run
[ignore abort]

cat /proc/driver/nvidia/version

NVRM version: NVIDIA UNIX x86_64 Kernel Module  430.26  Tue Jun  4 17:40:52 CDT 2019
GCC version:  gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)

重启。

如果问题仍然存在:

sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia
nvidia-smi

对于 CentOS and Red Hat Enterprise Linux (RHEL):

cd /boot
mv initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut -vf initramfs-$(uname -r).img $(uname -r)

然后

reboot

对于Debian/Ubuntu

update-initramfs -u

如果问题仍然存在:

apt install -y dkms && dkms install -m nvidia -v 440.82

将 440.82 更改为您的实际版本。

提示:获取Nvidia驱动版本:

ls /usr/src

你会找到Nvidia的驱动目录,比如nvidia-440.82.


此外,您可以删除所有 Nvidia 软件包并重新安装驱动程序:

apt purge nvidia*
apt purge *cuda*

# Check
apt list -i |grep nvidia
apt list -i |grep cuda

我必须重新启动我的内核并删除我之前安装的所有软件包(在第一次安装期间)。请确保删除所有包,即使在通过以下命令删除包后也是如此:

sudo apt-get --purge remove "*nvidia*"

像“libtinfo6:i386”这样的包不会被删除。

我正在使用 Ubuntu 20.04 (Focal Fossa) 和 Nvidia-driver-440。为此,您必须删除下图中显示的所有包。

需要删除的所有软件包列表:

如图所示,确保您安装的包大小正确。对于 Nvidia-driver-440,这是 207 MB。如果小于,说明你还没有删除所有的包。

为了完整起见,我 运行 也讨论了这个问题。在我的例子中,结果是因为我将 Clang 设置为我的默认编译器(使用 update-alternatives),nvidia-driver-440 无法编译(检查 /var/crash/),即使 apt 没有' t post 任何警告。对我来说,解决方案是 apt purge nvidia-*,将 cc 设置回使用 gcc,重新启动,然后重新安装 nvidia-driver-440

大多数情况下重新启动会解决 Ubuntu 18.04 (Bionic Beaver) 上的问题。

“无法初始化 NVML:Driver/library 版本不匹配?”错误通常意味着 CUDA 驱动程序仍然是 运行 与当前使用的 CUDA 工具包版本不兼容的旧版本。重新启动计算节点通常会解决此问题。

首先我安装了Nvidia驱动。

接下来我安装了CUDA。

在那之后,我得到了“Driver/library版本不匹配”错误,但是我可以看到 CUDA 版本,所以我清除了 Nvidia 驱动程序并重新安装了它。

然后它工作正常。

有一个更简单的解决方案对我有用。在 Fedora 33 上,尝试以下操作:

rpm -qa | grep -i nvidia | grep f32

OpenGL 上一版 Fedora 中应该列出了两个软件包。删除它们并重新启动。

删除并重新安装整个 Nvidia 软件包集太过分了。

我遇到了同样的问题,我在这里发布我的解决方案。

在我的例子中,NVRM 版本是 440.100,驱动程序版本是 460.32.03。我的驱动程序是在 sudo apt install caffe-cuda 更新的,当时我没有注意到,但我从 /var/log/apt/history.log.

检查了它

按照我的 NVRM 版本,我只使用了 sudo apt install nvidia-driver-440,但它安装了 450.102。我不知道为什么它安装了另一个版本并且 nvidia-smi 显示 450.102.04.

总之,重启电脑后,一切正常。重装驱动后,我的CUDA依然正常

我没有 remove/purge 任何与 Nvidia 驱动程序相关的内容。版本 460.32.03 已被 运行 sudo apt install nvidia-driver-440.

自动卸载

为什么会出现版本不匹配的情况,如何防止再次发生?

您可能会发现 nvidia-* 的版本在这些位置有所不同:

  1. dpkg -l | grep nvidia(看nvidia-utils-xxx包 版本)和
  2. cat /proc/driver/nvidia/version(看Kernel的版本 模块,460.56 - 例如)

重新启动应该可以,但您可能想通过修改 /etc/apt/sources.list.d/ 文件来禁止自动更新此软件包 只需 hold 软件包执行命令 apt-mark hold nvidia-utils-version_number.

P.S.: 部分内容受this启发(原文为中文,参考译文)

重启或卸载驱动程序对我不起作用。 我通过将我的 Nvidia 驱动程序 440.33.01 更新为 450.80.2.

解决了这个问题
sudo apt-get install nvidia-driver-450

sudo reboot

我是 运行 Ubuntu 20.04 LTS (Focal Fossa),这是一个远程服务器。