如何终止使用给定 GPU 的所有进程?

如何终止使用给定 GPU 的所有进程?

我使用 CUDA 工具包在 Nvidia GPU 上执行一些计算。如何终止使用给定 GPU 的所有进程? (立即杀死,即无需手动输入后面的PID kill -9。)

例如,使用 GPU 2 终止所有进程:

在此输入图像描述

答案1

遵循 Unix 哲学,您有一个列出使用给定 GPU 的进程的工具,以及一个杀死进程的工具。使用 shell 结构和文本处理工具将它们组合起来。

例如,要终止使用 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对于更复杂的条件,您可以更改第二个命令的条件语句。例如,以下命令可用于终止使用 GPU-0 到 GPU-3 且 PID > 1000 的所有进程:

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 PIDs需要 PID 来关闭进程,并awk使用两次来查找要终止的有效 PID。

更具体地说,第一个awk命令将选择“GPU PID Type Process Name”行之后的行,然后打印出 GPU id 和 PID 行,每个 GPU id 和 PID 之间有一个空格。第二个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,并且$5是 PID 列。-g如果您想终止所有 GPU 中的进程,可以省略该参数。

awk 化可以通过调节 GPU 内存使用情况来进一步增强:awk '$5==“PID” && $8>0 {p=1} p {print $5}',其中$8是内存使用情况列。

相关内容