Como descarregar o módulo do kernel 'nvidia-drm'?

29

Estou tentando instalar o driver NVIDIA mais atualizado no Debian Stretch. Eu fiz o download NVIDIA-Linux-x86_64-390.48.runa partir daqui , mas quando eu tento fazer

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

conforme sugerido, uma mensagem de erro é exibida.

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.

Quando tento descobrir quem está usando nvidia-drm(ou nvidia_drm), não vejo nada.

~$ 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
~$

E quando tento removê-lo, ele diz que está sendo usado.

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

Reiniciei e iniciei no modo somente texto (pressionando Ctrl + Alt + F2 antes de fornecer nome de usuário / senha), mas recebi o mesmo erro.

Além disso, como "sei que meu kernel suporta o descarregamento de módulos"?

Estou recebendo alguns avisos de inicialização relacionados à nvidia, mas não faço ideia se eles estão relacionados:

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
fonte
você pode tentar fazer isso no modo de recuperação?
precisa saber é o seguinte
Veja este problema no github : systemctl stop systemd-logindantes de descarregar os módulos.
GAD3R
@vfbsilva Meu modo de recuperação é estranho, está em loop para sempre, identificando todos os dispositivos USB repetidamente. Consegui pressionar Enter, fornecer a senha de root e receber um prompt, mas não há / dev, portanto, não é possível montar o disco.
Rodrigo
@ GAD3R Tudo o que tenho é systemctl stop systemd-logind.service, mas isso fecha a tela e me leva de volta ao login gráfico, onde tenho que fazer Ctrl + Alt + F2 novamente.
307 Rodrigo

Respostas:

28

Eu imagino que você queira interromper o gerenciador de exibição, que eu suspeitaria estar usando os drivers da Nvidia.

Após alterar para um console de texto (pressionando Ctrl+ Alt+ F2) e efetuar login como root, use o seguinte comando para desativar o destino gráfico, que é o que mantém o gerenciador de exibição em execução:

# systemctl isolate multi-user.target

Neste ponto, eu esperava que você pudesse descarregar os drivers da Nvidia usando modprobe -r(ou rmmoddiretamente):

# modprobe -r nvidia-drm

Depois de conseguir substituí-lo / atualizá-lo e estar pronto para iniciar o ambiente gráfico novamente, você pode usar este comando:

# systemctl start graphical.target
filbranden
fonte
Consegui desinstalá-lo (usando sua resposta) e instalar a nova versão no ponto em que não havia mais o modo gráfico em funcionamento. Eu tive que formatar o PC e reinstalar o Debian. Agora, para um conjunto completamente diferente de bugs ... Tudo isso apenas para ver "GPU" como uma opção de renderização no Blender, e ainda não o vejo. Drivers proprietários são uma merda!
726 Rodrigo
4
Isso funcionou para mim sem o modprobepasso.
Don Kirkby
11
Sim, eu também não precisei dar um modprobepasso.
David Jung
Não consigo remover a nvidia-drm, mesmo quando estiver no console de texto. Alguma idéia de como posso removê-lo à força?
addison
@addison Observe que não basta apenas estar em um console de texto, você precisa parar o X11 ou o Wayland ou o que estiver usando o driver nvidia do kernel. O objetivo do systemctl isolatecomando é fazer isso. Mas é possível que isso não esteja configurado corretamente em seu sistema ... Verifique ps -efse você consegue identificar o que pode estar usando o driver e interrompa esse processo. Isso deve permitir que você descarregue o driver.
filbranden 10/09
5

lsoflista todos os arquivos que estão em uso pelos processos do espaço do usuário. Mas nvidia_drmé um módulo do kernel, portanto lsof, não será necessário ver se ele está realmente em uso. (O arquivo do módulo não será aberto porque o kernel já o carregou completamente na RAM. Mas o módulo pode estar fornecendo serviços ao espaço do usuário ou a outros componentes do kernel, e é isso que impede o descarregamento do módulo.)

Execute lsmod | grep nvidia.drme veja os números à direita do nvidia_drmnome do módulo. O primeiro número é simplesmente o tamanho do módulo; o segundo é a contagem de uso. Para remover o módulo com sucesso, a contagem de uso deve ser 0 primeiro.

Se o servidor X11 estiver executando e usando o nvidiadriver, o nvidia_drmmódulo do kernel estará em segurança. Portanto, você precisará, no mínimo, alternar para o console de texto e desligar o servidor X11. Geralmente, isso pode ser feito interrompendo o serviço do X Display Manager que você estiver usando (depende do ambiente de área de trabalho que estiver usando).

Como dizia a mensagem de erro, se você estiver executando nvidia-persistenced, será necessário interromper também isso antes de poder descarregar o nvidia_drmmódulo.

telcoM
fonte
Depois de Ctrl + Alt + F2, lsmodestá me dizendo que há 1 processo usando nvidia_drm. Então eu fiz sudo /etc/init.d/gdm3 stop, o que foi okinterrompido. Mas ainda 1 processo em lsmod. Agora dentro do Gnome, ps aux | grep nvidiashows [irq/129-nvidia]e [nvidia]mas não nvidia-persistenced. Além disso, aqui lsmodmostra 2 processos usando nvidia_drm. Estou preso.
307 Rodrigo
3

Eu tive um problema parecido.

* Motivo: o pacote nvidia.drm estava em uso


Corrigi-o removendo todos os pacotes da NVIDIA.

Remova todas as instalações anteriores da NVIDIA com estes 2 comandos:


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

O módulo deve ser removido.

Reinicie e siga em frente.

Kelly
fonte
Obrigado! Isto pode vir a calhar se eu preciso formatá-lo de novo ...
Rodrigo
2

Você relata nos comentários que a interrupção do serviço systemd-logind leva você de volta ao logon gráfico . Se você tiver um login gráfico, o X estará sendo executado, para que o driver de vídeo esteja carregado e em uso. Isso provavelmente explica em parte por que o módulo nvidia-drm está em uso.

Além disso, você trai um aparente equívoco ao dizer

Reiniciei e iniciei no modo somente texto (pressionando Ctrl + Alt + F2 antes de fornecer nome de usuário / senha), mas recebi o mesmo erro.

Pressionar Ctrl + Alt + F2 alterna para um terminal virtual nº 2, que pode muito bem ser configurado para login no modo de texto, mas isso está muito longe de "iniciar no modo de texto". Se você tinha uma tela gráfica de login no terminal virtual padrão, o X está sendo executado e a mudança para um VT diferente não muda isso. Você está apenas efetuando login em uma sessão não-X.

A primeira e mais fácil tentativa é realmente desligar o servidor X. A maneira mais antiga de fazer isso seria fazer login na sua sessão em modo de texto e executar o comando

telinit 3

mudar para o nível de execução 3. Isso também deve funcionar com o systemd, mas a maneira nativa do systemd seria executar

systemctl isolate multi-user.target

Ambos exigem privilégios, é claro, então você precisará usar sudoou se fazer root.

Se isso não remover o módulo, ou pelo menos possibilitar que você o faça manualmente, sua próxima melhor aposta seria inicializar o sistema diretamente no nível de execução 3 (destino multiusuário) ou talvez até no nível de execução 1 (alvo de resgate). Eu costumo fazer isso adicionando "3" (ou "1") ao final da lista de argumentos do kernel no momento da inicialização, através do carregador de inicialização. Você também pode alterar o destino de inicialização padrão, conforme descrito neste artigo .

Observe também que o driver nVidia está disponível em pacotes pré-criados para a maioria das distribuições Linux. Poucos incluem esses pacotes em seus próprios repositórios padrão porque, afinal, o driver é proprietário, mas você certamente pode encontrar um repositório de terceiros respeitável que o possui. Eu recomendo usar esses pacotes em vez de executar o instalador diretamente, mas para chegar lá de onde você está agora, talvez seja necessário primeiro desinstalar manualmente o driver.

John Bollinger
fonte
Consegui desinstalá-lo (usando a resposta de Filipe) e instalei a nova versão no ponto em que não havia mais o modo gráfico em funcionamento. Eu tive que formatar o PC e reinstalar o Debian. Agora, para um conjunto completamente diferente de bugs ... Tudo isso apenas para ver "GPU" como uma opção de renderização no Blender, e ainda não o vejo. Drivers proprietários são uma merda!
1155 Rodrigo Rodrigo
@ Rodrigo, desculpe-me por ter tido uma experiência tão ruim. Mas esse tipo de problema é um exemplo do motivo pelo qual recomendo usar pacotes em vez de executar instalações manuais.
John Bollinger
Sim, eu prefiro usar pacotes. Mas eu tenho em algum lugar leitura que opção GPU no Blender não foi ativado provavelmente por causa de um driver desatualizado ...
Rodrigo
2

Instalação CUDA

1) Faça o download do último CUDA Toolkit

2) Alterne para tty3 pressionando Ctl + Alt + F3

3) Descarregue a nvidia-drm antes de continuar.

3a) Isolar multi-user.target

sudo systemctl isolate multi-user.target

3b) Observe que a nvidia-drm está atualmente em uso.

lsmod | grep nvidia.drm

3c) Descarregar nvidia-drm

sudo modprobe -r nvidia-drm

4d) Observe que a nvidia-drm não está mais em uso.

lsmod | grep nvidia.drm

5) Vá para a pasta de download e execute a instalação do cuda.

sudo sh cuda_10.1.168_418.67_linux.run

6) Responda a qualquer solicitação durante a instalação.

7) Quando a instalação terminar, confirme se a versão CUDA foi atualizada.

nvidia-smi

8) Inicie a GUI novamente.

sudo systemctl start graphical.target
Clayton Mork
fonte
0

Teve o mesmo problema com o Debian Stretch ao tentar instalar os drivers da Nvidia. Quando no mod de texto, minha única solução era remover o driver, reinstale o gdm e o gnome-shell. Eu sei que é uma solução desajeitada, mas lembro que tentei primeiro consertar o gnome-shell e apenas remover o driver da Nvidia e reinstalar o GDM. Aconteceu que era muito mais fácil reinstalar todo o shell.

Vlad Skurtolov
fonte
Acho que vou esperar por uma solução menos desajeitada, se houver alguma.
1155 Rodrigo Rodrigo
0

Eu também encontrei o mesmo problema. O motivo do erro foi que eu selecionei acidentalmente "Instalar driver da nvidia" durante a instalação do cuda.

Portanto, durante a instalação do CUDA, quando você encontrar as seguintes opções:

Instale o driver gráfico acelerado NVIDIA para Linux-x86_64 384.81? (y) es / (n) o / (q) uit:

Por favor, selecione q , o problema será resolvido.

JNing
fonte
Então o que você está dizendo? Que a única solução é reinstalar? Essa obviamente não é a única solução; outras respostas foram postadas.
Scott
0

o que funcionou para mim foi mudar o sistema para começar em texto mais

systemctl set-default runlevel3.target

em seguida, reinicie e instale o driver da nvidia cuda depois de concluído. Você pode alterar o sistema para iniciar no modo gráfico novamente

systemctl set-default runlevel5.target
Joaquim Muchaxo
fonte
0

Parando systemd-logindcorrigido para mim:

sudo systemctl stop systemd-logind

Isso é sugerido como uma solução alternativa neste problema do github na página do nvidia-xrun github:

Boas notícias pessoal, o systemd-logind é o culpado aqui. A solução atual é executar o seguinte comando depois de sair da sessão "nvidia-xrun" sudo systemctl stop systemd-logind

Em seguida, você deverá remover manualmente os outros módulos da nvidia e desligar o DGPU manualmente. Aqui está o trecho de código que é executado depois que você sai da sessão "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"

Problema com Systemd no Github

Link de referência do portal Nvidia Linux Developers

alexdemartos
fonte