カーネルモジュール「nvidia-drm」をアンロードする方法は?


29

Debian Stretchに最新の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を再度実行する必要があります。
ロドリゴ

回答:


28

Nvidiaドライバーを使用していると思われるディスプレイマネージャーを停止することを想像します。

テキストコンソールに変更し(Ctrl+ Alt+を押してF2)、rootとしてログインした後、次のコマンドを使用してグラフィカルターゲットを無効にします。これにより、ディスプレイマネージャーの実行が維持されます。

# systemctl isolate multi-user.target

この時点で、次を使用してmodprobe -r(またはrmmod直接)Nvidiaドライバーをアンロードできると期待しています。

# modprobe -r nvidia-drm

置き換え/アップグレードに成功し、グラフィカル環境を再び開始する準備ができたら、次のコマンドを使用できます。

# systemctl start graphical.target

私は何とかそれをアンインストールして(あなたの答えを使用して)、新しいバージョンをグラフィックモードが機能しなくなったところまでインストールしました。PCをフォーマットし、Debianを再インストールする必要がありました。バグの完全に異なるセットに...これはすべて、Blenderでのレンダリングのオプションとして「GPU」を見るためだけで、まだ表示されません。独自のドライバーは嫌です!
ロドリゴ

4
これはmodprobeステップなしで私のために働いた。
ドンカークビー

1
ええ、私modprobeもステップを必要としませんでした。
デビッドユング

テキストコンソールでもnvidia-drmを削除できません。強制的に削除する方法はありますか?
アディソン

@addison テキストコンソール上にいるだけは十分ではないことに注意してください。X11 やWayland、またはカーネルからnvidiaドライバーを使用しているものを停止する必要があります。systemctl isolateコマンドのポイントはそれを行うことです。しかし、システムで正しく構成されていない可能性があります... ps -efドライバを使用している可能性があるものを見つけて、そのプロセスを停止できるかどうかを確認してください。これにより、ドライバーをアンロードできます。
フィルブランデン

5

lsofユーザー空間プロセスで使用中のファイルをリストします。しかしnvidia_drm、カーネルモジュールであるため、lsof実際に使用されているかどうかは必ずしもわかりません。(カーネルが既にRAMに完全にロードしているため、モジュールファイルは開かれません。ただし、モジュールはユーザー空間または他のカーネルコンポーネントにサービスを提供している可能性があり、それがモジュールのアンロードを防ぎます。)

実行lsmod | grep nvidia.drmして、nvidia_drmモジュール名の右側の数字を確認します。最初の数値は、単にモジュールのサイズです。2番目は使用回数です。モジュールを正常に削除するには、使用回数を最初に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。今Gnomeの内側に、ps aux | grep nvidiaショー[irq/129-nvidia][nvidia]けどなしnvidia-persistenced。また、ここでlsmodはを使用しnvidia_drmた2つのプロセスを示しています。立ち往生しています。
ロドリゴ

3

同様の問題がありました。

*理由:nvidia.drmパッケージが使用されていた


すべてのNVIDIAパッケージを削除して修正しました。

次の2つのコマンドを使用して、以前のすべてのNVIDIAインストールを削除します。


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

モジュールを削除する必要があります。

再起動して先に進みます。


ありがとうございました!これは、再度フォーマットする必要がある場合に
ロドリゴ

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

もちろん、どちらにも特権が必要なので、sudorootになるか使用する必要があります。

それでモジュールが削除されない場合、または少なくとも手動で削除できる場合は、システムをランレベル3(マルチユーザーターゲット)で直接起動するか、ランレベル1で起動することをお勧めします(救助目標)。私は通常、ブートローダーを介してブート時にカーネル引数リストの最後に「3」(または「1」)を追加することでこれを行います。この記事の説明に従って、デフォルトのブートターゲットを変更することもできます。

また、ほとんどのLinuxディストリビューションでは、nVidiaドライバーがビルド済みのパッケージで利用可能であることに注意してください。結局のところ、ドライバーはプロプライエタリであるため、それらのパッケージを独自の標準リポジトリに含めることはほとんどありませんが、信頼できるサードパーティのリポジトリを確実に見つけることができます。インストーラーを直接実行する代わりにこのようなパッケージを使用することを強くお勧めしますが、現在の場所からそこに到達するには、最初にドライバーを手動でアンインストールする必要がある場合があります。


(Filipeの答えを使用して)アンインストールし、グラフィックモードが機能しなくなった時点まで新しいバージョンをインストールしました。PCをフォーマットし、Debianを再インストールする必要がありました。バグの完全に異なるセットに...これはすべて、Blenderでのレンダリングのオプションとして「GPU」を見るためだけで、まだ表示されません。独自のドライバーは嫌です!
ロドリゴ

@ロドリゴ、ごめんなさい。しかし、この種の問題は、手動インストールを実行する代わりにパッケージを使用することをお勧めする理由の例です。
ジョンボリンジャー

はい、パッケージの使用を好みます。しかし、おそらく古いドライバーのためにBlenderのGPUオプションが有効にされていないことをどこかで読んだことがあります
ロドリゴ

2

CUDAのインストール

1)最新のCUDAツールキットをダウンロードする

2)Ctl + Alt + F3を押してtty3に切り替えます

3)続行する前にnvidia-drmをアンロードします。

3a)multi-user.targetを分離する

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ドライバーをインストールしようとしたときに、Debian Stretchで同じ問題が発生していました。テキストmodで私の唯一の解決策がドライバーを削除することであった場合、gdmとgnome-shellを再インストールします。私はそれが不器用な解決策であることは知っていますが、最初にgnome-shellを修正し、Nvidiaドライバーを削除してGDMを再インストールしようとしたことを覚えています。シェル全体を再インストールする方がはるかに簡単であることがわかりました。


もしあれば、もっと不器用な解決策を待ちます。
ロドリゴ

0

私も同じ問題に遭遇しました。エラーの理由は、cudaのインストール中に誤って「Install nvidia driver」を選択したためです。

そのため、CUDAのインストール中に、次のオプションが発生した場合:

Linux-x86_64 384.81用のNVIDIA Accelerated Graphics Driverをインストールしますか?(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.