如何找到并杀掉占用显存的僵尸进程
nvitop 命令发现占用显存的僵尸进程
nvitop 命令可以实时监控显卡显存的占用,CPU 的占用,以及占用显卡的进程信息等(如下图)。nvitop 中显示 No Such Process 的进程,且它的 CPU 使用率、内存使用率这一列显示 N/A
,说明在 1 号 GPU存在僵尸进程占用了显存。
nvitop 的安装和使用:https://zhuanlan.zhihu.com/p/614024375?utm_id=0
kill -9 杀掉指定显卡上的所有进程,释放显存
这里不能直接使用 kill -9
杀掉 nvitop 命令上显示的进程号,会报错 No Such Process。原因是在跑深度学习时,往往会启动多个进程,但是当主进程结束的时候,它的子进程没有被正常结束掉,就会导致僵尸进程。而这里 kill 掉的进程是已经结束掉的主进程,主进程已经结束了,所以就会报错 No Such Process
解决方法是找到指定显卡上的所有进程,把这些进程都杀死才能释放显存。需要注意的是由于是杀掉显卡上的所有显存,需要等到没有人正在用这张卡的时候再杀,否则可能把别人正在跑的程序 kill 掉。命令如下,nvidia
后面跟的数字就是需要清理显存的显卡的序号
# 杀掉 1 号显卡的所有进程
fuser -v /dev/nvidia1 | xargs -t -n 1 kill -9# 杀掉 2 号显卡的所有进程
fuser -v /dev/nvidia2 | xargs -t -n 1 kill -9
执行完发现显存已经释放掉了!!