我能否在Linux中停止使用CUDA的所有进程而无需重新启动?

30

是否可以通过CUDA停止使用GPU的所有运行处理,而不需要重新启动机器?


你可以暂时更改 /dev/nvidiaxx 的权限,我没有尝试过,但我相信这会立即终止作业。除非您使用某种队列或负载平衡器,否则我不知道如何指定正在 GPU 上运行的特定作业。 - Marm0t
4个回答

29

使用lsof实用程序可以帮助解决此问题。您可以通过以下命令获取正在访问NVIDIA卡的进程列表:

lsof /dev/nvidia*

然后使用kill或pkill终止您想要终止的进程。请注意,如果正在运行X,则可能不希望终止它。在我的桌面系统上,X和kwin都访问GPU。


1
这对我不起作用。杀死我的内核进程没有效果。内核进程无限地消耗GPU,我无法将其终止。 - thatWiseGuy

16

长答案:

lsof /dev/nvidia*

给你正在你的GPU卡上运行的进程ID(PID),看起来类似于: lsof: 对PID的状态错误:没有这样的文件或目录

COMMAND  PID    USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
python  7215 *******  mem    CHR 195,255           434 /dev/nvidiactl
python  7215 *******  mem    CHR   195,0           435 /dev/nvidia0

以及

awk '{print $2}'

选择PID列(在我的情况下是第二列)并且

xargs -I {} kill {}

杀死这些PID作业。

简短回答:

您可以使用以下命令一次性删除它们所有。

注意!此命令将删除出现在lsof /dev/nvidia*中的所有PID。请先运行lsof /dev/nvidia*确认这些作业是否是您要删除的。

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

通过单个命令完成工作。


1
建议您添加一些关于使用 kill -KILL 命令将它们彻底终止的内容,如果它们无法理解提示。 - einpoklum
5
不错的东西,伙计,这刚刚让我的整个电脑崩溃了,在启动时Ubuntu进入修复模式。 - Osi
1
很抱歉听到这个。我已经更改了答案并添加了一个提醒。 - user1165814

13

你可以使用nvidia-smi检查进程,然后进行操作。

kill -9 <pid>

这个命令是"kill -9 pid"吗?因为我试过使用"kill -9 <pid>",但不起作用。 - WY Hsu
2
我明白了,只是进程ID。<>就像引用一样。 - WY Hsu

1
你可以使用fuser命令获取所有正在使用CUDA的进程,然后将它们杀死。还有一个很好的单个命令可以将它们全部杀死。
sudo fuser -k /dev/nvidia*

请注意,与kill等某些其他命令不同,默认情况下,fuser -k发送的信号是SIGKILL而不是SIGTERM - ebk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接