web-dev-qa-db-fra.com

Comment décharger le module du noyau 'nvidia-drm'?

J'essaie d'installer le pilote NVIDIA le plus récent dans Debian Stretch. J'ai téléchargé NVIDIA-Linux-x86_64-390.48.run de ici , mais quand j'essaye de faire

Sudo sh ./NVIDIA-Linux-x86_64-390.48.run

comme suggéré, un message d'erreur apparaît.

ERROR: An NVIDIA kernel module 'nvidia-drm' appears to already be loaded in your kernel.  This may be because it is in use (for example, by an X server, a CUDA program, or 
         the NVIDIA Persistence Daemon), but this may also happen if your kernel was configured without support for module unloading.  Please be sure to exit any programs    
         that may be using the GPU(s) before attempting to upgrade your driver.  If no GPU-based programs are running, you know that your kernel supports module unloading,   
         and you still receive this message, then an error may have occured that has corrupted an NVIDIA kernel module's usage count, for which the simplest remedy is to     
         reboot your computer.

Lorsque j'essaie de savoir qui utilise nvidia-drm (ou nvidia_drm), Je ne vois rien.

~$ Sudo lsof | grep nvidia-drm
lsof: WARNING: can't stat() Fuse.gvfsd-Fuse file system /run/user/1000/gvfs
      Output information may be incomplete.
~$ Sudo lsof -e /run/user/1000/gvfs | grep nvidia-drm
~$

Et quand j'essaye de le retirer, il dit qu'il est utilisé.

~$ Sudo modprobe -r nvidia-drm
modprobe: FATAL: Module nvidia_drm is in use.
~$ 

J'ai redémarré et commencé en mode texte uniquement (en appuyant sur Ctrl + Alt + F2 avant de donner le nom d'utilisateur/mot de passe), mais j'ai eu la même erreur.

Outre cela, comment "savoir que mon noyau prend en charge le déchargement de module"?

Je reçois quelques avertissements au démarrage liés à nvidia, je ne sais pas s'ils sont liés, cependant:

Apr 30 00:46:15 debian-9 kernel: nvidia: loading out-of-tree module taints kernel.
Apr 30 00:46:15 debian-9 kernel: nvidia: module license 'NVIDIA' taints kernel.
Apr 30 00:46:15 debian-9 kernel: Disabling lock debugging due to kernel taint
Apr 30 00:46:15 debian-9 kernel: NVRM: loading NVIDIA UNIX x86_64 Kernel Module  375.82  Wed Jul 19 21:16:49 PDT 2017 (using threaded interrupts)
35
Rodrigo

J'imagine que vous voulez arrêter le gestionnaire d'affichage, ce que je soupçonne d'utiliser les pilotes Nvidia.

Après le passage à une console texte (en appuyant sur Ctrl+Alt+F2) et en vous connectant en tant que root, utilisez la commande suivante pour désactiver la cible graphique, ce qui permet au gestionnaire d'affichage de fonctionner:

# systemctl isolate multi-user.target

À ce stade, je m'attends à ce que vous puissiez décharger les pilotes Nvidia à l'aide de modprobe -r (ou rmmod directement):

# modprobe -r nvidia-drm

Une fois que vous avez réussi à le remplacer/le mettre à niveau et que vous êtes prêt à redémarrer l'environnement graphique, vous pouvez utiliser cette commande:

# systemctl start graphical.target
37
filbranden

lsof répertorie tous les fichiers utilisés par les processus de l'espace utilisateur. Mais nvidia_drm est un module du noyau, donc lsof ne verra pas nécessairement s'il est réellement utilisé ou non. (Le fichier du module ne sera pas ouvert car le noyau l'a déjà complètement chargé dans la RAM. Mais le module peut fournir des services à l'espace utilisateur ou à d'autres composants du noyau, et que est ce qui empêche le déchargement de le module.)

Courir lsmod | grep nvidia.drm et voyez les chiffres à droite de nvidia_drm nom du module. Le premier nombre est simplement la taille du module; le second est le nombre d'utilisations. Afin de supprimer le module avec succès, le nombre d'utilisations doit d'abord être 0.

Si le serveur X11 fonctionne et utilise le pilote nvidia, alors le nvidia_drm Le module noyau sera certainement utilisé. Vous aurez donc besoin, au minimum, de basculer dans la console texte et d'arrêter le serveur X11. Habituellement, cela peut être fait en arrêtant le service X Display Manager que vous utilisez (dépend de l'environnement de bureau que vous utilisez).

Comme l'indique le message d'erreur, si vous exécutez nvidia-persistenced, vous devrez également arrêter cela avant de pouvoir décharger le nvidia_drm module.

5
telcoM

J'avais un problème similaire.

* Raison: le package nvidia.drm était en cours d'utilisation


Je l'ai corrigé en purgeant tous les packages NVIDIA.

Supprimez toutes les installations NVIDIA précédentes avec ces 2 commandes:


$ Sudo apt-get purge nvidia*
$ Sudo apt-get autoremove

Le module doit être retiré.

Redémarrez et continuez.

3
Kelly

Installation de CUDA

1) Téléchargez la dernière version CUDA Toolkit

2) Basculez vers tty3 en appuyant sur Ctl + Alt + F3

3) Déchargez nvidia-drm avant de continuer.

3a) Isoler multi-user.target

Sudo systemctl isolate multi-user.target

3b) Notez que nvidia-drm est actuellement utilisé.

lsmod | grep nvidia.drm

3c) Décharger nvidia-drm

Sudo modprobe -r nvidia-drm

4d) Notez que nvidia-drm n'est plus utilisé.

lsmod | grep nvidia.drm

5) Accédez à votre dossier de téléchargement et exécutez l'installation de cuda.

Sudo sh cuda_10.1.168_418.67_linux.run

6) Répondez à toutes les invites lors de l'installation.

7) Une fois l'installation terminée, vérifiez que la version CUDA a été mise à jour.

nvidia-smi

8) Redémarrez l'interface graphique.

Sudo systemctl start graphical.target
2
Clayton Mork

Vous signalez dans les commentaires que l'arrêt du service systemd-logind vous ramène à la connexion graphique . Si vous disposez d'une connexion graphique, X est en cours d'exécution, de sorte que le pilote vidéo est chargé et utilisé. Cela explique très probablement en partie pourquoi le module nvidia-drm est utilisé.

De plus, vous trahissez une idée fausse apparente lorsque vous dites

J'ai redémarré et commencé en mode texte uniquement (en appuyant sur Ctrl + Alt + F2 avant de donner le nom d'utilisateur/mot de passe), mais j'ai eu la même erreur.

Appuyez sur Ctrl + Alt + F2 pour basculer vers un terminal virtuel n ° 2, qui pourrait bien être configuré pour une connexion en mode texte, mais c'est loin de "démarrer en mode texte". Si vous aviez un écran de connexion graphique sur le terminal virtuel par défaut, alors X est en cours d'exécution et le passage à un autre VT ne change rien à cela. Vous vous connectez simplement à une session non X.

La première chose et la plus simple à essayer est d'arrêter le serveur X. La manière à l'ancienne de le faire serait de se connecter à votre session en mode texte et d'exécuter la commande

telinit 3

pour passer au niveau d'exécution 3. Cela devrait également fonctionner avec systemd, mais la manière native de systemd serait d'exécuter à la place

systemctl isolate multi-user.target

Les deux nécessitent des privilèges, bien sûr, vous devrez donc utiliser Sudo ou vous rendre root.

Si cela ne supprime pas le module, ou au moins vous permet de le faire manuellement, votre meilleur pari suivant serait de démarrer le système directement dans le niveau d'exécution 3 (cible multi-utilisateurs), ou peut-être même dans le niveau d'exécution 1 (cible de sauvetage). Je le fais généralement en ajoutant "3" (ou "1") à la fin de la liste des arguments du noyau au moment du démarrage via le chargeur de démarrage. Vous pouvez également modifier la cible de démarrage par défaut comme décrit dans cet article .

Notez également que le pilote nVidia est disponible dans des packages prédéfinis pour la plupart des distributions Linux. Rares sont ceux qui incluent ces packages dans leur propre référentiel standard car le pilote est, après tout, propriétaire, mais vous pouvez sûrement trouver un référentiel tiers réputé qui en dispose. Je recommande fortement d'utiliser de tels packages au lieu d'exécuter directement le programme d'installation, mais pour y arriver d'où vous êtes maintenant, vous devrez peut-être d'abord désinstaller manuellement le pilote.

2
John Bollinger

J'ai également rencontré le même problème. La raison de l'erreur est que j'ai accidentellement sélectionné "Installer le pilote nvidia" lors de l'installation de cuda.

Ainsi, lors de l'installation de CUDA, lorsque vous rencontrez les options suivantes:

Installer le pilote graphique accéléré NVIDIA pour Linux-x86_64 384.81? (y) es/(n) o/(q) uit:

Veuillez sélectionner q, le problème sera résolu.

0
JNing

J'ai résolu ce problème en désactivant l'interface graphique, en redémarrant, en ouvrant une session et en installant le pilote, en activant l'interface graphique et en redémarrant.

Veuillez vous assurer que vous connaissez votre nom d'utilisateur et votre mot de passe !!!

Ouvrez un terminal et écrivez

Sudo systemctl set-default multi-user.target
Sudo reboot 0

Maintenant, connectez-vous et vous accéderez directement à un terminal, installez le pilote Notez que j'installe ici le 440.44 vous devez donc le modifier pour votre version de pilote.

Sudo ./NVIDIA-Linux-x86_64-440.44.run

Après avoir installé le pilote, activez l'interface graphique et redémarrez:

Sudo systemctl set-default graphical.target
Sudo reboot 0

Vous devriez avoir fini

Dans mon cas, nvidia-smi a signalé la nouvelle version 440.44, dans les utilitaires de mise à jour du logiciel et des mises à jour d'Ubuntu 18.04, l'onglet Pilotes supplémentaires affiche 435 !! Un autre mystère NVIDIA, mais diable mon nouveau docker fonctionne !!!

0
Dave B

ce qui a fonctionné pour moi était de changer de système pour commencer dans le texte plus

systemctl set-default runlevel3.target

puis redémarrez et installez le pilote nvidia cuda une fois terminé, vous voudrez peut-être changer de système pour redémarrer en mode graphique

systemctl set-default runlevel5.target
0
Joaquim Muchaxo

Arrêt systemd-logind l'a corrigé pour moi:

Sudo systemctl stop systemd-logind

Ceci est suggéré comme solution de contournement dans ce problème github sur la page github nvidia-xrun:

Bonne nouvelle les gars, systemd-logind est le coupable ici. La solution de contournement actuelle consiste à exécuter la commande suivante après la déconnexion de la session "nvidia-xrun" Sudo systemctl stop systemd-logind

Ensuite, vous devrez supprimer manuellement les autres modules nvidia et éteindre le DGPU manuellement. Voici l'extrait de code qui s'exécute après votre déconnexion de la session "nvidia-xrun".

echo 'Unloading nvidia_drm module' 
execute "Sudo rmmod nvidia_drm"

echo 'Unloading nvidia_modeset module' 
execute "Sudo rmmod nvidia_modeset"

echo 'Unloading nvidia module' 
execute "Sudo rmmod nvidia"

echo 'Turning off nvidia GPU' 
execute "Sudo tee /proc/acpi/bbswitch <<<OFF"

echo -n 'Current state of nvidia GPU: ' 
execute "cat /proc/acpi/bbswitch"

Problème Systemd sur Github

Lien de référence depuis le portail Nvidia Linux Developers

0
alexdemartos

J'ai eu le même problème avec Debian Stretch lors de la tentative d'installation des pilotes Nvidia. En mode texte, ma seule solution était de supprimer le pilote, de réinstaller gdm et gnome-Shell. Je sais que c'est une solution maladroite, mais je me souviens avoir d'abord essayé de réparer le gnome-Shell et de supprimer uniquement le pilote Nvidia et de réinstaller GDM. Il s'est avéré qu'il était beaucoup plus facile de réinstaller tout le shell.

0
Vlad Skurtolov