我在GPU中加载NLP模型进行推理,但是一旦推理结束,GPU就不会释放内存:
但是ps -a | grep python给我的命令
ps -a | grep python
我该如何解决这个问题?
3ks5zfa01#
我也遇到了类似的问题,GPU上的pytorch进程变成僵尸进程并占用了GPU内存。此外,在我的案例中,该进程显示GPU的使用率为100%(nvidia-smi输出中的GPU-util)。到目前为止,我找到的唯一解决方案是重新启动系统。如果你想尝试其他解决方案,我在重新启动前尝试过(没有成功):
nvidia-smi
GPU-util
init
ps
SIGCHLD
kill -17 1
fuser -v /dev/nvidia*
fuser -k /dev/nvidia0
/dev/nvidia0
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驱动程序455.45.01,在Ubuntu 18.04中运行
Dataloader
num_workers=5
1.7.1+cu110
n3h0vuf22#
我杀死了所有的python进程(pkill python),GPU上也不再有僵尸了,我当时用的是torch。
2条答案
按热度按时间3ks5zfa01#
我也遇到了类似的问题,GPU上的pytorch进程变成僵尸进程并占用了GPU内存。此外,在我的案例中,该进程显示GPU的使用率为100%(
nvidia-smi
输出中的GPU-util
)。到目前为止,我找到的唯一解决方案是重新启动系统。如果你想尝试其他解决方案,我在重新启动前尝试过(没有成功):
init
(pid=1)的子进程。init
应该自动收获僵尸进程,但在我的案例中没有发生这种情况(使用ps
仍然可以找到该进程,并且GPU内存没有释放)。SIGCHLD
发送到init
(命令:kill -17 1
)来强制获取,但是init
仍然没有获取进程,并且gpu内存仍然被使用。fuser -v /dev/nvidia*
,但在我的案例中没有找到其他python进程(除了原来的僵尸进程)。fuser -k /dev/nvidia0
来杀死正在访问/dev/nvidia0
的进程。这不会影响僵尸进程。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驱动程序455.45.01,在Ubuntu 18.04中运行n3h0vuf22#
我杀死了所有的python进程(pkill python),GPU上也不再有僵尸了,我当时用的是torch。