执行nvidia-smi命令报Failed to initialize NVML: Driver/library version mismatch错误

分类 详情
问题描述 执行nvidia-smi命令报【Failed to initialize NVML: Driver/library version mismatch】
问题原因 系统自动升级过显卡驱动,在显卡驱动支持的系统内核版本相同的情况下,某些应用占用显卡,导致无法更新驱动的内核模块,进而无法使用
问题影响 使用显卡的应用,无法进行运算处理
排查过程

提示:在百度上查询该错误,基本上都是驱动版本和内核版本不一致导致的,并不完全准确,但排查的思路可取

这篇文章还不错:【nvidia】1.命令行方式安装nvidia显卡驱动_牛andmore牛的博客-CSDN博客_命令行安装显卡驱动

# 1.查看当前显卡当前使用的驱动版本

root@ops-01:~# cat /proc/driver/nvidia/version
NVRM version: NVIDIA UNIX x86_64 Kernel Module 470.103.01 Thu Jan 6 12:10:04 UTC 2022
GCC version: gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
结论:当前使用的是470.103.01版本的驱动

# 2.查看显卡驱动是否更新

root@ops-01:~# cat /var/log/dpkg.log | grep nvidia
2022-05-19 06:15:26 upgrade nvidia-driver-470:amd64 470.103.01-0ubuntu0.20.04.1 470.129.06-0ubuntu0.20.04.1

结论:升级驱动70.103.01到470.129.06,升级前后的内核版本都是0ubuntu0.20.04.1

# 3.查看系统的内核版本

root@ops-01:~# uname -a
Linux ops-01 5.13.0-41-generic #46~20.04.1-Ubuntu SMP Wed Apr 20 13:16:21 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

结论:系统使用的内核是20.04.1-Ubuntu,和显卡驱动支持的内核版本一致

到这里基本上就能确认上述的问题原因了。

辅助排查的命令:

# 查看系统的nvidia驱动版本

root@ops-01:~# ubuntu-drivers devices|grep nvidia-driver
WARNING:root:_pkg_get_support nvidia-driver-510-server: package has invalid Support PBheader, cannot determine support level
WARNING:root:_pkg_get_support nvidia-driver-510: package has invalid Support PBheader, cannot determine support level
driver : nvidia-driver-470 - distro non-free recommended
driver : nvidia-driver-510-server - distro non-free
driver : nvidia-driver-470-server - distro non-free
driver : nvidia-driver-510 - distro non-free

# 查看驱动的完整版本号

root@ops-01:/home/ubuntu# aptitude show nvidia-driver-470-server
软件包:nvidia-driver-470-server
版本号:470.129.06-0ubuntu0.20.04.1

# 查看驱动程序支持的内核版本

root@ops-01: dpkg --list | grep nvidia-*
ii libnvidia-cfg1-470:amd64 470.129.06-0ubuntu0.20.04.1 amd64 NVIDIA binary OpenGL/GLX configuration library
ii libnvidia-common-450 460.91.03-0ubuntu0.20.04.1 all Transitional package for libnvidia-common-460
ii libnvidia-common-460 470.129.06-0ubuntu0.20.04.1 all Transitional package for libnvidia-common-470
ii libnvidia-common-470 470.129.06-0ubuntu0.20.04.1 all Shared files used by the NVIDIA libraries

Ubuntu常用包管理命令:Ubuntu包管理工具整理 - weaming - 博客园

解决办法

方法一:查看所有使用显卡的应用,并停掉,然后再卸载内核模块,重新进行加载,比较麻烦,卸载和加载模块可参考:Failed to initialize NVML: Driver/library version mismatch.

# 1.查看哪些应用占用显卡

root@ops-01:~# fuser -v /dev/nvidia*
USER PID ACCESS COMMAND
/dev/nvidia0: root 1096 F...m Xorg
gdm 1330 F...m gnome-shell
root 5155 F...m tensorboard
root 15319 F...m python
/dev/nvidia1: root 1096 F...m Xorg
gdm 1330 F...m gnome-shell
root 5155 F...m tensorboard
root 15319 F...m python
/dev/nvidiactl: root 1096 F...m Xorg
gdm 1330 F...m gnome-shell
root 5155 F.... tensorboard
root 15319 F...m python
/dev/nvidia-modeset: root 1096 F.... Xorg
gdm 1330 F.... gnome-shell
/dev/nvidia-uvm: root 5155 F.... tensorboard
root 15319 F...m python

# 2.查看显卡的内核模块

root@ops-01:~# lsmod |grep nvidia
nvidia_uvm 1036288 2
nvidia_drm 61440 6
nvidia_modeset 1200128 5 nvidia_drm
nvidia 35336192 299 nvidia_uvm,nvidia_modeset
drm_kms_helper 253952 1 nvidia_drm
drm 557056 10 drm_kms_helper,nvidia,nvidia_drm

方法二:重启系统,简单直接

优化项

1.禁用显卡自动更新:apt-mark hold nvidia-driver-470

2.如果是显卡和内核模块不匹配,就需要先卸载当前驱动,再重新安装,重启系统,可参考:Ubuntu中Failed to initialize NVML: Driver/library version mismatch问题的解决 - 灰信网(软件开发博客聚合)

你可能感兴趣的:(ubuntu,linux,运维)