僵尸进程不允许释放 GPU 内存

Posted

技术标签:

【中文标题】僵尸进程不允许释放 GPU 内存【英文标题】:Zombie process does not allow deallocating GPU memory 【发布时间】:2020-08-16 14:38:01 【问题描述】:

我正在 GPU 中加载 NLP 模型以进行推理。 但是一旦推理结束,GPU 就不会释放它的内存:

但是后来ps -a | grep python的命令给了我

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

我遇到了类似的问题,GPU 上的一个 pytorch 进程变成了僵尸,并且剩余的 GPU 内存被使用。此外,在我的情况下,该过程在 GPU 中显示 100% 的使用率(nvidia-smi 输出中的GPU-util)。 目前我找到的唯一解决方案是重新启动系统。

如果您想尝试其他解决方案,我在重新启动前尝试过(没有成功):

杀死僵尸进程的父进程:参见this answer。此后,子僵尸进程成为init (pid=1) 的子进程。 init 应该自动回收僵尸进程,但在我的情况下没有发生这种情况(该进程仍然可以通过 ps 找到,并且 gpu 内存没有被释放)。 发送SIGCHLDinit(命令:kill -17 1),强制收割,但是init仍然没有收割进程,GPU内存还在使用中。 根据this answer 的建议,我检查了其他可能相关并使用GPU 的子进程:fuser -v /dev/nvidia*,但在我的案例中没有发现其他python 进程(除了原始僵尸进程)。 按照this issue 中的建议,通过运行fuser -k /dev/nvidia0 杀死正在访问/dev/nvidia0 的进程。这不会影响僵尸进程。 用 nvidia-smi 清除 gpu:nvidia-smi --gpu-reset -i <device>,但这抛出了device is currently being used by one or more other processes... Please first kill all processes using this device...

最后,唯一的解决方案是重新启动系统。

我不确定首先是什么导致了错误。我在单个 GPU 中进行了 pytorch 脚本训练,并且我多次使用相同的脚本没有问题。我使用Dataloader 使用num_workers=5,我怀疑这可能是罪魁祸首,但我不能确定。进程突然挂起,没有抛出异常或任何东西,导致 GPU 无法使用。

我正在使用版本:pytorch 1.7.1+cu110,nvidia-driver 455.45.01,在 Ubuntu 18.04 中运行

【讨论】:

以上是关于僵尸进程不允许释放 GPU 内存的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统编程——特殊进程之僵尸进程

进程中的僵尸赶快来杀

僵尸进程孤儿进程

进程与信号之僵尸进程

linux下的进程(孤儿进程僵尸进程)

孤儿进程与僵尸进程