深度学习模型往往需要 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
2
$ nvidia-smi
Failed to initialize NVML: Driver/library version mismatch

解决方法一

因为是系统自动更新了显卡驱动,那么当重启电脑时,会自动加载最新的驱动程序,因此,重启电脑是有效解决上面问题的方法。重启命令:

1
2
3
sudo shutdown -r now
# or
sudo reboot

解决方法二

因为上面报的是驱动版本和安装的库版本不一致导致的,所以,可以先关闭现在运行中使用的旧版本的驱动,当再次使用命令 nvidia-smi 时,系统会加载最新的驱动。

首先查看系统正在使用驱动的进程

1
2
3
4
5
$ lsmod | grep nvidia
nvidia_uvm 995328 0
nvidia_drm 57344 0
nvidia_modeset 1200128 1 nvidia_drm
nvidia 35336192 2 nvidia_uvm,nvidia_modeset

然后关闭进程

然后关闭进程

1
2
3
4
5
sudo rmmod nvidia_uvm
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
# 需要注意,只有先关闭上面的进程,才能关闭下面的进程,因为上面的依赖下面的
sudo rmmod nvidia

最后测试命令是否可以使用

1
nvidia-smi

解决方法三

覆盖安装显卡驱动,方法请参考:深度学习的 GPU 环境的配置

1
2
# 只安装显卡驱动
sudo sh cuda_10.2.89_440.33.01_linux.run --silent --driver

关闭系统自动更新

虽然上面的方法能够解决问题,但当系统再次后台自动更新 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. 查看已安装驱动的版本信息

    1
    2
    3
    4
    ls /usr/src | grep nvidia

    # 我这里输出为
    nvidia-525.78.01
  2. 使用 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

参考文献

  1. 英伟达驱动自动更新导致 failed to initialize nvml driver/library version mismatch
  2. NVIDIA NVML Driver/library version mismatch 解决方案
  3. NVIDIA NVML Driver/library version mismatch 解决方案
  4. 解决Driver/library version mismatch
  5. nvidia-smi返回错误信息‘Failed to initialize NVML: Driver/library version mismatch
  6. 中级篇——ubuntu系统关闭unattended upgrades无人值守更新功能