406 votes

Différence de version du pilote/de la bibliothèque NVIDIA NVML

Quand je cours nvidia-smi Je reçois le message suivant :

Failed to initialize NVML: Driver/library version mismatch

Il y a une heure, j'ai reçu le même message et j'ai désinstallé ma bibliothèque cuda et j'ai pu exécuter nvidia-smi en obtenant le résultat suivant :

nvidia-smi-result

Après cela, j'ai téléchargé cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64.deb de la page officielle de NVIDIA et puis simplement :

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}}

Maintenant, j'ai installé Cuda, mais j'obtiens l'erreur d'inadéquation mentionnée.


Quelques informations potentiellement utiles :

Running cat /proc/driver/nvidia/version J'ai compris :

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)

J'utilise Ubuntu 16.04.2 LTS.

La version du noyau est : 4.4.0-66-generic.

Merci !

20 votes

Vous avez probablement mélangé une installation précédente de runfile avec votre installation (actuelle) du gestionnaire de paquets (apt-get). Suivez les instructions dans le guide d'installation cuda linux pour supprimer tous les pilotes NVIDIA et les fichiers CUDA précédents, puis réinstallez après avoir nettoyé tout cela. Avant de commencer votre réinstallation, vous pouvez lire l'intégralité du guide d'installation de Linux dont j'ai donné le lien. Le conflit provient très certainement de votre tentative d'installer le paquet CUDA 8 GA2 par-dessus votre installation existante du pilote 378.13.

16 votes

@talonmies Où serait un bon endroit pour poser des questions relatives aux GPU, si ce n'est sur Stackoverflow ?

2 votes

J'utilise Ubuntu et je pense que l'erreur se produit après la mise à jour du pilote Nvidia sur Linux. Peut-être qu'une suppression automatique et un redémarrage sont nécessaires après la mise à jour du pilote Nvidia.

583voto

etal Points 2971

Surprise surprise, le redémarrage a résolu le problème (je pensais avoir déjà essayé).

La solution mentionnée par Robert Crovella dans les commentaires peut également être utile à quelqu'un d'autre, car elle est assez similaire à ce que j'ai fait pour résoudre le problème la première fois que je l'ai rencontré.

17 votes

J'étais sceptique quant au fait que cela fonctionne après un redémarrage, mais j'ai quand même fait un essai, et ça a marché ! Merci !

26 votes

@AbhishekPotnis Si vous vous demandez pourquoi le redémarrage a fonctionné, c'est peut-être à cause de ceci : vérification /var/log/apt/history.log sur Ubuntu a révélé que le système a automatiquement mis à jour libcuda, qui a vraisemblablement nécessité un redémarrage pour continuer à fonctionner correctement. J'ai depuis désactivé ces mises à jour dans l'espoir de ne plus voir ce problème.

1 votes

@john a eu le même problème, le redémarrage a fonctionné, et j'ai vérifié qu'en fait il y avait une mise à jour automatique, comme enregistré dans le fichier que vous mentionnez. merci ! pourriez-vous partager comment désactiver de telles mises à jour ? également, il pourrait être judicieux d'ajouter cette information à la réponse actuelle ou à une nouvelle réponse.

378voto

Comzyh Points 1883

Comme l'a dit @etal, le redémarrage peut résoudre ce problème, mais je pense qu'une procédure sans redémarrage sera utile.

Pour le chinois, consultez mon blog ->

Le message d'erreur

NVML : Incohérence entre la version du pilote et celle de la bibliothèque

nous indique que le module noyau du pilote Nvidia (kmod) a une mauvaise version, nous devons donc décharger ce pilote, puis charger la version correcte de kmod

Comment faire ?

Tout d'abord, nous devons savoir quels pilotes sont chargés.

lsmod | grep nvidia

vous pouvez obtenir

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

notre objectif final est de décharger nvidia nous devons donc décharger le module dépendant de nvidia

sudo rmmod nvidia_drm
sudo rmmod nvidia_modeset
sudo rmmod nvidia_uvm

alors, déchargez nvidia

sudo rmmod nvidia

Dépannage

si vous obtenez une erreur comme rmmod: ERROR: Module nvidia is in use qui indique que le module du noyau est utilisé, vous devez tuer le processus qui utilise le kmod :

sudo lsof /dev/nvidia*

et ensuite tuer ces processus, puis continuer à décharger les kmods

Test

confirmez que vous avez réussi à décharger ces kmods

lsmod | grep nvidia

vous ne devriez rien obtenir, puis confirmer que vous pouvez charger le bon pilote

nvidia-smi

vous devriez obtenir le résultat correct

3 votes

@suraj ce n'est pas seulement lié. la réponse est bien écrite. le seul problème est qu'il n'a pas divulgué son affiliation et vous l'avez fait.

1 votes

Cela fonctionne vraiment. La question est la suivante : si les mauvais éléments sont chargés au début, pourquoi nvidia-smi charge-t-il les bons ensuite ? Je veux dire, comment sait-il quels sont les bons ?

4 votes

@KiralyCraft Le mauvais n'existe plus sur le disque, mais toujours en mémoire. nvidia-smi déclenche juste une nouvelle procédure de chargement je pense.

28voto

UserOneFourTwo Points 130

J'avais donc ce problème, aucun des autres remèdes n'a fonctionné. Le message d'erreur était opaque, mais vérifier dmesg était la clé :

[   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.

Cependant, j'avais complètement supprimé la version 384, et supprimé tous les pilotes de noyau restants. nvidia-384* . Mais même après le redémarrage, j'obtenais toujours ce résultat. Cela signifiait que le noyau était toujours compilé à la référence 384, mais qu'il ne trouvait que 410. J'ai donc recompilé mon noyau :

# 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

Et puis ça a marché.

Après avoir supprimé 384, j'avais encore 384 fichiers dans : /var/lib/dkms/nvidia-XXX/XXX.YY/4.13.0-43-generic/x86_64/module /lib/modules/4.13.0-43-generic/kernel/drivers

Je recommande d'utiliser le locate (non installé par défaut) plutôt que de rechercher le système de fichiers à chaque fois.

0 votes

Merci beaucoup ! C'est une bonne idée d'utiliser locate nvidia-smi . J'ai utilisé la commande en me rendant compte qu'un autre pilote était installé.

0 votes

Sudo update-initramfs -c -k uname -r Ça ne m'a pas aidé.

0 votes

dmesg sortie : 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.

11voto

Yossarian42 Points 161

J'ai obtenu l'erreur failed to initialize NVML: Driver/Library version mismatch de mon indicateur de température nvidia-gpu. Et nvidia-smi n'a pas réussi à imprimer d'informations. J'ai essayé de trouver s'il y avait d'autres versions du pilote nvidia installé dans mon ubuntu. Mais je n'ai trouvé que nvidia-driver-390. A la fin, reboot m'a aidé à résoudre le problème.

5voto

Stefan Horning Points 131

Cela m'est également arrivé sur Ubuntu 16.04 en utilisant l'option nvidia-348 (dernière version nvidia sur Ubuntu 16.04).

Cependant, j'ai pu résoudre le problème en installant nvidia-390 à travers le Pilotes GPU propriétaires PPA .

Une solution au problème décrit sur Ubuntu 16.04 consiste donc à faire ceci :

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

Note : Ce guide suppose une installation Ubuntu propre. Si vous avez installé des pilotes précédents, un redémarrage peut être nécessaire pour recharger tous les modules du noyau.

1 votes

Ceci et un redémarrage l'ont fait pour moi !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X