在Tensorflow Eager执行中迭代时内存不断增加

时间:2018-07-10 13:54:23

标签: tensorflow

我试图在需要大量迭代的研究应用程序中将函数迭代地拟合到数据中。在每个函数中,我都在优化变量。为简单起见,我在一个最小的工作示例中重新创建了该问题,但不包括该函数,但内存仍在上升:

import numpy as np
import tensorflow as tf
import tensorflow.contrib.eager as tfe
import psutil as ps
import gc
tf.enable_eager_execution()

for i in range (50000):
    w0=tfe.Variable(initial_value=np.ones((8,1)))
    print(ps.virtual_memory().percent)

给定足够的迭代次数,内存将不断攀升。从图形构建的角度来看,随着图形的增长,这是有道理的,但是根据急切的文档,您可以按以下方式释放内存:

for i in range (50000):
    w0=tfe.Variable(initial_value=np.ones((8,1)))
    w0=None
    print(ps.virtual_memory().percent)

但是内存继续增加。如果我将变量从循环中取出并尝试分配给该变量:

w0=tfe.Variable(initial_value=np.ones((8,1)))
for i in range (50000):
    w0.assign(np.zeros((8,1)))
    print(ps.virtual_memory().percent)

内存似乎继续增加。最后,我尝试在每次迭代中运行垃圾收集器:

for i in range (50000):
    w0=tfe.Variable(initial_value=np.ones((8,1)))
    w0=None
    gc.collect()
    print(ps.virtual_memory().percent)

我的记忆力仍然增加。

我是否缺少某些东西,或者我误解了变量在急切执行中的可能用途?

1 个答案:

答案 0 :(得分:0)

急切执行中当前存在一个相当严重的问题,内存似乎正在大量泄漏。

您可以在here找到相关问题。给出的解决方法是:

  

如果同时需要解决方法,tf.set_random_seed(1)将清除内核缓存。