Tri*_*een 7 python memory-leaks memory-management tensorflow
我打开和关闭的每个Tensorflow会话似乎从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()))
Run Code Online (Sandbox Code Playgroud)
然后从命令行运行它,迭代次数不同:
python memory_test.py 0 产量 bytes used= 1280python 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.数学很简单 - 每个会话打开和关闭泄漏1280个字节.我在两个不同的ubuntu 17.10工作站上使用tensorflow-gpu 1.6和1.7以及不同的NVIDIA GPU测试了这个脚本.
我是否错过了一些明确的垃圾收集,还是Tensorflow错误?
编辑:请注意,与此问题中描述的情况不同,除了tf.Session()对象本身为'count'之外,我不会在循环中向默认全局图添加任何内容.如果是这种情况,怎么能删除它们?tf.reset_default_graph()或使用with tf.Graph().as_default(), tf.Session() as sess:没有帮助.
将我的评论变成答案:
我可以重现这种行为。我想您应该在 GitHub-Issue-Tracker 上创建一个问题。TF 使用自己的分配器机制,并且会话对象的文档明确指出:close()
调用此方法将释放与会话关联的所有资源。
显然这里的情况并非如此。然而,即使是 1281280 字节也可能在连续会话中从内存池中重复使用。
所以答案是:这似乎是一个错误(即使在最近的 TensorFlow '1.8.0-rc0' 版本中也是如此)——无论是在实现中close() 还是在memory_stats实现中。
| 归档时间: |
|
| 查看次数: |
503 次 |
| 最近记录: |