当我运行nvidia-smi时,我得到以下消息:
初始化NVML失败:驱动程序/库版本不匹配
一小时前,我收到了同样的消息,卸载了我的CUDA库,我能够运行nvidia-smi,得到以下结果:
之后,我从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。
正如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
我们的最终目标是卸载nvidia mod,所以我们应该卸载依赖于nvidia的模块:
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm
然后,卸载英伟达
sudo rmmod nvidia
故障排除
如果你得到类似rmmod: error: Module nvidia is in use这样的错误,这表明内核模块正在被使用,你应该杀死使用kmod的进程:
sudo lsof /dev/nvidia*
然后终止那些进程,然后继续卸载kmods。
Test
确认您成功卸载了这些kmods
lsmod | grep nvidia
你什么也得不到。然后确认你可以加载正确的驱动程序:
nvidia-smi
您应该得到正确的输出。
我在Ubuntu 16.04上使用Nvidia -348包(Ubuntu 16.04上的最新Nvidia版本)时也遇到了这种情况。
不过,我可以通过专有GPU驱动程序PPA安装nvidia-390来解决这个问题。
因此,在Ubuntu 16.04上解决上述问题的方法是这样做的:
Sudo add-apt-repository ppa:graphics-drivers/ppa
Sudo apt-get update
安装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 /内核/驱动程序
我建议使用locate命令(默认没有安装),而不是每次都搜索文件系统。
我也有这个问题(我正在运行Ubuntu 18.04 (Bionic Beaver))。
我做了什么:
DPKG -l | grep -i nvidia
然后
sudo apt-get remove—清除nvidia-381(和每个重复的版本,在我的情况下,我有381,384和387)
然后sudo ubuntu驱动设备列出可用的设备。
我选择sudo apt install nvidia-driver-430。
之后,nvidia-smi给出了正确的输出(不需要重新启动)。但我想你有疑问的时候可以重启。
我还按照这个安装重新安装cuda+cudnn。
前两个答案不能解决我的问题。我在英伟达官方论坛上找到了一个解决方案。
以下错误信息可能是由于使用不同的方法安装了两个不同版本的驱动程序而导致的。例如,通过APT和官方安装程序安装Nvidia驱动。
初始化NVML失败:驱动程序/库版本不匹配
为了解决这个问题,只需要执行以下两个命令中的一个。
sudo apt-get --purge remove "*nvidia*"
sudo /usr/bin/nvidia-uninstall
这些答案对我不起作用:
我的回答
Comzyh的回答
user9170的回答
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 /司机/ nvidia /版本
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和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)
Then
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。如果它更少,这意味着您还没有删除所有的包。
我也遇到过同样的问题,我把我的解决方案贴在这里。
在我的例子中,NVRM版本为440.100,驱动程序版本为460.32.03。我的驱动程序是由sudo apt install caffe-cuda更新的,当时我没有注意到,但我从/var/log/apt/history.log中检查了它。
通过遵循我的NVRM版本,我只是使用sudo apt安装nvidia-driver-440,但它安装了450.102。我不知道为什么它安装了另一个版本,nvidia-smi显示为450.102.04。
总之,重启电脑后,一切都很好了。重新安装驱动程序后,我的CUDA仍然工作正常。
我没有删除/清除任何与Nvidia驱动程序相关的东西。运行sudo apt install nvidia-driver-440自动卸载460.32.03版本。
为什么会发生版本不匹配,我们如何防止它再次发生?
您可能会发现nvidia-*的版本在这些位置是不同的:
DPKG -l | grep nvidia(查看nvidia-utils-xxx包
版),
cat /proc/driver/nvidia/version(查看内核的版本
模块,460.56 -例如)
重新启动应该可以工作,但是您可能希望通过修改/etc/apt/sources.list来禁止这个包的自动更新。D /文件或简单地通过执行apt-mark hold nvidia-utils-version_number命令保存包。
附注:一些内容是受此启发的(原始说明是中文的,所以我参考了翻译版本)