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
4ls /usr/src | grep nvidia
# 我这里输出为
nvidia-525.78.01使用 DKMS 编译安装内核模块
1
2
3
4
5
6
7sudo 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无人值守更新功能