기타/프로그래밍

[Ubuntu]Failed to initialize NVML: Driver/library version mismatch 해결하기

코드아키택트 2021. 2. 12. 09:00
반응형

개요

 오늘은 Ubuntu안에서 Nvidia드라이버 문제를 해결하는 방법을 소개해본다. 

 

 

 

문제상황

 얼마전 연구실에서 서버에 문제가 생긴다는 문의가 들어왔다. 암것도 모르지만 서버 담당자가 된 나는 문제를 해결해야 했다. 여튼 문제 상황은 다음과 같았다. 어쨋든 문제상황은 다음과 같았다.

root@user:~# nvidia-smi
Failed to initialize NVML: Driver/library version mismatch

nvidia-smi라는 명령어는 nvidia 장비들의 상태를 확인하는 용도인 것 같다. 연구실 가이드라인에는 위 명령어를 사용하여 그래픽 카드 유휴상태를 확인하여 머신러닝을 돌리라고 되어 있었다. 하지만 안되버린걸. 위의 메세지만 떳다면 해결방법은 여러가지가 있다. 우선 구글에 소개된 방법들을 소개하고, 내가 해결했던 방법을 쓰려고한다.

 

 

 

해결방법 1: 재부팅 또는 관련 procedure종료

stackoverflow.com/questions/43022843/nvidia-nvml-driver-library-version-mismatch

 

NVIDIA NVML Driver/library version mismatch

When I run nvidia-smi I get the following message: Failed to initialize NVML: Driver/library version mismatch An hour ago I received the same message and uninstalled my cuda library and I was abl...

stackoverflow.com

때론 많은 문제들은 재부팅으로 해결 할 수 있다. 위의 사이트에선 재부팅 또는 procedure재시작으로 문제를 해결하는 방법을 소개한다. 큰 원리는 관련 프로그램들을 재실행시켜서 문제를 해결하는 것이다. 서버가 꺼지면 안된다면 procedure재시작을 하면 될 것 같다. 그 내용을 그대로 옮겨적어 보겠다.

lsmod | grep nvidia

위 명령어를 입력하면 다음과 같은 것들을 볼 수 있다. 개인 컴퓨터마다 조금씩 차이가있다. 실제 연구실 컴퓨터와 내 개인 컴퓨터에서 실행했을때 차이가 있었다.


nvidia_uvm 634880 8
nvidia_drm 53248 0
nvidia_modeset 790528 1 nvidia_drm
nvidia 12312576 86 nvidia_modeset,nvidia_uvm

 최종적으로 nvidia mode를 꺼야 하므로 nvidia와 관련된 것들을 모두 unload해주면 된다.


sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm

위부터 차레로 언로드 한후 마지막에

sudo rmmod nvidia

를 해준다.

 

만약 rmmod: ERROR: Module nvidia is in use 라는 에러 메시지가 나온다면

sudo lsof /dev/nvidia*

위의 명령어를 입력해준다.

 

모두 언로드에 성공했는지 확인해본다

lsmod | grep nvidia

위 명령어를 썼을때 아무것도 안나와야 한다. 그리고 다시 nvidia-smi를 실행해본다.

 

위의 흐름이 재부팅 방법의 큰 흐름이다.

 

 

 

해결방법2: Nvidia드라이버 삭제 및 재설치

 

문제확인:dmesg

나의 경우 dmesg 라는 명령어 입력시 다음과 같은 메세지가 나왔다.

많은 구글링 끝에 쿠다의 문제가 아니라 엔비디아 드라이버 문제라고 결론 지었다. 드라이버가 너무 오래되었다는 얘기로 해석하면 될 것 같다.

 

내가 참고했던 내용은 이것이었다

forums.developer.nvidia.com/t/nvrm-api-mismatch/39513

 

NVRM: API mismatch

I have installed CUDA7.5. Now I have driver version mismatch. When I run sudo dmesg |grep NVRM [ 9.168098] NVRM: loading NVIDIA UNIX x86_64 Kernel Module 352.41 Fri Aug 21 23:09:52 PDT 2015 [ 46.984880] NVRM: API mismatch: the client has the version 352.39

forums.developer.nvidia.com

 

 

쿠다와 드라이버의 호환성 확인해보기

 이 부분도 확인을 하는데 오래걸렸다. 즉 쿠다가 있는데, 엔비디아 드라이버는 아무거나 깔아도 상관없는가? 결론부터 이야기하면 쿠다가 필요로하는 가장 낮은 버전의 드라이버이상이라면 문제가 없다고 한다.

docs.nvidia.com/deploy/cuda-compatibility/index.html#source-compatibility

 

CUDA Compatibility :: GPU Deployment and Management Documentation

Consider a cluster of 500+ multi-GPU servers running bare-metal in support of 50-1500 users, running a variety of DL and HPC workloads. This system is scheduled in a classical manner (for example, using Slurm or LSF) with resources being allocated within a

docs.nvidia.com

구버전쿠다는 신버전 드라이버 사용가능. 신버전 쿠다가 구버전 드라이버 사용 불가

 쿠다를 업데이트하는건 조금 문제가 있다. 그 버전을 기준으로 사용하시는 분들이 있기 때문에, 추후에 사용자 별로 쿠다 버전 설정하는 방법이 있던데 적용해보고 포스팅 해봐야겠다. 

 

 

내 컴퓨터에 맞는 엔비디아 드라이버 찾기

How do I know which NVIDIA driver I need?

ubuntu-drivers devices

위의 명령어를 친다 그러면 다음과 같은 내용이 나온다.

노란색 레커맨드디.

위와 같이 여러가지 드라이버를 사용할 수 있다. 다른 명령어를 통해 자동으로 설치하게 할 수도 있지만 왠지 불안하니 나는 드라이버를 확인하고 추천드라이버를 설치하기로 했다.

 

 

기존 엔비디아 드라이버 삭제 및 설치

엔비디아 드라이버 완전삭제방법

완전 삭제내용은 위와 같고, 요약해서 쓰면 아래와 같다.

sudo apt-get remove --purge '^nvidia-.*'
sudo apt-get install ubuntu-desktop
sudo rm /etc/X11/xorg.conf
echo 'nouveau' | sudo tee -a /etc/modules

 

드라이버 설치는 아래의 커맨드를 통해 가능하다

sudo apt install nvidia-driver-(해당버전)

 예를들어 나는 460 버전을 설치하였으므로 커멘드는 sudo apt install nvidia-driver-460이 된다. 이렇게 나는 해결하긴 했다. 하나 찜찜한 구석은 완전삭제 부분에서 내 컴퓨터로 할때는 됬는데, 서버 컴퓨터에서는 뭔가 잘 안된 것 같다. 일단은 문제가 없어보이니 그대로 사용하고 문제가 생기면 그때 다시 뭔가 조취를 취해야 겠다.

 

the following packages have unmet dependencies + you have held broken packages 발생시

 이번에 다시 드라이버를 업데이트 하는 과정에서 이전 방법이 작동하지 않아 추가함.

 엔비디아를 삭제하고 sudo apt install 할때 생기는 문제였다.

 

해결법은 간단하게

sudo aptitude install <packagename>

를 사용하면 된다. 이 커맨드를 사용하면, 찌꺼기들도 알아서 삭제된 후 설치되는 것 같다.

반응형