Linux Programmer

Failed to initialize NVML (Fedora 리눅스) 본문

컴퓨터 관련/리눅스(유닉스) 일반

Failed to initialize NVML (Fedora 리눅스)

sunyzero 2020. 11. 28. 04:08

Failed to initialize NVML: Driver/library version mismatch

nvidia 커널 모듈 드라이버와 라이브러리 버전의 미스매치 에러 해결 방법이다. 이 방법은 akmods를 사용하는 Fedora에서 작업한 것이다. 우분투는 다를 수도 있다.

 

1. nvidia 에러 메시지

Nvidia 그래픽 카드를 사용하는 페도라 리눅스에서 nvidia-smi 실행시 "Failed to initialize NVML: Driver/library version mismatch" 메시지와 함께 에러가 발생하는 경우가 있다.

# nvidia-smi
Failed to initialize NVML: Driver/library version mismatch

이런 경우에 journalctl -xe로 로그를 보면 다음과 같이 에러를 볼 수 있다.

-- The unit UNIT has successfully entered the 'dead' state.
Nov 27 23:38:27 localhost.localdomain kernel: NVRM: API mismatch: the client has the version 455.38, but
                                                NVRM: this kernel module has the version 455.28.  Please
                                                NVRM: make sure that this kernel module and all NVIDIA driver
                                                NVRM: components have the same version.

메시지를 보면 클라이언트는 455.38 버전인데, 커널 모듈은 455.28 이라서 미스매치가 일어난 것이다.
이 시스템은 Fedora인데 akmods로 인해서 커널 모듈이 자동으로 올라가므로 재부팅을 하면 되지만, 재부팅하기 싫으니까 모듈만 다시 올리는 방법을 적어두겠다. 페도라에서 nvidia 드라이버 올리는 방법은 [https://sunyzero.tistory.com/218] 에 있다.

 

2. 텍스트 모드로 전환

커널 모듈을 제거하기 전에 X window를 닫아야 한다. 안전하게 그래픽 화면을 로그아웃 하자. (대개 우측 상단에 로그아웃 메뉴가 있다)

로그아웃 뒤에 CTRL-ALT-F3 정도를 눌러서 tty3 콘솔로 이동하자. 콘솔에 root 관리자로 로그인하자.
로그인 완료 후, 아래 명령어로 X window 서버를 종료시키자.
(참고로 이 작업은 콘솔이 아니라 아예 다른 컴퓨터에서 ssh 접속해서 해도 된다.)

# systemctl isolate multi-user

 

3. 구버전의 nvidia kernel module 제거

lsmod로 nvidia 모듈을 확인한다. nvidia_drm, nvidia_modeset ...등등의 목록이 보일것이다.

# lsmod | grep nvidia
nvidia_drm             57344  0
nvidia_modeset       1216512  1 nvidia_drm
nvidia_uvm           1138688  0
nvidia              27705344  2 nvidia_uvm,nvidia_modeset
drm_kms_helper        262144  1 nvidia_drm
drm                   626688  3 drm_kms_helper,nvidia_drm

rmmod로 각각의 모듈을 제거한다.

# rmmod nvidia_drm
# rmmod nvidia_modeset
# rmmod nvidia_uvm
# rmmod nvidia

제거가 완료되었는지 확인하기 위해 lsmod | grep nvidia를 다시 명령해본다. 아무것도 안나오면 성공이다.

 

4. nvidia akmods 리빌드

akmods unit을 재실행한다.

# systemctl restart akmods

akmods 유닛이 잘 실행 되었는지 systemctl status akmods 로 확인해보자.

# systemctl status akmods
● akmods.service - Builds and install new kmods from akmod packages
     Loaded: loaded (/usr/lib/systemd/system/akmods.service; enabled; vendor preset: enabled)
     Active: active (exited) since Fri 2020-11-27 23:40:02 KST; 13sec ago
    Process: 1733155 ExecStart=/usr/sbin/akmods --from-init (code=exited, status=0/SUCCESS)
   Main PID: 1733155 (code=exited, status=0/SUCCESS)

Nov 27 23:40:02 localhost.localdomain systemd[1]: Starting Builds and install new kmods from akmod packages...
Nov 27 23:40:02 localhost.localdomain akmods[1733155]: [60B blob data]
Nov 27 23:40:02 localhost.localdomain systemd[1]: Finished Builds and install new kmods from akmod packages.

active (exited)로 표시되면 OK다.

 

5. 그래피컬 모드로 전환

graphical.target으로 전환하기 위해 아래 명령을 내린다.

# systemctl isolate graphical

이제 다시 nvidia-smi를 명령해보자.

# nvidia-smi
Fir Nov 27 23:42:35 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 455.38       Driver Version: 455.38       CUDA Version: 11.1     |
|-------------------------------+----------------------+----------------------+
| 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  GeForce RTX 3090    Off  | 00000000:65:00.0 Off |                  N/A |
| 37%   32C    P0    31W / 350W |      0MiB / 24259MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

nvidia-smi결과를 보면 Driver version이 455.38로 잘 맞춰졌다.

반응형
Comments