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

29

J'essaie d'installer le pilote NVIDIA le plus récent dans Debian Stretch. Je l' ai téléchargé à NVIDIA-Linux-x86_64-390.48.runpartir de , mais lorsque je tente 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.

En plus de 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)
Rodrigo
la source
pouvez-vous essayer de le faire en mode sauvetage?
vfbsilva
Voir ce problème sur github : systemctl stop systemd-logindavant de décharger les modules.
GAD3R
@vfbsilva Mon mode de secours est étrange, il tourne en boucle pour toujours identifier tous les périphériques USB. J'ai réussi à appuyer sur Entrée, à donner le mot de passe root et à obtenir une invite, mais il n'y a pas de / dev, donc aucun montage du disque n'est possible.
Rodrigo
@ GAD3R Tout ce que j'ai est systemctl stop systemd-logind.service, mais cela ferme l'écran et me ramène à la connexion graphique, où je dois refaire Ctrl + Alt + F2.
Rodrigo

Réponses:

28

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

Après être passé à une console texte (en appuyant sur Ctrl+ Alt+ F2) et vous être connecté 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 en utilisant modprobe -r(ou rmmoddirectement):

# 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
filbranden
la source
J'ai réussi à le désinstaller (en utilisant votre réponse) et à installer la nouvelle version au point où il n'y avait plus de mode graphique fonctionnel. J'ai dû formater le PC et réinstaller Debian. Passons maintenant à un ensemble de bugs complètement différent ... Tout cela juste pour voir "GPU" comme une option de rendu dans Blender, et je ne le vois toujours pas. Les pilotes propriétaires sont nulles!
Rodrigo
4
Cela a fonctionné pour moi sans modprobeétape.
Don Kirkby
1
Ouais, je n'avais pas besoin de modprobepas non plus.
David Jung
Je ne peux pas supprimer nvidia-drm même dans la console texte. Une idée comment je peux l'enlever de force?
addison
@addison Notez qu'il ne suffit pas d' être sur une console texte, vous devez arrêter X11 ou Wayland ou tout ce qui utilise le pilote nvidia du noyau. Le but de la systemctl isolatecommande est de le faire. Mais il est possible que ce ne soit pas correctement configuré dans votre système ... Vérifiez ps -efet voyez si vous pouvez repérer ce qui pourrait utiliser le pilote, puis arrêtez ce processus. Cela devrait vous permettre de décharger le pilote.
filbranden
5

lsofrépertorie tous les fichiers utilisés par les processus de l'espace utilisateur. Mais nvidia_drmest un module du noyau, donc lsofne 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 c'est ce qui empêche le déchargement du module.)

Exécutez lsmod | grep nvidia.drmet voyez les chiffres à droite du nvidia_drmnom 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 nvidiapilote, alors le nvidia_drmmodule du 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 le message d'erreur l'a dit, si vous exécutez nvidia-persistenced, vous devrez également arrêter cela avant de pouvoir décharger le nvidia_drmmodule.

telcoM
la source
Après Ctrl + Alt + F2, lsmodme dit qu'il y a 1 processus à utiliser nvidia_drm. Alors je l'ai fait sudo /etc/init.d/gdm3 stop, ce qui est intervenu okpour l'arrêter. Mais encore 1 processus lsmod. Maintenant à l'intérieur de Gnome, des ps aux | grep nvidiaspectacles [irq/129-nvidia]et [nvidia]non nvidia-persistenced. En outre, ici lsmodmontre 2 processus utilisant nvidia_drm. Je suis coincé.
Rodrigo
3

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.

Kelly
la source
Merci! Cela peut être utile si je dois le formater à nouveau ...
Rodrigo
2

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, le pilote vidéo est donc 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 un privilège, bien sûr, vous devrez donc utiliser sudoou vous rendre root.

Si cela ne supprime pas le module, ou au moins vous permet de le faire manuellement, alors 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.

John Bollinger
la source
J'ai réussi à le désinstaller (en utilisant la réponse de Filipe) et à installer la nouvelle version au point où il n'y avait plus de mode graphique fonctionnel. J'ai dû formater le PC et réinstaller Debian. Passons maintenant à un ensemble de bugs complètement différent ... Tout cela juste pour voir "GPU" comme une option de rendu dans Blender, et je ne le vois toujours pas. Les pilotes propriétaires sont nulles!
Rodrigo
@Rodrigo, je suis désolé que vous ayez eu une si mauvaise expérience. Mais ce genre de problème est un exemple de la raison pour laquelle je recommande d'utiliser des packages au lieu d'effectuer des installations manuelles.
John Bollinger
Oui, je préfère utiliser des packages. Mais j'ai lu quelque part que l'option GPU dans Blender n'était pas activée probablement à cause d'un pilote obsolète ...
Rodrigo
2

Installation de CUDA

1) Téléchargez la dernière boîte à outils CUDA

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
Clayton Mork
la source
0

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 que j'ai 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.

Vlad Skurtolov
la source
Je suppose que j'attendrai une solution moins maladroite, le cas échéant.
Rodrigo
0

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.

JNing
la source
Alors, que dites-vous? Que la seule solution est de réinstaller? Ce n'est évidemment pas la seule solution; d'autres réponses ont été publiées.
Scott
0

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 pouvez changer le système pour redémarrer en mode graphique

systemctl set-default runlevel5.target
Joaquim Muchaxo
la source
0

L'arrêt l'a systemd-logindcorrigé 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

alexdemartos
la source