释放僵死程序占用的 GPU Memory

某个 PyTorch 写的程序如果强行退出,会导致 GPU Memory 不释放。下面我们来解决这个问题。

首先,使用 fuser -v /dev/nvidia* 查看是哪些进程跑在了 GPU 上。

我们可能会得到这样的东西:

                     USER        PID ACCESS COMMAND
/dev/nvidia0:        haoyu     13100 F.... python3
                     haoyu     13149 F.... python3
                     haoyu     13150 F.... python3
                     haoyu     13151 F.... python3
/dev/nvidia1:        haoyu     13100 F...m python3
                     haoyu     13149 F...m python3
                     haoyu     13150 F...m python3
                     haoyu     13151 F...m python3
/dev/nvidiactl:      haoyu     13100 F...m python3
                     haoyu     13149 F...m python3
                     haoyu     13150 F...m python3
                     haoyu     13151 F...m python3
/dev/nvidia-uvm:     haoyu     13100 F.... python3
                     haoyu     13149 F.... python3
                     haoyu     13150 F.... python3
                     haoyu     13151 F.... python3

好多……

然后,使用 xargs kill -9 进程 PID 将它们一个一个结束掉。这样世界就清静了。

但是一个一个结束也是好烦人的…… 所以,继续脚本代劳:

fuser -v /dev/nvidia* | grep -o -E '[0-9]+' | xargs kill -9

一个命令运行下去,世界瞬间清静。

或者再懒一步,设置个 alias:

alias freegpu="fuser -v /dev/nvidia* | grep -o -E '[0-9]+' | xargs kill -9"

将上面一行代码加入到.zshrc 中,重新打开 zsh 即可。

参考资料

留下评论