Niezgodność sterownika / biblioteki NVIDIA NVML

223

Po uruchomieniu nvidia-smipojawia się następujący komunikat:

Failed to initialize NVML: Driver/library version mismatch

Godzinę temu otrzymałem ten sam komunikat i odinstalowałem bibliotekę cuda i udało mi się uruchomić nvidia-smi, uzyskując następujący wynik:

wynik NVIDIA-Smi

Następnie pobrałem cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.debz oficjalnej strony NVIDIA, a następnie po prostu:

sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb
sudo apt-get update
sudo apt-get install cuda
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}

Teraz mam zainstalowaną Cudę, ale pojawia się wspomniany błąd niedopasowania.


Niektóre potencjalnie przydatne informacje:

Z biegiem cat /proc/driver/nvidia/versiondostaję:

NVRM version: NVIDIA UNIX x86_64 Kernel Module  378.13  Tue Feb  7 20:10:06 PST 2017
GCC version:  gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4)

Używam Ubuntu 16.04.2 LTS.

Wydanie jądra jest: 4.4.0-66-ogólne.

Dzięki!

etal
źródło
12
Prawdopodobnie pomieszałeś poprzednią instalację pliku wykonywalnego z (bieżącą) instalacją menedżera pakietów (apt-get). Postępuj zgodnie z instrukcjami w przewodniku instalacji cuda linux, aby usunąć wszystkie poprzednie sterowniki NVIDIA i pliki CUDA, a następnie zainstaluj ponownie po wyczyszczeniu. Przed rozpoczęciem ponownej instalacji możesz przeczytać całą instrukcję instalacji linuksa, którą połączyłem. Konflikt prawie na pewno wynika z próby zainstalowania pakietu CUDA 8 GA2 na podstawie istniejącej instalacji sterownika 378.13.
Robert Crovella
Głosuję za zamknięciem tego pytania, ponieważ jest to w zasadzie pytanie dotyczące instalacji (lub przerwania instalacji) sterowników GPU i niezwiązane bezpośrednio z programowaniem.
talonmies

Odpowiedzi:

333

Niespodzianka niespodzianka, ponowne uruchomienie rozwiązało problem (myślałem, że już tego próbowałem).

Rozwiązanie wymienione w komentarzach Robert Crovella może być także przydatne dla kogoś innego, ponieważ jest bardzo podobne do tego, co zrobiłem, aby rozwiązać problem za pierwszym razem.

etal
źródło
2
pamiętaj, aby wrócić za kilka dni i zaakceptować tę odpowiedź, aby pytanie to nie
znalazło
5
Byłem sceptycznie nastawiony do tej pracy po ponownym uruchomieniu, ale mimo to spróbowałem i zadziałało !! Dzięki!
Abhishek Potnis
8
@AbhishekPotnis Jeśli zastanawiasz się, dlaczego ponowne uruchomienie działało, może to być spowodowane tym: sprawdzenie /var/log/apt/history.logUbuntu ujawniło, że system automatycznie zaktualizował libcuda, co prawdopodobnie wymagało ponownego uruchomienia, aby nadal działać poprawnie. Od tego czasu wyłączyłem te aktualizacje w nadziei, że nie zobaczę ich ponownie.
Jan
1
Niestety nie jest to trwałe rozwiązanie. Problem może się ponownie pojawić. Rozwiązaniem jest instalacja nowszej wersji pakietu nvidia ( nvidia-390). Zobacz moją odpowiedź poniżej
Stefan Horning,
1
To również działało dla mnie. Niektóre instrukcje zawierają, sudo reboot nowa inne nie.
rjurney
231

Jak powiedział @etal, ponowne uruchomienie może rozwiązać ten problem, ale myślę, że procedura bez ponownego uruchomienia pomoże.

W przypadku chińskiego sprawdź mój blog -> 中文 版

Komunikat o błędzie

NVML: Niezgodność wersji sterownika / biblioteki

powiedz nam, że moduł jądra sterownika Nvidia (kmod) ma niewłaściwą wersję, więc powinniśmy zwolnić ten sterownik, a następnie załadować poprawną wersję kmod

Jak to zrobić ?

Po pierwsze powinniśmy wiedzieć, które sterowniki są załadowane.

lsmod | grep nvidia

możesz dostać

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

naszym ostatecznym celem jest rozładowanie nvidiamod, więc powinniśmy rozładować moduł zależy odnvidia

sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm

następnie rozładuj nvidia

sudo rmmod nvidia

Rozwiązywanie problemów

jeśli pojawi się błąd typu „ rmmod: ERROR: Module nvidia is in useco”, który wskazuje, że moduł jądra jest w użyciu, powinieneś zakończyć proces korzystający z kmod:

sudo lsof / dev / nvidia *

a następnie zabij te procesy, a następnie kontynuuj rozładowywanie kmods

Test

potwierdź, że pomyślnie rozładowałeś te kmody

lsmod | grep nvidia

nic nie dostaniesz, a następnie potwierdź, że możesz załadować odpowiedni sterownik

nvidia-smi

powinieneś uzyskać poprawny wynik

Comzy
źródło
3
@suraj to nie tylko link. odpowiedź jest dobrze napisana. jedynym problemem jest to, że nie ujawnił swojej przynależności, a ty to zrobiłeś.
Sagar V
2
@KiralyCraft Niewłaściwy nie istnieje już na dysku, ale nadal jest w pamięci. nvidia-smi wydaje mi się, że po prostu uruchom nową procedurę ładowania.
Comzyh
1
Znakomity! Nie miałem pojęcia, że ​​to spowodowało problem. Czy ponowne uruchomienie ma to samo?
alys
1
@alys Oczywiście ponowne uruchomienie spowoduje rozładowanie, a następnie ponowne załadowanie całego modułu.
Comzyh
1
działało, ale ponowne uruchomienie przywraca problem z powrotem .. i moja rozdzielczość też nie jest właściwa. To wcale nie jest czysta instalacja.
Kevin He
14

Miałem więc ten problem, żadne inne środki nie działały. Komunikat o błędzie był nieprzejrzysty, ale kluczem było sprawdzenie dmesg:

[   10.118255] NVRM: API mismatch: the client has the version 410.79, but
           NVRM: this kernel module has the version 384.130.  Please
           NVRM: make sure that this kernel module and all NVIDIA driver
           NVRM: components have the same version.

Jednak całkowicie usunąłem wersję 384 i usunąłem wszystkie pozostałe sterowniki jądra nvidia-384*. Ale nawet po ponownym uruchomieniu wciąż otrzymywałem ten komunikat. Widzenie tego oznaczało, że jądro wciąż było kompilowane do referencji 384, ale znajdowało tylko 410. Więc ponownie skompilowałem swoje jądro:

# uname -a # find the kernel it's using
Linux blah 4.13.0-43-generic #48~16.04.1-Ubuntu SMP Thu May 17 12:56:46 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
# update-initramfs -c -k 4.13.0-43-generic #recompile it
# reboot

A potem zadziałało.

Po usunięciu 384 nadal miałem 384 pliki w: /var/lib/dkms/nvidia-XXX/XXX.YY/4.13.0-43-generic/x86_64/module /lib/modules/4.13.0-43-generic/ jądro / sterowniki

Zalecam używanie locatepolecenia (domyślnie nie instalowane) zamiast przeszukiwania systemu plików za każdym razem.

UserOneFourTwo
źródło
Wielkie dzięki! To dobry pomysł na użycie locate nvidia-smi. Użyłem polecenia, aby dowiedzieć się, że został zainstalowany inny sterownik.
hao
sudo update-initramfs -c -k uname -rNie pomógł mi.
mrgloom
dmesgwyjście:NVRM: API mismatch: the client has the version 418.67, but NVRM: this kernel module has the version 430.26. Please NVRM: make sure that this kernel module and all NVIDIA driver NVRM: components have the same version.
mrgloom,
9

Dwie najlepsze odpowiedzi nie mogą rozwiązać mojego problemu. Znalazłem rozwiązanie na oficjalnym forum Nvidii, które rozwiązało mój problem. Poniższe informacje o błędzie mogą powodować, instalując dwie różne wersje sterownika różnymi metodami. Na przykład zainstaluj sterownik Nvidia przez apt i oficjalnego instalatora.

Nie udało się zainicjować NVML: Niezgodność wersji sterownika / biblioteki

Aby rozwiązać ten problem, wystarczy wykonać jedno z dwóch poniższych poleceń.

sudo apt-get --purge remove "*nvidia*"
sudo /usr/bin/nvidia-uninstall
zhenlingcn
źródło
bash: / usr / bin / nvidia-uninstall: Brak takiego pliku lub katalogu
Stepan Yakovenko
To działa. Czasami plik odinstalowywania nie istnieje.
Qinsheng Zhang
8

Wystąpił błąd failed to initialize NVML: Driver/Library version mismatchz mojego wskaźnika temperatury NVIDIA-GPU. I nvidia-smi nie wydrukowała żadnych informacji. Próbowałem sprawdzić, czy w moim Ubuntu są zainstalowane inne wersje sterownika NVIDIA. Ale właśnie znalazłem nvidia-driver-390. W końcu rebootpomogło mi rozwiązać problem.

Yossarian42
źródło
5

Zdarzyło mi się to również na Ubuntu 16.04 przy użyciu nvidia-348pakietu (najnowsza wersja NVIDIA na Ubuntu 16.04).

Jednak mogłem rozwiązać problem, instalując nvidia-390za pomocą zastrzeżonego PPA Drivers GPU Drivers .

Tak więc rozwiązaniem opisanego problemu w Ubuntu 16.04 jest:

  • sudo add-apt-repository ppa:graphics-drivers/ppa
  • sudo apt-get update
  • sudo apt-get install nvidia-390

Uwaga: ten przewodnik zakłada czystą instalację Ubuntu. Jeśli masz już zainstalowane sterowniki, konieczne może być ponowne uruchomienie komputera, aby ponownie załadować wszystkie moduły jądra.

Stefan Horning
źródło
1
To i ponowne uruchomienie zrobiło to dla mnie!
SaiBot,
1

Miałem też problem. (Używam Ubuntu 18.04)

Co ja zrobiłem:

dpkg -l | grep -i nvidia

Następnie sudo apt-get remove --purge nvidia-381(i każdą zduplikowaną wersję, w moim przypadku miałem 381, 384 i 387)

Następnie, sudo ubuntu-drivers devicesaby wyświetlić listę dostępnych

I wybieram sudo apt install nvidia-driver-430

Następnie nvidia-smipodał poprawne dane wyjściowe (nie trzeba restartować). Ale przypuszczam, że możesz ponownie uruchomić komputer w razie wątpliwości.

Śledziłem również tę instalację, aby ponownie zainstalować cuda + cudnn.

Benjamin Crouzier
źródło
Nie wiem, dlaczego to oznaczono (-1). Zwiększyłem to do 0. Polecenie „dpkg -l | grep -i nvidia” jest poprawne i pokazuje, co nie zostało usunięte.
gerardg
1

Ten problem wystąpił po normalnej aktualizacji jądra na komputerze CentOS. Ponieważ wszystkie sterowniki i biblioteki CUDA i nVidia zostały zainstalowane za pośrednictwem repozytoriów YUM, udało mi się rozwiązać problemy, wykonując następujące czynności:

sudo yum remove nvidia-driver-*
sudo reboot
sudo yum install nvidia-driver-cuda nvidia-modprobe
sudo modprobe nvidia # or just reboot

Sprawiło to, że moje jądro i sterownik nVidia są spójne. Uważam, że samo ponowne uruchomienie może spowodować załadowanie niewłaściwej wersji modułu jądra.

scrutari
źródło
Działa jak urok!
maks.
1

Muszę zrestartować jądra i usunąć wszystkie pakiety, które wcześniej zainstalowałem (podczas pierwszej instalacji), pamiętaj o usunięciu wszystkich pakietów, nawet po usunięciu pakietów poleceniem poniżej

sudo apt-get --purge usuń „ nvidia

pakiety takie jak „libtinfo6: i386” nie zostaną usunięte

Używam Ubuntu 20.04 i Nvidia-driver-440 do tego, że musisz usunąć wszystkie pakiety pokazane poniżej

Lista wszystkich pakietów, które należy usunąć:

img

jak pokazano na obrazku, upewnij się, że instalowany pakiet ma prawidłowy rozmiar, czyli 207 Mb dla Nvidia-driver-440, jeśli jest mniejszy, oznacza to, że nie usunąłeś wszystkich pakietów.

Gaurav Ghati
źródło
0

Ponownie zainstalowałem sterownik nvidia: uruchom następujące polecenia w roottrybie:

  1. systemctl isolate multi-user.target

  2. modprobe -r nvidia-drm

  3. Ponownie zainstaluj sterownik Nvidia: chmod +x NVIDIA-Linux-x86_64–410.57.run

  4. systemctl start graphical.target

i na koniec sprawdź nvidia-smi

Dzięki: Jak zainstalować sterowniki Nvidia i CUDA-10.0 dla procesora graficznego RTX 2080 Ti na Ubuntu-16.04 / 18.04

Jak zwolnić moduł jądra „NVIDIA-DRM”?

BarzanHayati
źródło
-1

Zaakceptowałem kontener do obrazu dokera. Następnie odtwarzam inny kontener przy użyciu tego obrazu dokera i problem zniknął.

Berat
źródło
-1

Te odpowiedzi nie działały dla mnie:

https://stackoverflow.com/a/43023000/1179925

https://stackoverflow.com/a/45319156/1179925

https://stackoverflow.com/a/54349675/1179925

dmesg

NVRM: API mismatch: the client has the version 418.67, but
NVRM: this kernel module has the version 430.26.  Please
NVRM: make sure that this kernel module and all NVIDIA driver
NVRM: components have the same version.

Odinstaluj stary sterownik 418.67i zainstaluj nowy sterownik 430.26(pobierz NVIDIA-Linux-x86_64-430.26.run):

sudo apt-get --purge remove "*nvidia*"
sudo /usr/bin/nvidia-uninstall
chmod +x NVIDIA-Linux-x86_64-430.26.run
sudo ./NVIDIA-Linux-x86_64-430.26.run
[ignore abort]

cat /proc/driver/nvidia/version

NVRM version: NVIDIA UNIX x86_64 Kernel Module  430.26  Tue Jun  4 17:40:52 CDT 2019
GCC version:  gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)
mrgloom
źródło
-1

restart. Jeśli problem nadal występuje:

sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia
nvidia-smi

za cent / rhel

cd /boot
mv initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut -vf initramfs-$(uname -r).img $(uname -r)

następnie

reboot
levinit
źródło