【问题标题】:tf.reset_default_graph memory leaktf.reset_default_graph 内存泄漏
【发布时间】:2021-06-18 05:56:31
【问题描述】:

我正在尝试在 TensorFlow 中运行一些自动超参数优化的实验,因此我的程序的主循环需要反复创建一个图、运行它、销毁它,以便为下一次迭代释放内存。为此,我有:

tf.reset_default_graph()
sess = tf.InteractiveSession()

这似乎在所有方面都有效,除了一种:每次循环时,程序都会泄漏数百兆字节的内存。我没有分配任何其他类型的可能成为内存泄漏候选的复杂数据结构,所以大概我错误地使用了tf.reset_default_graph

我做错了什么?

程序在https://github.com/russellw/tf-examples/blob/master/sko_lstm.py

【问题讨论】:

  • 你能拿出证据吗?我的库也使用tf.reset_default_graph() 进行超参数调整,它能够处理大量图形,超过 100 个。泄漏在其他地方
  • @Maxim 好的,添加了程序链接。我没有看到泄漏可能在其他任何地方。我错过了什么吗?
  • 啊,我想我明白了。看我的回答

标签: python session tensorflow graph memory-leaks


【解决方案1】:

tf.InteractiveSession() 替换为with tf.Session(): 语句。前者设计用于控制台,因此它会启动,使其成为默认值并且不会释放资源,除非您手动调用sess.close()(这很容易忘记,除此之外,您应该考虑例外情况) .因此,您的代码最终会出现大量并行会话,每个会话都持有其资源。 tf.reset_default_graph() 不会在会话处于活动状态时释放这些资源。

with 语句确保上下文管理器将调用__exit__ 并关闭会话。

【讨论】:

    【解决方案2】:

    如果对某人不起作用,请查看scriptifier。它是一个装饰器,允许在单独的脚本中运行一个函数。它会自动生成脚本并负责传递参数并返回,只要它们是可腌制或 keras 模型或 keras 模型列表...(有关文档,请参阅:github

    使用pip install scriptifier安装

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 2013-01-20
      • 2011-10-31
      • 2019-08-10
      • 2013-06-24
      • 2011-03-22
      • 2015-04-20
      相关资源
      最近更新 更多