我正在研究一个占用大量内存的 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)))
Run Code Online (Sandbox Code Playgroud)
我有 32GB RAM 可用,在 ubuntu 17.04 上使用 CPU Tensorflow 1.3。这将在第 25 次或第 27 次迭代后给出以下错误消息:
在抛出 'std::bad_alloc' what() 实例后调用终止: std::bad_alloc
在每次迭代后给过程一些时间不会导致任何改进:
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)
Run Code Online (Sandbox Code Playgroud)
但是,如果我在每次重复后强制执行垃圾收集调用,它就会起作用:
import …Run Code Online (Sandbox Code Playgroud)