gpt4 book ai didi

python - 在循环中使用多个模型时,tensorflow 或 python 是否存在内存清理问题?

转载 作者:行者123 更新时间:2023-12-04 11:04:17 26 4
gpt4 key购买 nike

我正在研究一个占用大量内存的 tensorflow 模型。它被迭代执行以处理给定的任务。

然而,随着时间的增加,整个过程开始消耗越来越多的 RAM,尽管它应该清理它。这听起来好像我会在迭代中保留一张图的数据,但我几乎可以肯定这些图是完全分开的。

问题

我将代码简化为以下内容:

import tensorflow as tf
import numpy as np

reps = 30
for i in range(reps):
with tf.Graph().as_default() as graph:
with tf.Session(graph=graph) as sess:
tf.constant(np.random.random((1000,1000,200,1)))

我有 32GB RAM 可用,在 ubuntu 17.04 上使用 CPU Tensorflow 1.3。这将在第 25 次或第 27 次迭代后给出以下错误消息:

terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc



在每次迭代后给过程一些时间不会导致任何改进:
import tensorflow as tf
import numpy as np
import time

reps = 30
for i in range(reps):
with tf.Graph().as_default() as graph:
with tf.Session(graph=graph) as sess:
tf.constant(np.random.random((1000,1000,200,1)))
time.sleep(1)

但是,如果我在每次重复后强制执行垃圾收集调用,它就会起作用:
import tensorflow as tf
import numpy as np
import gc

reps = 30
for i in range(reps):
with tf.Graph().as_default() as graph:
with tf.Session(graph=graph) as sess:
tf.constant(np.random.random((1000,1000,200,1)))
gc.collect()



现在我想知道为什么我需要强制垃圾收集运行,即使 tensorflow 应该关闭 session 并取消引用图形对象。

回到我的原始模型,我不确定 gc 调用是否真的有帮助。内存使用量变得非常高,尤其是当我将模型持久化到磁盘时。

是否有关于如何迭代处理大型模型的最佳实践?这是一个实际的内存问题吗?

感谢您提供任何见解。

最佳答案

关于python - 在循环中使用多个模型时,tensorflow 或 python 是否存在内存清理问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46960427/

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