答案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
。
答案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
是内存使用情况列。