커널 모듈 'nvidia-drm'을 언로드하는 방법은 무엇입니까?


28

데비안 스트레치에 최신 NVIDIA 드라이버를 설치하려고합니다. 나는 다운로드 한 NVIDIA-Linux-x86_64-390.48.run에서 여기에 ,하지만 난 할 때

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

제안 된대로 오류 메시지가 나타납니다.

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.

누가 nvidia-drm(또는 nvidia_drm)을 사용하는지 알아 내려고하면 아무것도 보이지 않습니다.

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

그리고 그것을 제거하려고하면 사용 중이라고 말합니다.

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

사용자 이름 / 암호를 제공하기 전에 Ctrl + Alt + F2를 눌러 텍스트 전용 모드로 재부팅하고 시작했지만 동일한 오류가 발생했습니다.

게다가 "커널이 모듈 언로드를 지원한다는 것을 어떻게 알 수 있습니까?"

nvidia와 관련된 부팅시 몇 가지 경고가 표시되지만 관련이 있는지는 모르겠습니다.

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)

당신은 구조 모드에서 그것을 시도 할 수 있습니까?
vfbsilva

이 참조 GitHub의에서 문제를 : systemctl stop systemd-logind모듈을 언로드하기 전에.
GAD3R

@vfbsilva 내 구조 모드가 이상합니다. 계속 반복되어 모든 USB 장치를 반복해서 식별합니다. Enter 키를 누르고 루트 암호를 입력하고 프롬프트를 표시했지만 / dev가 없으므로 디스크를 마운트 할 수 없습니다.
로드리고

@ GAD3R 내가 가진 것은 systemctl stop systemd-logind.service이지만 화면을 닫고 다시 그래픽 로그인으로 돌아가서 Ctrl + Alt + F2를 다시 수행해야합니다.
로드리고

답변:


27

Nvidia 드라이버를 사용하고 있다고 생각되는 디스플레이 관리자를 중지하고 싶다고 생각합니다.

텍스트 콘솔로 변경하고 ( Ctrl+ Alt+를 누름 F2) 루트로 로그인 한 후 다음 명령을 사용하여 그래픽 대상을 비활성화하십시오. 디스플레이 관리자가 계속 실행됩니다.

# systemctl isolate multi-user.target

이 시점에서, 당신이 사용하는 엔비디아 드라이버를 언로드 할 수있을 거라고 기대 modprobe -r(또는 rmmod직접) :

# modprobe -r nvidia-drm

교체 / 업그레이드를 완료하고 그래픽 환경을 다시 시작할 준비가되면 다음 명령을 사용할 수 있습니다.

# systemctl start graphical.target

답변을 사용하여 제거하고 더 이상 작동하는 그래픽 모드가없는 지점에 새 버전을 설치했습니다. PC를 포맷하고 데비안을 다시 설치해야했습니다. 이제 완전히 다른 버그 세트가 있습니다 ... 블렌더에서 렌더링 옵션으로 "GPU"를보기 만하면 여전히 보이지 않습니다. 독점 운전자가 짜증나!
로드리고

4
이것은 modprobe단계 없이 나를 위해 일했습니다 .
돈 커크비

1
그래, 나도 modprobe단계 가 필요 하지 않았다.
David Jung

텍스트 콘솔에서도 nvidia-drm을 제거 할 수 없습니다. 어떻게 강제로 제거 할 수 있습니까?
애디슨

@addison 텍스트 콘솔 만 있으면 충분하지 않습니다. X11 또는 Wayland 또는 커널에서 nvidia 드라이버를 사용하는 모든 것을 중지해야합니다. systemctl isolate명령 의 핵심은 그렇게하는 것입니다. 그러나 시스템에서 올바르게 구성되지 않았을 가능성이 있습니다 ... ps -ef드라이버를 사용하고있는 것을 확인한 후 프로세스를 중지했는지 확인 하십시오. 그러면 드라이버를 언로드 할 수 있습니다.
filbranden

5

lsof사용자 공간 프로세스에서 사용중인 파일을 나열합니다. 그러나 nvidia_drm커널 모듈이므로 lsof실제로 사용 중인지 여부를 반드시 알 필요는 없습니다. (커널이 완전히 RAM으로로드 이미했기 때문에 모듈 파일을 열 수 없습니다. 그러나 모듈은 사용자 공간 또는 다른 커널 구성 요소에 서비스를 제공 할 수 있으며 모듈의 언 로딩을 방지 할 것입니다.)

실행 lsmod | grep nvidia.drm하고 nvidia_drm모듈 이름 오른쪽에있는 숫자를보십시오 . 첫 번째 숫자는 단순히 모듈의 크기입니다. 두 번째는 사용 횟수입니다. 모듈을 성공적으로 제거하려면 먼저 사용 횟수가 0이어야합니다.

X11 서버가 실행 중이고 nvidia드라이버를 사용하는 경우 nvidia_drm커널 모듈이 가장 확실하게 사용됩니다. 따라서 최소한 텍스트 콘솔로 전환하고 X11 서버를 종료해야합니다. 일반적으로 사용중인 X Display Manager 서비스를 중지하면됩니다 (사용중인 데스크톱 환경에 따라 다름).

오류 메시지가 말했듯 nvidia-persistenced이을 실행하는 경우 nvidia_drm모듈을 언로드하기 전에 중지해야 합니다.


Ctrl + Alt + F2 후를 lsmod사용하여 1 개의 프로세스가 있다고 알려줍니다 nvidia_drm. 내가 한 그래서 sudo /etc/init.d/gdm3 stop, 다녀 ok을 중지합니다. 그러나 여전히 1 개의 프로세스가 lsmod있습니다. 이제 그놈, 내부 ps aux | grep nvidia[irq/129-nvidia][nvidia]있지만 nvidia-persistenced. 또한을 lsmod사용하는 두 가지 프로세스가 nvidia_drm있습니다. 나는 붙어있다.
로드리고

3

나는 비슷한 문제가 있었다.

* 이유 : nvidia.drm 패키지가 사용 중입니다


모든 NVIDIA 패키지를 제거하여 수정했습니다.

다음 두 명령으로 이전 NVIDIA 설치를 모두 제거하십시오.


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

모듈을 제거해야합니다.

재부팅하고 진행하십시오.


고맙습니다! 다시 포맷해야 할 경우 유용 할 수 있습니다 ...
Rodrigo

2

systemd-logind 서비스를 중지하면 그래픽 로그인으로 되돌아갑니다 . 그래픽 로그인이있는 경우 X가 실행 중이므로 비디오 드라이버가로드되어 사용 중입니다. 이것은 nvidia-drm 모듈이 왜 사용되는지 부분적으로 설명합니다.

또한 말할 때 명백한 오해를 배신합니다

사용자 이름 / 암호를 제공하기 전에 Ctrl + Alt + F2를 눌러 텍스트 전용 모드로 재부팅하고 시작했지만 동일한 오류가 발생했습니다.

Ctrl + Alt + F2를 누르면 가상 터미널 # 2로 전환되며 텍스트 모드 로그인을 위해 구성 될 수 있지만 "텍스트 모드에서 시작"과는 거리가 멀다. 기본 가상 터미널에 그래픽 로그인 화면이있는 경우 X가 실행 중이며 다른 VT로 전환해도 변경되지 않습니다. X가 아닌 세션에 로그인하고 있습니다.

가장 먼저 시도해야 할 것은 실제로 X 서버를 종료하는 것입니다. 구식 방법은 텍스트 모드 세션에 로그인하여 명령을 실행하는 것입니다.

telinit 3

실행 수준 3으로 전환하려면 systemd에서도 작동해야하지만 기본 systemd 방식은 대신 실행하는 것입니다.

systemctl isolate multi-user.target

물론 둘 다 특권이 필요하기 sudo때문에 자신 을 사용 하거나 근본이되어야합니다.

이렇게해도 모듈이 제거되지 않거나 최소한 수동으로 수행 할 수있게되면 다음 단계는 시스템을 런레벨 3 (다중 사용자 대상) 또는 심지어 런레벨 1로 직접 부팅하는 것입니다. (구조 대상). 부팅 할 때 부트 로더를 통해 커널 인수 목록의 끝에 "3"(또는 "1")을 추가하여이 작업을 수행합니다. 이 기사 에서 설명한대로 기본 부팅 대상을 변경할 수도 있습니다 .

nVidia 드라이버는 대부분의 Linux 배포판을 위해 사전 구축 된 패키지로 제공됩니다. 드라이버가 독점 소유이기 때문에 해당 패키지를 자체 표준 저장소에 포함하는 사람은 거의 없지만 신뢰할 수있는 타사 저장소를 찾을 수 있습니다. 설치 프로그램을 직접 실행하는 대신 이러한 패키지를 사용하는 것이 좋습니다. 그러나 현재 위치에서 설치하려면 먼저 드라이버를 수동으로 제거해야합니다.


필립스의 답변을 사용하여 제거하고 더 이상 작동하는 그래픽 모드가없는 지점에 새 버전을 설치했습니다. PC를 포맷하고 데비안을 다시 설치해야했습니다. 이제 완전히 다른 버그 세트가 있습니다 ... 블렌더에서 렌더링 옵션으로 "GPU"를보기 만하면 여전히 보이지 않습니다. 독점 운전자가 짜증나!
로드리고

@Rodrigo, 당신이 그런 나쁜 경험을해서 죄송합니다. 그러나 이러한 종류의 문제는 수동 설치 대신 패키지 사용을 권장하는 이유의 예입니다.
존 볼린저

예, 패키지를 선호합니다. 그러나 블렌더의 GPU 옵션이 구식 드라이버로 인해 활성화되지 않은 곳을 읽었습니다.
Rodrigo

2

CUDA 설치

1) 최신 CUDA 툴킷 다운로드

2) Ctl + Alt + F3을 눌러 tty3으로 전환

3) 진행하기 전에 nvidia-drm을 언로드하십시오.

3a) 다중 사용자 대상 분리

sudo systemctl isolate multi-user.target

3b) nvidia-drm이 현재 사용 중입니다.

lsmod | grep nvidia.drm

3c) nvidia-drm 언로드

sudo modprobe -r nvidia-drm

4d) nvidia-drm은 더 이상 사용되지 않습니다.

lsmod | grep nvidia.drm

5) 다운로드 폴더로 가서 cuda 설치를 실행하십시오.

sudo sh cuda_10.1.168_418.67_linux.run

6) 설치 중에 프롬프트에 응답하십시오.

7) 설치가 완료되면 CUDA 버전이 업데이트되었는지 확인하십시오.

nvidia-smi

8) GUI를 다시 시작하십시오.

sudo systemctl start graphical.target

0

Nvidia 드라이버를 설치할 때 데비안 스트레치와 동일한 문제가 발생했습니다. 텍스트 모드에서 유일한 해결책은 드라이버를 제거하고 gdm 및 gnome-shell을 다시 설치하는 것입니다. 나는 그것이 서투른 해결책이라는 것을 알고 있지만, 먼저 gnome-shell을 수정하고 Nvidia 드라이버 만 제거하고 GDM을 다시 설치하려고 시도한 것을 기억합니다. 전체 쉘을 다시 설치하는 것이 훨씬 쉽다는 것이 밝혀졌습니다.


어색한 해결책이 나올 때까지 기다릴 것입니다.
로드리고

0

나는 또한 같은 문제에 직면했다. 오류의 원인은 cuda 설치 중에 실수로 "Nvidia 드라이버 설치"를 선택했기 때문입니다.

따라서 CUDA 설치 중에 다음 옵션이 표시 될 때

Linux-x86_64 용 NVIDIA 가속 그래픽 드라이버 384.81을 설치 하시겠습니까? (y) es / (n) o / (q) uit :

q를 선택 하면 문제가 해결됩니다.


무슨 소리 야? 유일한 해결책은 다시 설치하는 것입니까? 분명히 유일한 해결책은 아닙니다. 다른 답변이 게시되었습니다.
스캇

0

나를 위해 일한 것은 텍스트로 시작하도록 시스템을 변경하는 것이 었습니다.

systemctl set-default runlevel3.target

그런 다음 다시 시작하고 nvidia cuda 드라이버를 설치하면 그래픽 모드에서 다시 시작하도록 시스템을 변경할 수 있습니다

systemctl set-default runlevel5.target

0

systemd-logind나를 위해 고정을 중지 :

sudo systemctl stop systemd-logind

이것은 nvidia-xrun github 페이지 의이 github 문제 의 해결 방법으로 제안됩니다 .

좋은 소식은, systemd-logind가 범인입니다. 현재 해결 방법은 "nvidia-xrun"세션에서 로그 아웃 한 후 다음 명령을 실행하는 것입니다. sudo systemctl stop systemd-logind

그런 다음 다른 nvidia 모듈을 수동으로 제거하고 DGPU를 수동으로 끕니다. 다음은 "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"

Github의 시스템 문제

Nvidia Linux Developers 포털의 참조 링크

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.