序文
今朝、私は彼がPyTorchの内部を使用して、複数のGPUテスト・モデルを使用したいtorch.nn.parallel.DistributedDataParallel
(以下、単にと呼ば同時で複数のGPUの使用をサポートするために、ディスト)。
プログラムエラーの他の部分のコード(及びディスト独立コード)が発生したため、プログラムが終了するプログラムを引き起こし、実行されています。ディストで閉じプログラムであることを、最終的に観察することにより(解放されていないこのプロセスを実行するために、GPUのメモリにつながる、すべてのプロセスによって生成される前に、何の使用がないので、これは終了していないため、使用を考慮して、このようなディストプログラムがクラッシュの取り扱い、およびされません実行並びにプログラムに至るすべてのプロセスダウンDIST閉じ、処理の一部が実行されています)。
以下は、プロセス、私は問題を解決するため、この時間を記述する。
テキスト
MVE
最小限の検証可能な例として、問題のプログラムコードは次のよう:
import torch.distributed as dist
# 一些代码:定义model等
some code
# 初始化并行训练
dist.init_process_group(xxxx) # 函数参数省略
model = torch.nn.parallel.DistributedDataParallel(model, find_unused_parameters=True)
# 一些代码:训练、测试模型等
some code # 我的程序在这个部分出错且程序直接退出,导致下面的关闭进程的代码没有运行
# 关闭所有进程
dist.destroy_process_group()
問題の
以下のプログラムが終了を示し、そして何のプロセスが数字に0 GPUを使用していないが、数0 GPUのメモリが占領されました。その理由は、このプロセスは第0 GPUのビデオメモリを消費し、プログラムが終了する前に、近くにすべてのプロセスは、プロセスの一部がまだ実行されていない使用ディストです。
第7 GPU占有プロセスは、私のプロセスの別のは、関係のない問題はここで議論されます。
GPUメモリは、PIDの位置によって占有しました
以下のコマンドを実行
fuser -v /dev/nvidia*
あなたが見ることができます以下の図に示したコマンドの実行結果は、プロセスのPIDは285 448番0 GPUを占めています。
次のグラフは、黒隠れて後に情報のビットをモザイクを再生し、することを忘れ、この列は、ユーザが空のように見えるです。
プロセスの情報を表示するために、次のコマンドを実行し、プロセスはPPID(PID親プロセス)を見つけることができるプロセスは、私は7号GPU発生を占め、今のみ号にそれを使用するプロセスではないことを示し、1であり、0 GPU。プログラムは、エラーが手動でプロセスをシャットダウンすることができますので、それは、閉鎖されていない原因で実行されるため、このプロセスは、推測することができます。
ps -f -p 285448
次のグラフは、ロードマップは非常に明確ではありませんので、黒隠れて後に情報のビットをモザイクを再生し、することを忘れ。
これは、プロセスを強制終了、次の2つのコマンドを実行して、GPUの場合を表示している、あなたは数0 GPUのメモリが解放された見ることができる、と今でGPUのメモリ使用量は正常です。
kill -9 2885448
nvidia-smi
著者:@臭い魚の塩漬け
:ソース記入してくださいhttps://www.cnblogs.com/chouxianyu/を
議論し、共有へようこそ!