error log
Failed to initialize NVML: Driver/library version mismatch
NVML library version: 580.126
원인 : 커널 모듈 (nvidia.ko) 와 유저스페이스 NVML 라이브러리 (libnvidia-ml.so) 의 버전이 서로 달라서 발생하는 문제
또는 커널 모듈에서 버전이 꼬인 문제.
커널 모듈에서 로드하는 파일 확인
# 현재 디스크에 존재하는 모듈 중 검색 우선순위가 가장 높은 것
modinfo nvidia 2>/dev/null | egrep -i '^(filename|version|vermagic):'
# 현재 로드되어 실제 실행중인 모듈의 버전
cat /sys/module/nvidia/version
**# 만약 위 두 명령어의 버전 결과가 다르다면 커널 모듈이 로드하는 버전과 실제 디스크에서 검색하는 모듈이 달라서 나는 오류
# 해결책) 버전을 유저스페이스 버전과 맞추면 됨.**
# 커널이 선택 가능한 모듈 후보 보기 (우선순위 오름차순 정렬)
find /usr/lib/modules/$(uname -r) -type f -name 'nvidia.ko*'
# 같은 커널 트리 안에 nvidia.ko가 여러 개인지 확인 (1개만 있는 것이 바람직함)
sudo find /lib/modules/$(uname -r) -type f -name 'nvidia.ko*' -print
유저스페이스 라이브러리 확인
# 어떤 패키지를 사용중인지
dpkg -S /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1
dpkg -l | grep -E 'nvidia-utils|libnvidia-ml'
# dpkg에서 해당 패키지의 정확한 버전 확인
dpkg -l [패키지 명칭(e.g. libnvidia-compute-580-server]
# 버전 확인
readlink -f /usr/lib/x86_64-linux-gnu/libcuda.so.1 2>/dev/null
현재 설치된 nvidia 드라이버 확인
sudo find /usr /lib /usr/local -type f -name 'libnvidia-ml.so*' -o -name 'libcuda.so*' 2>/dev/null | sort
mismatch 진단 체크리스트 스크립트
(원인을 먼저 파악, 구체적인 해결 명령어 코드들은 원인에 맞게 gpt를 활용하는 것이 더 좋음)
모든 작업을 위해 nvidia 모듈 언로드
sudo systemctl stop nvidia-persistenced || true
sudo modprobe -r nvidia_uvm nvidia_drm nvidia_modeset nvidia
sudo find /lib/modules/$(uname -r) -name 'nvidia*.ko*'
dkms status | grep nvidia || true
gpt에게 initramfs 갱신해야 하는지 물어보기.
아래의 명령어 결과, 버전이 모두 일치한다면 재부팅 후 nivida-smi 명령어가 잘 작동하는지 확인
(재부팅 안 하고도 nvidia-smi 가 잘 작동한다면 재부팅 안 해도 됨)
modinfo nvidia 2>/dev/null | egrep -i '^(filename|version|vermagic):'
cat /sys/module/nvidia/version
readlink -f /usr/lib/x86_64-linux-gnu/libcuda.so.1 2>/dev/null