僵尸进程不允许释放 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 内存没有被释放)。
发送SIGCHLD
到init
(命令: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 内存的主要内容,如果未能解决你的问题,请参考以下文章