当我运行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。


当前回答

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

接下来我安装了CUDA。

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

然后它就正常工作了。

其他回答

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

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

您可能会发现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命令保存包。

附注:一些内容是受此启发的(原始说明是中文的,所以我参考了翻译版本)

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

接下来我安装了CUDA。

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

然后它就正常工作了。

我在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安装干净。如果您安装了以前的驱动程序,可能需要重新启动以重新加载所有内核模块。

正如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

您应该得到正确的输出。