오늘은 아무 생각 없이, 리눅스 서버에서 upgrade를 진행했다가 갑자기 GPU가 사용이 안 되는 현상이 벌어졌다.
`nvidia-smi`를 통해서 확인해보려했더니 아래와 같은 오류가 발생하였다.
0. 오류 발생
Failed to initialize NVML: Driver/library version mismatch
다행히 검색해보니 다른 사람들도 종종 겪는 문제였고 쉽게 해결할 수 있었다.
1. 오류 확인
우선 내 증상이 다른 사람들과 동일한지 확인하기 위하여 나도 커널 로그를 확인하였다.
sudo dmesg | grep -i nvrm
그러자 나도 아래와 같이 버전 관련 오류가 발생했다는 것을 확인하였다.
API mismatch: the client has the version 535.183.01, but
NVRM: this kernel module has the version 535.171.04. Please
NVRM: make sure that this kernel module and all NVIDIA driver
NVRM: components have the same version.
이는 리눅스의 unattended-upgrade라는 것이 패키지를 자동 업데이트하면서 발생하는 버전오류라고 한다.
해결방안에 여러가지가 있었는데 가장 먼저 제시된 것은 역시나 재부팅.
그런데 재부팅을 맘대로 하기가 그래서 우선은 다른 방법들을 먼저 시도해보고자 하였다. 아래는 내가 다른 글들을 보고 시도했던 방법이었다.
2. nvidia drive kernel 리스트 확인
lsmod | grep nvidia
위와 같이 여러개의 커널들이 로드되어 있는 것을 볼 수 있었고, 오류를 해결하려면 순서대로 unload 해줘야 한다고 했다.
순서는 `drm`->`modeset`->`uvm`->`nvidia`였다.
3. 모듈 unload
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm
sudo rmmod nvidia
한번에 되면 좋았겠지만, 모듈이 사용 중이라는 오류가 발생하였다.
이를 해결하기 위해서는 nvidia관련 프로세스를 모두 kill 해주면 된다고 했다.
아래 목록을 통해서 실행중인 nvidia 프로세스를 확인한다.
sudo lsof /dev/nvidia*
나는 위의 명령어로 확인된 모든 프로세스를 종료했음에도 계속 `rmmod`를 했을 때 모듈이 사용 중이라는 에러가 떴다.
그래서 찾아보다가 gnome display manager이라는 gui를 담당하는 것을 중지한 다음 다시 unload를 진행하니 모두 정상적으로 진행됐다.
sudo systemctl stop gdm
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm
sudo rmmod nvidia
sudo systemctl start gdm
이후 다시 `nvidia-smi`를 쳐보니 정상으로 돌아왔다~
요약
sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm
sudo rmmod nvidia
위 명령어를 순서대로 진행. 만약 오류 발생시 아래 명령어로 nvidia 관련 프로세스들을 모두 중지시킨 후 다시 시도.
sudo lsof /dev/nvidia*
kill -9 {PID}
sudo systemctl stop gdm(필요시)
정상적으로 나오는 것을 확인했으면 다시 gdm 켜주기
sudo systemctl start gdm
참조
'리눅스' 카테고리의 다른 글
terminals database is inaccessible (0) | 2024.11.07 |
---|---|
Linux google-drive mount(google-drive-ocamlfuse) (0) | 2024.10.14 |
ssh 포트 변경 (0) | 2024.09.24 |
sshfs를 이용한 다른 시스템 마운트 (0) | 2024.09.24 |
oh my zsh + powerlevel10k (0) | 2024.09.13 |