在循环中使用多个模型时,tensorflow或python是否存在内存清理问题?

在循环中使用多个模型时,tensorflow或python是否存在内存清理问题?,python,tensorflow,memory-leaks,garbage-collection,Python,Tensorflow,Memory Leaks,Garbage Collection,我正在研究一个tensorflow模型,它需要很大的内存。它以迭代方式执行,以处理给定的任务 然而,随着时间的增加,整个过程开始消耗越来越多的RAM,尽管它应该清理它。这听起来好像我会在迭代过程中保留一个图的数据,但我几乎可以肯定这些图是完全分开的 问题 我将代码缩减为以下内容: import tensorflow as tf import numpy as np reps = 30 for i in range(reps): with tf.Graph().as_default()

我正在研究一个tensorflow模型,它需要很大的内存。它以迭代方式执行,以处理给定的任务

然而,随着时间的增加,整个过程开始消耗越来越多的RAM,尽管它应该清理它。这听起来好像我会在迭代过程中保留一个图的数据,但我几乎可以肯定这些图是完全分开的

问题 我将代码缩减为以下内容:

import tensorflow as tf
import numpy as np

reps = 30
for i in range(reps):
    with tf.Graph().as_default() as graph:
        with tf.Session(graph=graph) as sess:
            tf.constant(np.random.random((1000,1000,200,1)))
我有32GB的内存可用,正在使用CPU Tensorflow 1.3的ubuntu 17.04。大约在第25次或第27次迭代后,将显示以下错误消息:

在抛出“std::bad_alloc”实例后调用terminate 什么():std::坏的

在每次迭代后给流程一些时间不会带来任何改进:

import tensorflow as tf
import numpy as np
import time

reps = 30
for i in range(reps):
    with tf.Graph().as_default() as graph:
        with tf.Session(graph=graph) as sess:
            tf.constant(np.random.random((1000,1000,200,1)))
    time.sleep(1)
但是,如果我在每次重复之后强制执行垃圾收集调用,则它会起作用:

import tensorflow as tf
import numpy as np
import gc

reps = 30
for i in range(reps):
    with tf.Graph().as_default() as graph:
        with tf.Session(graph=graph) as sess:
            tf.constant(np.random.random((1000,1000,200,1)))
    gc.collect()
问题: 现在我想知道为什么我需要强制运行垃圾收集,即使tensorflow应该关闭会话并取消引用graph对象

回到我最初的模型,我还不确定gc调用是否真的有帮助。内存使用越来越频繁,尤其是当我准备将模型持久化到磁盘时

关于如何迭代地处理大型模型,有什么最佳实践吗?这真的是内存问题吗

感谢您提供的见解。

相关:(即使是
gc.collect()
也不总是有帮助)。