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

eta*_*tal 179 cuda gpu driver nvidia

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

Failed to initialize NVML: Driver/library version mismatch
Run Code Online (Sandbox Code Playgroud)

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

NVIDIA-SMI-结果

在此之后,我cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb官方的NVIDIA页面下载,然后简单地:

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}}
Run Code Online (Sandbox Code Playgroud)

现在我安装了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)
Run Code Online (Sandbox Code Playgroud)

我正在运行Ubuntu 16.04.2 LTS.

内核版本是:4.4.0-66-generic.

谢谢!

eta*_*tal 263

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

Robert Crovella在评论中提到的解决方案也可能对其他人有用,因为它与我第一次使用它时解决问题的方式非常相似.

  • @AbhishekPotnis如果你想知道为什么重启工作,可能是因为:在Ubuntu上检查`/ var/log/apt/history.log`显示系统已自动更新libcuda,这可能需要重启才能继续运行正确.我已经禁用了那些更新,希望我再也看不到它了. (8认同)
  • 重启后我对此工作持怀疑态度,但是我尝试了一下,并且工作了!谢谢! (4认同)
  • @john 有同样的问题,重新启动有效,并验证实际上有自动更新,如您提到的文件中记录的那样。谢谢!您介意分享如何禁用此类更新吗?此外,将此信息添加到当前答案或新答案中可能是有意义的。 (3认同)
  • 请记得几天后再回来接受这个答案,所以这个问题不在CUDA标签的未答复清单之列 (2认同)
  • 不幸的是,这不是一个永久的解决方案。问题可能会再次出现。解决方案是安装更新版本的 nvidia 软件包(`nvidia-390`)。看我下面的回答 (2认同)
  • 这对我也有用。有些指令包括“sudo restart now”,而另一些则不包括。 (2认同)

Com*_*zyh 202

正如@etal所说,重启可以解决这个问题,但我认为没有重启的程序会有所帮助.

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

错误消息

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
Run Code Online (Sandbox Code Playgroud)

我们的最终目标是卸载nvidiamod,所以我们应该卸载模块依赖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

你应该得到正确的输出

  • 不适合我。`sudo rmmod nvidia_drm sudo rmmod nvidia_modeset sudo rmmod nvidia_uvm sudo rmmod nvidia` `lsmod | grep nvidia` 给出空输出,但仍然存在相同的错误:`nvidia-smi 无法初始化 NVML:驱动程序/库版本不匹配` 错误 `lsmod | grep nvidia` 后出现错误 grep nvidia` 给出与开始时相同的输出。 (4认同)
  • @suraj它不只是链接.答案写得很好.唯一的问题是他没有透露他的隶属关系并且你做到了. (3认同)
  • 工作但重新启动将问题带回来..我的解决方案也不正确。这根本不是一个干净的安装.. (3认同)
  • 当没有并行使用的图形界面时,这个解决方案就像一个魅力,如果有的话,那么你需要重新启动,否则图形会话将阻塞并失败。 (3认同)
  • @KiralyCraft错误的磁盘不再存在,而是仍然存在于内存中。我认为nvidia-smi会触发一个新的加载过程。 (2认同)
  • 杰出的!不知道这是导致问题的原因。那么重新启动会做同样的事情吗? (2认同)
  • @alys 显然,重新启动将卸载然后重新加载所有模块。 (2认同)
  • 它对我也不起作用,即使在`sudo lsof /dev/nvidia*`之后我得到`rmmod:错误:模块nvidia正在使用中` (2认同)

zhe*_*gcn 19

前 2 个答案无法解决我的问题。我在 Nvidia 官方论坛上找到了解决方案解决了我的问题。以下错误信息可能是由通过不同方法安装两个不同版本的驱动程序引起的。例如,通过apt和官方安装程序安装Nvidia驱动程序。

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

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

sudo apt-get --purge remove "*nvidia*"
Run Code Online (Sandbox Code Playgroud)
sudo /usr/bin/nvidia-uninstall
Run Code Online (Sandbox Code Playgroud)

  • bash: /usr/bin/nvidia-uninstall: 没有这样的文件或目录 (3认同)
  • 我这样做了,现在我的计算机上没有安装任何 nvidia 驱动程序。必须再次重新安装 (3认同)
  • 好吧,但是然后呢?我们需要安装什么东西吗? (3认同)
  • 您可以在此之后添加要安装的命令吗 (3认同)

Lon*_*ong 13

对于那些真正想知道为什么会发生版本不匹配以及如何防止它再次发生的人。这是因为nvidia-*这些位置的版本不同:

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

重新启动应该可以工作,但您可能希望通过修改/etc/apt/sources.list.d/文件(我刚刚找到一种更简单的方法来保存包)通过执行此命令来禁止此包的自动更新apt-mark hold nvidia-utils-version_number

干杯。

P / S:有些内容被激发这个(原指令是中国人,所以我引用的翻译版本代替)

  • 谢谢你的解释。我仍然不明白为什么会发生这种情况。我从一切正常的状态开始,我不更新任何包,并且在看似随机的时间后仍然收到错误。您是否知道到底是什么原因导致了不匹配的发生? (3认同)

Oma*_*bab 11

sudo reboot
Run Code Online (Sandbox Code Playgroud)

在带有两个 NVIDIA GeForce GTX 1080 Ti 的 Ubuntu 18.04 上重新启动为我解决了这个问题。


小智 8

因此,我遇到了这个问题,其他任何补救措施均无效。错误消息是不透明的,但是检查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.
Run Code Online (Sandbox Code Playgroud)

但是,我已经完全删除了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
Run Code Online (Sandbox Code Playgroud)

然后它起作用了。

删除384之后,我仍然在以下目录中包含384个文件:/var/lib/dkms/nvidia-XXX/XXX.YY/4.13.0-43-generic/x86_64/module /lib/modules/4.13.0-43-generic/内核/驱动程序

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


Yos*_*n42 8

failed to initialize NVML: Driver/Library version mismatch从我的nvidia-gpu-温度指示器中得到了错误。而且nvidia-smi无法打印任何信息。我试图查找我的ubuntu中是否安装了其他版本的nvidia驱动程序。但是我才发现nvidia-driver-390。最后,reboot帮助我解决了问题。


Ben*_*ier 8

也有这个问题。(我正在运行 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给出正确的输出(无需重新启动)。但我想你可以在有疑问时重新启动。

我也跟着这个安装重新安装了 cuda+cudnn。

  • 我不知道为什么这个被标记下来(-1)。我将其增加到 0。命令“dpkg -l | grep -i nvidia”有效并显示未删除的内容。 (2认同)

lev*_*nit 7

重启。如果问题仍然存在:

sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia
nvidia-smi
Run Code Online (Sandbox Code Playgroud)

对于cent/rhel

cd /boot
mv initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut -vf initramfs-$(uname -r).img $(uname -r)
Run Code Online (Sandbox Code Playgroud)

然后

reboot
Run Code Online (Sandbox Code Playgroud)

对于 debian/ubuntu

sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia
nvidia-smi
Run Code Online (Sandbox Code Playgroud)

如果问题仍然存在

cd /boot
mv initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut -vf initramfs-$(uname -r).img $(uname -r)
Run Code Online (Sandbox Code Playgroud)

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

提示:获取 Nvidia 驱动程序版本:

reboot
Run Code Online (Sandbox Code Playgroud)

您会找到 Nvidia 驱动程序目录,例如 nvidia-440.82


您也可以删除所有 Nvidia pkg 并重新安装驱动程序

update-initramfs -u
Run Code Online (Sandbox Code Playgroud)

  • 这对我在 Centos 上有用。我知道为什么吗?不。 (2认同)

Dan*_*yer 6

如果您最近更新过,重新启动可能会解决此问题。


小智 6

大多数情况下重新启动可以解决Ubuntu\xc2\xa018.04 (Bionic Beaver)上的问题。

\n

\xe2\x80\x9c无法初始化 NVML:驱动程序/库版本不匹配?\xe2\x80\x9d 错误通常意味着 CUDA 驱动程序仍在运行与当前使用的 CUDA 工具包版本不兼容的旧版本。重新启动计算节点通常可以解决此问题。

\n


Ste*_*ing 5

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

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

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

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

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


mrg*_*oom 5

这些答案对我不起作用:

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.
Run Code Online (Sandbox Code Playgroud)

卸载旧驱动程序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]
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)