首页 > 解决方案 > 僵尸进程不允许释放 GPU 内存

问题描述

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

nvidia-smi 图片

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

ps -图片

我该如何解决这个问题?

标签: pytorchnvidiazombie-process

解决方案


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

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

  • 杀死僵尸进程的父进程:见这个答案。此后,子僵尸进程成为init(pid=1)的子进程。init应该自动收割僵尸进程,但这在我的情况下没有发生(仍然可以使用 找到该进程ps,并且未释放 gpu 内存)。
  • 发送SIGCHLDinit(command: kill -17 1),强制收割,但init仍然没有收割进程,gpu 内存仍在使用中。
  • 正如这个答案所建议的,我检查了其他可能相关并使用 GPU: 的子进程fuser -v /dev/nvidia*,但在我的案例中没有找到其他 python 进程(除了原始的僵尸进程)。
  • 正如本期/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 脚本训练,并且我多次使用相同的脚本没有问题。我使用了Dataloaderusing num_workers=5,我怀疑这可能是罪魁祸首,但我不能确定。该进程突然挂起,没有抛出异常或任何东西,并使 GPU 无法使用。

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


推荐阅读