特定のGPUを使用してすべてのプロセスを終了するには?

特定のGPUを使用してすべてのプロセスを終了するには?

私はNvidia GPUでいくつかの計算を実行するためにCUDAツールキットを使用しています。特定のGPUを使用してすべてのプロセスを終了するには? (すぐに終了します。つまり、後続のPIDを手動で入力する必要はありませんkill -9。)

たとえば、GPU 2を使用してすべてのプロセスを終了します。

ここに画像の説明を入力してください。

答え1

Unixの哲学に応じて、特定のGPUを使用してプロセスを一覧表示するツールと、プロセスを終了するツールがあります。シェル構成とテキスト処理ツールを使用して組み合わせます。

たとえば、GPU 2 を使用してすべてのプロセスを終了するには、次のコマンドを実行できます。

kill $(nvidia-smi | awk '$2=="Processes:" {p=1} p && $2 == 2 && $3 > 0 {print $3}')

または

kill $(nvidia-smi -g 2 | awk '$2=="Processes:" {p=1} p && $3 > 0 {print $3}')

答え2

lsof /dev/nvidia* | awk '{print $2}' | xargs -I {} kill {}

私のために動作します。

私の場合、プロセスはそこにリストされていませんnvidia-smi

引用:https://stackoverflow.com/questions/4354257/can-i-stop-all-processes-using-cuda-in-linux-without-rebooting

答え3

たぶんこれがあなたに必要なものかもしれません:

kill -9 $(nvidia-smi | awk '$2 == "GPU" && $3 == "PID" {flag = 1} flag && $3 > 0 {print $2, $3}' | awk '$1 == 2 {print $2}')

awkより複雑な条件の場合は、2 番目のコマンドの条件文を変更できます。たとえば、次のコマンドを使用すると、PID> 1000のGPU-0からGPU-3を使用するすべてのプロセスを終了できます。

kill -9 $(nvidia-smi | awk '$2 == "GPU" && $3 == "PID" {flag = 1} flag && $3 > 0 {print $2, $3}' | awk '$1 < 4 && $2 > 1000 {print $2}')

ご覧のとおり、kill -9 PIDsPIDはプロセスを終了するために必要であり、awk終了する有効なPIDを見つけるために2回使用されます。

具体的には、最初のawkコマンドは、「GPU PIDタイププロセス名」行の後に行を選択し、各GPU IDとPIDの間にスペースがあるGPU idとPID行を印刷します。 2番目は、awk特定のGPU IDまたはPID(この場合はGPU-2を使用するすべてのプロセス)を見つけてPIDを印刷します。最後に、kill -9 PIDsそのPIDに基づいてプロセスが終了します。

答え4

これは私にとって効果的です。

kill $(nvidia-smi -g 2 | awk '$5=="PID" {p=1} p {print $5}')

-g終了するプロセスのGPU IDを設定するPID$5列。-gすべてのGPUでプロセスを終了したい場合は、このパラメータを省略できます。

awkization は、GPU メモリ使用量を調整することでさらに向上させることができます。awk '$5==“PID” && $8>0 {p=1} p {print $5}'ここで$8はメモリ使用量列です。

関連情報