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

问题描述 投票:0回答:1

我正在运行使用 pytorch 和 GPU 的第三方代码的修改版本。我通过改变配置多次运行同一个模型,这是我在 python 中执行的操作,即我有一个包装器 python 文件,它使用不同的配置调用模型。但我在运行第二个或第三个模型时遇到

out-of-memory
错误。也就是说,模型可以正常运行一次,不会出现任何内存问题。因此,如果我在运行第一个模型后结束代码,然后重新启动第二个模型,则代码可以正常工作。但是,如果我在 python 中链接模型,我就会遇到
out-of-memory
问题。

我怀疑第三方代码中存在一些内存泄漏。在谷歌搜索上,我发现了两个建议。一种是调用

torch.cuda.empty_cache()
,另一种是使用
del tensor_name
显式删除张量。然而,
empty_cache()
命令并不能帮助释放整个内存,而且第三方代码有太多张量,我无法单独删除所有张量。有没有办法在Python代码本身中清除当前Python程序使用的整个GPU内存?

python memory-management pytorch memory-leaks out-of-memory
1个回答
0
投票

在不实际阅读代码的情况下,很难确定导致内存问题的原因。但大多数时候

empty_cache()
无法完成清理是因为某些进程仍在运行。 所以,尝试在
empty_cache()

之后添加此内容
import gc
gc.collect()
© www.soinside.com 2019 - 2024. All rights reserved.