Nvidia NVML驱动程序/库版本不匹配

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

初始化NVML失败:驱动程序/库版本不匹配

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

nvidia-smi-result

之后,我从NVIDIA官方页面下载了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。

555509 次浏览

令人惊讶的是,重新启动解决了这个问题(我以为我已经尝试过了)。

评论中的解决方案Robert Crovella提到过可能对其他人也有用,因为它非常类似于我第一次遇到这个问题时所做的解决方案。

作为我说,重新引导可以解决这个问题,但我认为不重新引导的过程会有所帮助。

对于中国人,查看我的博客>中文版

错误消息

NVML:驱动程序/库版本不匹配

告诉我们Nvidia驱动内核模块(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

我们的最终目标是卸载nvidia mod,因此我们应该卸载依赖nvidia的模块:

sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm

然后卸载nvidia

sudo rmmod nvidia

故障排除

如果你得到一个类似rmmod: ERROR: Module nvidia is in use的错误,这表明内核模块正在被使用,你应该杀死使用kmod的进程:

sudo lsof /dev/nvidia*

然后终止那些进程,然后继续卸载kmods。

测试

确认您成功卸载了这些kmods

lsmod | grep nvidia

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

nvidia-smi

您应该得到正确的输出。

我在Ubuntu 16.04上使用nvidia-348包(Ubuntu 16.04上的最新Nvidia版本)时也遇到了这种情况。

然而,我可以通过安装nvidia-390来解决这个问题。

因此,在Ubuntu 16.04上解决上述问题的方法是这样做的:

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

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

我有这个问题,其他的治疗方法都不管用。错误消息是不透明的,但检查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 /模块 /lib/modules/4.13.0-43-generic /内核/驱动< / p >

我建议使用locate命令(默认没有安装),而不是每次都搜索文件系统。

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

我做了什么:

dpkg -l | grep -i nvidia

< p >然后 sudo apt-get remove --purge nvidia-381(和每个重复的版本,在我的情况下,我有381,384和387)

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

我选择sudo apt install nvidia-driver-430

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

我还遵循这个安装重新安装cuda+cudnn。

前两个答案不能解决我的问题。我在英伟达官方论坛上找到了一个解决方案。

以下错误信息可能是由于使用不同的方法安装了两个不同版本的驱动程序而导致的。例如,通过恰当的和官方安装程序安装Nvidia驱动程序。

初始化NVML失败:驱动程序/库版本不匹配

为了解决这个问题,只需要执行以下两个命令中的一个。

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

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

  1. < p > systemctl isolate multi-user.target

  2. < p > modprobe -r nvidia-drm

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

  4. < p > systemctl start graphical.target

最后检查nvidia-smi

感谢:

我在CentOS机器上进行正常内核更新后遇到了这个问题。由于所有CUDA和Nvidia驱动程序和库都是通过百胜存储库安装的,我设法使用以下步骤解决问题:

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

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

我将容器提交到码头工人映像中。然后我用这个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红帽企业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。为此,您必须删除下图所示的所有包。

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

img

如图所示,确保您正在安装的包的大小正确。Nvidia-driver-440的内存为207 MB。如果它更少,这意味着您还没有删除所有的包。

为了完整起见,我也遇到了这个问题。在我的例子中,因为我已经将Clang设置为默认编译器(使用update-alternatives),所以nvidia-driver-440编译失败(检查/var/crash/),即使apt没有发布任何警告。对我来说,解决方案是apt purge nvidia-*,将cc设置为使用gcc,重新启动,并重新安装nvidia-driver-440

大多数重启将修复Ubuntu 18.04 (Bionic Beaver)上的问题。

系统提示“初始化NVML失败:驱动程序/库版本不匹配?”错误通常意味着CUDA驱动程序仍在运行与当前使用的CUDA工具包版本不兼容的旧版本。重新启动计算节点通常可以解决此问题。

首先我安装了Nvidia驱动程序。

接下来我安装了CUDA。

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

然后它就正常工作了。

对我来说,有一个更简单的解决办法。在Fedora 33上,尝试以下操作:

rpm -qa | grep -i nvidia | grep f32

你应该从以前版本的Fedora中为OpenGL列出了两个包。删除这些并重新启动。

删除并重新安装整个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仍然工作正常。

我没有删除/清洗任何与Nvidia驱动程序相关的东西。通过运行sudo apt install nvidia-driver-440自动卸载版本460.32.03

为什么会发生版本不匹配,我们如何防止它再次发生?

你可能会发现nvidia-*的版本在这些位置是不同的:

  1. dpkg -l | grep nvidia(查看nvidia-utils-xxx包 李版),< / >
  2. cat /proc/driver/nvidia/version(查看内核的版本 模块,460.56 -例如)

重新启动应该可以工作,但是你可能想通过执行命令apt-mark hold nvidia-utils-version_number修改/etc/apt/sources.list.d/文件来禁止这个包的自动更新。

附注:一些内容的灵感来自(原始指令是中文的,所以我引用了翻译版本)

它不能为我重新启动或卸载驱动程序。 我通过更新我的Nvidia驱动程序440.33.01450.80.2来解决这个问题
sudo apt-get install nvidia-driver-450


sudo reboot

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