pytorch在kill主进程后无法释放显存的问题

同事写的pytorch程序最近有点奇怪,程序运行结束/强制杀死后,占用的显存没能正常释放。这是怎么一回事呢?

在pytorch论坛搜到以下的信息:https://discuss.pytorch.org/t/pytorch-doesnt-free-gpus-memory-of-it-gets-aborted-due-to-out-of-memory-error/13775/13

pytorch在kill主进程后无法释放显存的问题_第1张图片

就是说:多进程模式下的pytorch程序有个别版本会有这个bug:已经kill了主进程,可是子进程却没有kill掉,成了僵尸进程。

而且这些进程通过nvidia-smi是无法查看的T_T

怎么kill这些进程呢?首先要确定进程号,运行指令:

fuser -v /dev/nvidia*

即可查看所有占用了显存的进程。

然后找到需要干掉的僵尸进程,为了避免误杀那些还在运行的进程,可以选出需要干掉的进程中特有的关键词,比如.py文件的名称train_imagenet.py这种,然后运行以下指令:

ps -ef | grep train_imagenet | grep -v grep | cut -c 9-15 | xargs kill -9

理论上说,这些僵尸子进程就能被干掉了。

当然,凡事皆有例外。有时候,我们会碰到怎么kill -9也干不掉的僵尸进程。。。这时可能需要reboot一下了。

你可能感兴趣的:(工作,运维,linux)