在不退出python的情况下清除当前python代码中pytorch使用的所有GPU内存

Nag*_*S N 7 python memory-leaks memory-management out-of-memory pytorch

我正在运行使用 pytorch 和 GPU 的第三方代码的修改版本。我通过改变配置多次运行同一个模型,这是我在 python 中执行的操作,即我有一个包装器 python 文件,它使用不同的配置调用模型。out-of-memory但我在运行第二个或第三个模型时遇到错误。也就是说,模型可以正常运行一次,不会出现任何内存问题。因此,如果我在运行第一个模型后结束代码,然后重新启动第二个模型,则代码可以正常工作。然而,如果我在 python 中链接模型,我就会遇到out-of-memory问题。

我怀疑第三方代码中存在一些内存泄漏。在谷歌搜索上,我发现了两个建议。一种是调用torch.cuda.empty_cache(),另一种是使用 显式删除张量del tensor_name。然而,empty_cache()命令并不能帮助释放整个内存,而且第三方代码有太多张量,我无法单独删除所有张量。有没有办法在Python代码本身中清除当前Python程序使用的整个GPU内存?

Eup*_*ial 1

如果不实际阅读代码,很难确定导致内存问题的原因。但大多数时候empty_cache()无法完成清理是因为某些进程仍在运行。所以,尝试在之后添加这个empty_cache()

import gc
gc.collect()
Run Code Online (Sandbox Code Playgroud)