pytorch 僵尸进程不允许取消分配GPU内存

yks3o0rb  于 2023-02-04  发布在  其他
关注(0)|答案(2)|浏览(339)

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

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

我该如何解决这个问题?

3ks5zfa0

3ks5zfa01#

我也遇到了类似的问题,GPU上的pytorch进程变成僵尸进程并占用了GPU内存。此外,在我的案例中,该进程显示GPU的使用率为100%(nvidia-smi输出中的GPU-util)。到目前为止,我找到的唯一解决方案是重新启动系统。
如果你想尝试其他解决方案,我在重新启动前尝试过(没有成功):

  • 删除僵尸进程的父进程:在此之后,子僵尸进程成为init(pid=1)的子进程。init应该自动收获僵尸进程,但在我的案例中没有发生这种情况(使用ps仍然可以找到该进程,并且GPU内存没有释放)。
  • 正在将SIGCHLD发送到init(命令:kill -17 1)来强制获取,但是init仍然没有获取进程,并且gpu内存仍然被使用。
  • 正如这个答案所暗示的,我检查了其他可能相关并使用GPU的子进程:fuser -v /dev/nvidia*,但在我的案例中没有找到其他python进程(除了原来的僵尸进程)。
  • 正如本期所建议的,通过运行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脚本训练,并且我多次使用相同的脚本都没有问题。我使用了Dataloadernum_workers=5,我怀疑这可能是罪魁祸首,但我不能确定。这个进程突然挂起,没有抛出异常或任何东西,并且让GPU无法使用。
我使用的版本:pytorch 1.7.1+cu110,nvidia驱动程序455.45.01,在Ubuntu 18.04中运行

n3h0vuf2

n3h0vuf22#

我杀死了所有的python进程(pkill python),GPU上也不再有僵尸了,我当时用的是torch。

相关问题