gpt4 book ai didi

python - Tensorflow 在打开和关闭每个 session 时泄漏 1280 字节?

转载 作者:太空狗 更新时间:2023-10-29 21:56:08 25 4
gpt4 key购买 nike

似乎我打开和关闭的每个 Tensorflow session 都从 GPU 内存中消耗了 1280 字节,这些内存直到 python 内核终止后才被释放。

要重现,请将以下 python 脚本保存为 memory_test.py:

import tensorflow as tf
import sys
n_Iterations=int(sys.argv[1])
def open_and_close_session():
with tf.Session() as sess:
pass
for _ in range(n_Iterations):
open_and_close_session()
with tf.Session() as sess:
print("bytes used=",sess.run(tf.contrib.memory_stats.BytesInUse()))

然后从命令行以不同的迭代次数运行它:

  • python memory_test.py 0 产生 bytes used= 1280
  • python memory_test.py 1 产生 bytes used= 2560
  • python memory_test.py 10 产生 bytes used= 14080
  • python memory_test.py 100 产生 bytes used= 129280
  • python memory_test.py 1000 产生 bytes used= 1281280

数学很简单 - 每个 session 打开和关闭泄漏 1280 字节。我在两个不同的 ubuntu 17.10 工作站上用 tensorflow-gpu 1.6 和 1.7 以及不同的 NVIDIA GPU 测试了这个脚本。

我是否遗漏了一些明确的垃圾收集或者是 Tensorflow 错误?

编辑:请注意,与this question中描述的情况不同,我没有向循环内的默认全局图添加任何内容,除非 tf.Session() 对象本身“计数”。如果是这种情况,如何删除它们? tf.reset_default_graph() 或使用 with tf.Graph().as_default(), tf.Session() as sess: 没有帮助。

最佳答案

将我的评论变成答案:

我可以重现此行为。我猜你应该在 GitHub-Issue-Tracker 上创建一个问题。 TF 使用它自己的分配器机制, session 对象的文档清楚地指出 close()

Calling this method frees all resources associated with the session.

这里显然不是这种情况。但是,即使是 1281280 字节也可能在连续 session 中从内存池中重用。

所以答案是:它似乎是一个错误(即使在最近的“1.8.0-rc0”版本的 TensorFlow 中也是如此。)——在 close() 中。或在 memory_stats实现。

关于python - Tensorflow 在打开和关闭每个 session 时泄漏 1280 字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49735217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com