【问题标题】:Memory Continually Increasing When Iterating in Tensorflow Eager Execution在 Tensorflow Eager Execution 中迭代时内存持续增加
【发布时间】:2023-03-13 03:36:02
【问题描述】:

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

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)

如果迭代次数足够多,内存会不断攀升。随着图的增长,从图构建的角度来看,这是有道理的,但是根据 Eager 中的文档,您可以按如下方式释放内存:

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)

我的内存仍然增加了。

我是否遗漏了什么或者我误解了在急切执行中可能使用的变量?

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    目前在 Eager Execution 中存在一个相当严重的问题,内存泄漏似乎相当严重。

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

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

    【讨论】:

    • 感谢@P-Gn,这似乎是一种解决方法。感谢您的回答。
    猜你喜欢
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2023-03-14
    • 2020-10-11
    • 2020-02-16
    • 2019-02-06
    • 1970-01-01
    相关资源
    最近更新 更多