nvidia driver 出现 library version mismatch、couldn't communicate with the NVIDIA driver.
深度学习模型往往需要 GPU 加速计算,因此,需要为服务器安装 NVIDIA 驱动。但,因为系统(如 Ubuntu)有自动更新往往会导致 NVIDIA 驱动版本和库版本不匹配,导致 nvidia-smi 命令无法使用。本篇以 Ubuntu 系统为例,所有命令以普通用户运行,有些命令需要 sudo 权限。
问题描述
当在 Ubuntu 系统上安装了显卡驱动后,因为 Ubuntu 上的命令 /usr/bin/unattended-upgrade 会在后台自动更新系统,如安全相关的补丁内容等。有时候,会自动更新 NVIDIA 的驱动(查看自动更新历史:cat /var/log/apt/history.log)。这会导致系统运行中的 NVIDIA 驱动版本(查看方法:cat /proc/driver/nvidia/version)与安装的驱动版本(查看方法:sudo dpkg -l | grep nvidia)不一致。最终导致,查看显卡信息的命令:nvidia-smi 无法使用,报如下错误:
| 1 | $ nvidia-smi | 
解决方法一
因为是系统自动更新了显卡驱动,那么当重启电脑时,会自动加载最新的驱动程序,因此,重启电脑是有效解决上面问题的方法。重启命令:
| 1 | sudo shutdown -r now | 
解决方法二
因为上面报的是驱动版本和安装的库版本不一致导致的,所以,可以先关闭现在运行中使用的旧版本的驱动,当再次使用命令 nvidia-smi 时,系统会加载最新的驱动。
首先查看系统正在使用驱动的进程
| 1 | $ lsmod | grep nvidia | 
然后关闭进程
然后关闭进程
| 1 | sudo rmmod nvidia_uvm | 
最后测试命令是否可以使用
| 1 | nvidia-smi | 
解决方法三
覆盖安装显卡驱动,方法请参考:深度学习的 GPU 环境的配置
| 1 | # 只安装显卡驱动 | 
关闭系统自动更新
虽然上面的方法能够解决问题,但当系统再次后台自动更新 NVIDIA 驱动版本时仍然会导致同样问题发生。因此,我们可以尝试不让系统自动更新。
方法一
直接卸载自动更新程序
| 1 | sudo apt remove unattended-upgrades | 
方法二
配置不自动更新
| 1 | sudo dpkg-reconfigure unattended-upgrades | 
选择不自动更新
NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver.
重启电脑后,出现:
| 1 | NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running. | 
解决方法如下:
- 查看已安装驱动的版本信息 - 1 
 2
 3
 4- ls /usr/src | grep nvidia 
 # 我这里输出为
 nvidia-525.78.01
- 使用 DKMS 编译安装内核模块 - 1 
 2
 3
 4
 5
 6
 7- sudo apt-get install dkms 
 # 根据上面的输出 525.78.01 重新编译
 sudo dkms install -m nvidia -v 525.78.01
 # 查看是否成功
 nvidia-smi
参考文献
- 英伟达驱动自动更新导致 failed to initialize nvml driver/library version mismatch
- NVIDIA NVML Driver/library version mismatch 解决方案
- NVIDIA NVML Driver/library version mismatch 解决方案
- 解决Driver/library version mismatch
- nvidia-smi返回错误信息‘Failed to initialize NVML: Driver/library version mismatch
- 中级篇——ubuntu系统关闭unattended upgrades无人值守更新功能







