我正在运行一个 tensorflow 模型,该模型在处理大图像时会在大约 10 分钟内耗尽 60G 的 RAM。
我已经运行 Heapy 试图确定泄漏,但 heapy 仅显示 90M 的内存使用量并且保持不变。
我注意到这篇文章:Python 进程消耗越来越多的系统内存,但 heapy 显示大致恒定的使用情况
这表明问题可能出在带有内存碎片的python(此处为2.7)中。但这听起来不像是对本案的合理解释。
- 我有 2 个 python 队列。在一个中,我从磁盘读取图像并
raw
使用线程将其加载到队列中。 - 在另一个线程中,我读取
raw
队列、预处理并将其加载到ready
队列中。 - 在我的主线程中,我从队列中批量绘制 8 张图像,
ready
并通过 tensorflow 训练运行它们。 - 对于 8 个图像批次(每个 ~25MB numpy 矩阵),我应该在任何给定时间在当前处理和两个队列之间至少保留 24 * 25MB 的内存。但是heapy只显示了90M的消耗。
所以 heapy 没有看到至少 600M 的内存,我知道在任何给定的时刻都必须持有。
因此,如果 heapy 看不到我知道的内存,我就不能相信它会看到泄漏的位置。以它泄漏的速度,几乎可以肯定是成批的图像导致了它。
我正在使用threading
python 中的模块来启动加载器和预处理器线程。我试过print h.heap()
从线程代码和主代码中调用,结果都一样。