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

时间:2020-05-02 02:35:28

标签: pytorch nvidia zombie-process

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

nvidia-smi image

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

ps -a image

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

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

  • 杀死僵尸进程的父进程:参见this answer。此后,子僵尸进程成为 init (pid=1) 的子进程。 init 应该自动获取僵尸进程,但在我的情况下没有发生这种情况(仍然可以通过 ps 找到该进程,并且未释放 GPU 内存)。
  • 发送SIGCHLDinit(命令:kill -17 1),强制收割,但是init依然没有收割进程,gpu内存还在使用。
  • 按照 this answer 的建议,我检查了其他可能相关并使用 GPU 的子进程:fuser -v /dev/nvidia*,但在我的案例中没有发现其他 python 进程(除了原始僵尸进程) .
  • 按照this issue 中的建议,通过运行/dev/nvidia0 来终止访问fuser -k /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 中运行