문제상황
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)과 일치하는 행을 검색해서 출력해줌.
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 명령어를 붙여준다.
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의 버전이 올바르게 실행되어 오류를 해결할 수 있을 것이다.
'TroubleShooting' 카테고리의 다른 글
[Installation] How to install roslib (1) | 2023.07.13 |
---|---|
[Python] scipy에서 imread가 안읽혀!!! ( ImportError: cannot import name 'imread' ) (0) | 2020.05.21 |