在循环中使用多个模型时,tensorflow或python是否存在内存清理问题?
我正在研究一个tensorflow模型,它需要很大的内存。它以迭代方式执行,以处理给定的任务 然而,随着时间的增加,整个过程开始消耗越来越多的RAM,尽管它应该清理它。这听起来好像我会在迭代过程中保留一个图的数据,但我几乎可以肯定这些图是完全分开的 问题 我将代码缩减为以下内容:在循环中使用多个模型时,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()
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()
也不总是有帮助)。