メモリがフラッシュされる前に、実行中にCUDAプログラムがクラッシュしました。その結果、デバイスのメモリは占有されたままになりました。
GTX 580で実行していますが、_nvidia-smi --gpu-reset
_はサポートされていません。
cudaDeviceReset()
をプログラムの先頭に配置することは、プロセスによって作成された現在のコンテキストにのみ影響し、その前に割り当てられたメモリをフラッシュしません。
そのGPUを使用してFedoraサーバーにリモートでアクセスしているため、物理的なリセットは非常に複雑です。
だから、質問は-この状況でデバイスのメモリをフラッシュする方法はありますか?
例外的な状況以外でこれを行うことは不必要ですが、Linuxホストでこれを行うための推奨される方法は、nvidiaドライバーをアンロードすることです。
$ rmmod nvidia
適切なルート権限を使用してから、それをリロードします
$ modprobe nvidia
マシンがX11を実行している場合は、事前に手動でこれを停止し、後で再起動する必要があります。ドライバーの初期化プロセスでは、デバイスの以前の状態をすべて削除する必要があります。
この回答はコメントから集められ、コミュニティWikiとして投稿され、CUDAタグの未回答リストからこの質問を取得しています
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を殺しました。
最初のタイプ
nvidia-smi
次に、削除するPIDを選択します
Sudo kill -9 PID
私も同じ問題を抱えていました。
Sudo kill -9 PID.
https://www.quora.com/How-do-I-kill-all-the-computer-processes-shown-in-nvidia-smi を参照してください
onmacOS(/ OS X)、他の誰かがOSでメモリをリークしていると思われる場合: