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 |
+-----------------------------------------------------------------------------+