web-dev-qa-db-ja.com

CUDAを使用してGPUメモリをフラッシュする方法(物理リセットは利用できません)

メモリがフラッシュされる前に、実行中にCUDAプログラムがクラッシュしました。その結果、デバイスのメモリは占有されたままになりました。

GTX 580で実行していますが、_nvidia-smi --gpu-reset_はサポートされていません。

cudaDeviceReset()をプログラムの先頭に配置することは、プロセスによって作成された現在のコンテキストにのみ影響し、その前に割り当てられたメモリをフラッシュしません。

そのGPUを使用してFedoraサーバーにリモートでアクセスしているため、物理的なリセットは非常に複雑です。

だから、質問は-この状況でデバイスのメモリをフラッシュする方法はありますか?

33
timdim

例外的な状況以外でこれを行うことは不必要ですが、Linuxホストでこれを行うための推奨される方法は、nvidiaドライバーをアンロードすることです。

$ rmmod nvidia 

適切なルート権限を使用してから、それをリロードします

$ modprobe nvidia

マシンがX11を実行している場合は、事前に手動でこれを停止し、後で再起動する必要があります。ドライバーの初期化プロセスでは、デバイスの以前の状態をすべて削除する必要があります。

この回答はコメントから集められ、コミュニティWikiとして投稿され、CUDAタグの未回答リストからこの質問を取得しています

9
talonmies

gPUメモリを使用しているものを確認します

Sudo fuser -v /dev/nvidia*

出力は次のようになります。

                     USER        PID  ACCESS COMMAND
/dev/nvidia0:        root       1256  F...m  Xorg
                     username   2057  F...m  compiz
                     username   2759  F...m  chrome
                     username   2777  F...m  chrome
                     username   20450 F...m  python
                     username   20699 F...m  python

次に、htopで不要になったPIDを削除するか、

Sudo kill -9 PID.

上記の例では、Pycharmは大量のメモリを消費していたため、20450と20699を殺しました。

57
ksooklall

最初のタイプ

nvidia-smi

次に、削除するPIDを選択します

Sudo kill -9 PID
10
Ashiq Imran

私も同じ問題を抱えていました。

Sudo kill -9 PID.

https://www.quora.com/How-do-I-kill-all-the-computer-processes-shown-in-nvidia-smi を参照してください

7
ailihong

onmacOS(/ OS X)、他の誰かがOSでメモリをリークしていると思われる場合:

  • https://github.com/phvu/cuda-smi は空きメモリをすばやくチェックするのに便利です
  • アプリケーションを終了すると、使用しているメモリが解放されるようです。不要なものをすべて終了するか、アプリケーションを1つずつ終了して、使用したメモリ量を確認します。
  • それでも問題が解決しない場合(10個のアプリケーションを約500MB解放すると私にとっては15%)、最大の消費者は断然WindowServerです。強制終了できます。これにより、実行中のすべてのアプリケーションが強制終了され、ログアウトされます。しかし、再起動よりも少し高速で、CUDAデバイスの空きメモリが90%に戻りました。
4
MattW.