본문 바로가기

인공지능/Python

nvidia-smi ; Failed to initialize NVML: Driver/library version mismatch 에러 해결

Problem

jini1114@user1:~/git/data/mp4$ nvidia-smi
Failed to initialize NVML: Driver/library version mismatch

어제까지만해도 잘 실행되던 nvidia-smi가 갑자기 아침부터 안되기 시작했다. 뭐가 원인인지는 모르겠지만 예전에 해결해본적이 있어서 간단하게 해결한 방법을 정리하겠다.

 

Solution

nvidia 관련 모듈을 전부 지워준 뒤, nvidia-smi를 실행하면 된다.

우선 nvidia 관련 모듈을 확인해준다.

jini1114@user1:~/git/data/mp4$ lsmod | grep nvidia
nvidia_uvm            995328  0
nvidia_drm             57344  3
drm_kms_helper        188416  1 nvidia_drm
nvidia_modeset       1200128  5 nvidia_drm
nvidia              35311616  215 nvidia_uvm,nvidia_modeset
drm                   491520  7 drm_kms_helper,nvidia,nvidia_drm
i2c_nvidia_gpu         16384  0

 

여러 모듈중에 4열에 nvidia_drm과 같이 다른 모듈이름이 있는 모듈이있고, 없는 모듈이 있다.

4열에 있는 모듈이름은 현재 해당 모듈에서 사용중인 모듈로, rmmod로 삭제하려고 시도하면 다음과 같이 에러가 발생한다.

jini1114@user1:~/git/data/mp4$ sudo rmmod drm_kms_helper 
rmmod: ERROR: Module drm_kms_helper is in use by: nvidia_drm

즉, 4열에 아무것도 없는 모듈부터 차례대로 rmmod를 통해 지워나가야 한다.

지금 사용중인 서버에서는 nvidia_uvm, nvidia_drm부터 지우면된다.

jini1114@user1:~/git/data/mp4$ sudo rmmod nvidia_uvm
jini1114@user1:~/git/data/mp4$ sudo rmmod nvidia_drm
rmmod: ERROR: Module nvidia_drm is in use
jini1114@user1:~/git/data/mp4$ lsmod | grep nvidia
nvidia_drm             57344  3
drm_kms_helper        188416  1 nvidia_drm
nvidia_modeset       1200128  5 nvidia_drm
nvidia              35311616  214 nvidia_modeset
drm                   491520  7 drm_kms_helper,nvidia,nvidia_drm
i2c_nvidia_gpu         16384  0

nvidia_uvm은 성공적으로 지워졌지만, nvidia_drm은 에러가 발생해서 지워지지 않았다.

다음 커맨드를 이용해 해결한다.

  • systemctl isolate multi-user.target
  • sudo modprobe -r nvidia-drm
  • systemctl start graphical.target
jini1114@user1:~/git/data/mp4$ systemctl isolate multi-user.target
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
'multi-user.target' 서비스 유닛을 시작하려면 인증이 필요합니다.
Multiple identities can be used for authentication:
 1.  user,,, (user)
 2.  ,,, (*******)
 3.  ,,, (jini1114)
 4.  ,,, (*****)
 5.  ,,, (****)
Choose identity to authenticate as (1-5): 3
Password: 
==== AUTHENTICATION COMPLETE ===
PolicyKit daemon disconnected from the bus.
We are no longer a registered authentication agent.
PolicyKit daemon reconnected to bus.
Attempting to re-register as an authentication agent.
We are now a registered authentication agent.
jini1114@user1:~/git/data/mp4$ sudo modprobe -r nvidia-drm
jini1114@user1:~/git/data/mp4$ systemctl start graphical.target
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
'graphical.target' 서비스 유닛을 시작하려면 인증이 필요합니다.
Multiple identities can be used for authentication:
 1.  user,,, (user)
 2.  ,,, (*******)
 3.  ,,, (jini1114)
 4.  ,,, (*****)
 5.  ,,, (****)
Choose identity to authenticate as (1-5): 3
Password: 
==== AUTHENTICATION COMPLETE ===
jini1114@user1:~/git/data/mp4$ lsmod | grep nvidia
nvidia              35311616  31
drm                   491520  1 nvidia
i2c_nvidia_gpu         16384  0

 

이제 nvidia하나만 남은 것을 확인할 수 있다.

jini1114@user1:~/git/data/mp4$ sudo rmmod nvidia
rmmod: ERROR: Module nvidia is in use

근데 또 지우려고하니 에러가 발생한다.

nvidia를 사용중인 프로세스가 31개나 있어서 그렇다.

우선 lsof로 nvidia관련 프로세스를 찾은 뒤에 해당 프로세스들을 다 죽여주고, rmmod로 nvidia를 지우면 nvidia-smi가 정상 동작하는 것을 확인할 수 있다.

jini1114@user1:~/git/data/mp4$ sudo lsof /dev/nvidia*
COMMAND     PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
kubelet   23175 root   10u   CHR 195,255      0t0  506 /dev/nvidiactl
kubelet   23175 root   11u   CHR   195,0      0t0  507 /dev/nvidia0
kubelet   23175 root   14u   CHR   195,0      0t0  507 /dev/nvidia0
kubelet   23175 root   15u   CHR   195,0      0t0  507 /dev/nvidia0
nvidia-de 26660 root    3u   CHR 195,255      0t0  506 /dev/nvidiactl
nvidia-de 26660 root    5u   CHR   195,0      0t0  507 /dev/nvidia0
nvidia-de 26660 root    6u   CHR   195,0      0t0  507 /dev/nvidia0
nvidia-de 26660 root    7u   CHR   195,0      0t0  507 /dev/nvidia0
nvidia-de 26660 root   13u   CHR   195,0      0t0  507 /dev/nvidia0
jini1114@user1:~/git/data/mp4$ sudo kill -9 23175
jini1114@user1:~/git/data/mp4$ sudo kill -9 26660
jini1114@user1:~/git/data/mp4$ sudo lsof /dev/nvidia*
jini1114@user1:~/git/data/mp4$ lsmod | grep nvidia
nvidia              35311616  0
drm                   491520  1 nvidia
i2c_nvidia_gpu         16384  0
jini1114@user1:~/git/data/mp4$ sudo rmmod nvidia
jini1114@user1:~/git/data/mp4$ nvidia-smi
Thu May 19 11:14:03 2022       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.129.06   Driver Version: 470.129.06   CUDA Version: 11.4     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA TITAN RTX    Off  | 00000000:65:00.0 Off |                  N/A |
| 23%   32C    P0    55W / 280W |      0MiB / 24220MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+