[Error Solution] NVIDIA Driver/library version mismatch
TroubleShooting

[Error Solution] NVIDIA Driver/library version mismatch

문제상황

 Ubuntu 서버에서 다른 사용자들과 공동 작업을 할 때, GPU의 사용을 겹치지 않게 하기 위해서 GPU 사용 현황을 체크하려다가 에러 확인.

root@user:~$ nvidia-smi
Failed to initialize NVML: Driver/library version mismatch

 

Nvidia driver kernel module (kmod)의 버전이 잘못된 것으로 추정.

따라서, 잘못된 nvidia driver module 버전을 unload하고 맞는 버전으로 실행시켜야 함. 

* 이상적으로는 다음과 같이 확인이 가능해야 함.

 

해결방안

1. 어떤 nvidia 드라이버가 설치되어 있는지 확인

root@user: $ lsmod | grep nvidia
nvidia_uvm            987136  0
nvidia_drm             53248  12
nvidia_modeset       1228800  6 nvidia_drm
nvidia              34160640  546 nvidia_uvm,nvidia_modeset
drm_kms_helper        188416  1 nvidia_drm
drm                   491520  15 drm_kms_helper,nvidia_drm

* lsmod: load되어 있는 kernel module (kmod)들에 대한 정보를 보여줌. 

 The command outputs information for each loaded kernel module on a new line. 

* grep: 입력(lsmod)을 받은 것에서 주어진 패턴(nvidia)과 일치하는 행을 검색해서 출력해줌.

 The grep command stands for “global regular expression print”, it searches one or more input files for lines that match a given pattern and writes each matching line to standard output.

2. 확인된 nvidia module을 unload할 것임. 

root@user:~$ sudo rmmod nvidia_drm
root@user:~$ sudo rmmod nvidia_modeset
root@user:~$ sudo rmmod nvidia_uvm

* sudo: 사용자 권한 부여

* rmmod: kernel의 loadable module(nvidia module 포함)을 재부팅할 필요없이 unload 할 수 있게 해주는 명령어. 사용자의 권한이 필요하기 때문에 주로 앞에 sudo 명령어를 붙여준다. 

 Modules can be compiled as loadable modules or built into the kernel. Loadable modules can be dynamically loaded and unloaded in the running kernel on request, without the need to reboot the system. On modern Linux systems, rmmod is part of kmod, a binary that implements multiple programs used to manage Linux kernel modules. Only users with administrative privileged can remove modules. You can print a list of all modules loaded on your system with the lsmod command. The Kernel modules are stored in the /lib/modules/<kernel_version> directory.

root@user:~$ sudo rmmod nvidia

위 nvidia_drm, nvidia_modeset, nvidia_uvm 을 unload하면, nvidia를 unload할 수 있다. 

sudo rmmod nvidia를 먼저 실행시키면 에러가 발생할 수 있음.

3. 기타

root@user : $ sudo rmmod nvidia_drm
rmmod: ERROR: Module nvidia is in use

rmmod 를 실행시 위와 같은 에러가 발생한다면, nvidia와 관련된 프로세스를 확인 후 kill 하면 된다.

root@user : $ sudo lsof /dev/nvidia*
COMMAND        PID   USER   .....
Xorg         [PID]   root   ~~~~~~~~~~~~~
Xorg         [PID]   root   ~~~~~~~~~~~~~
Xorg         [PID]   root   ~~~~~~~~~~~~~
sddm=gree    [PID]   sddm   ~~~~~~~~~~~~~
sddm=gree    [PID]   sddm   ~~~~~~~~~~~~~
sddm=gree    [PID]   sddm   ~~~~~~~~~~~~~
.
.
.
root@user : $ kill -9 [PID]

sudo lsof /dev/nvidia* 로 nvidia와 관련된 프로세스를 출력해보고,  [PID] number를 확인해서

kill -9 [PID]로 그 프로세스를 강제종료한다. 

그 후, 다시 sudo rmmod nvidia_drm을 시도해본다.

* lsof: "list open files", 시스템에서 열려있는 파일에 대한 정보를 출력

 

* kill: 프로세스를 종료하는 명령어이고, -9는 강제종료 옵션이다.

4. 확인

root@user:~$ lsmod | grep nvidia

nvidia와 관련된 module을 확인해보고 아무것도 출력되지 않았으면 이제 올바른 nvidia driver 버전을 사용할 수 있게 된다.

root@user:~$ nvidia-smi

rmmod는 재부팅을 할 필요없이 unload만 진행해주었으므로 별도의 driver 설치없이 nvidia-smi 명령어를 실행시켜보면 driver의 버전이 올바르게 실행되어 오류를 해결할 수 있을 것이다.

 

참고자료