【问题标题】:How to delete an object or a model entirely from memory in Keras/Python3?如何在 Keras/Python3 中完全从内存中删除对象或模型?
【发布时间】:2019-06-20 08:11:27
【问题描述】:

首先,我想在进程之前给出内存信息。

pmem(rss=288796672, vms=4105973760, shared=107503616, text=2039808, lib=0, data=771235840, dirty=0)

我使用 Keras 构建了一个模型并将其分配给 model 变量。然后,我将model 对象发送到类构造函数进行克隆:

from tensorflow.python.keras.models import clone_model
from tensorflow.python.keras import backend as K
class Source:
    def __init__(self, model):
        config = Config()
        self.model = clone_model(model)
        # breakpoint to read memory
        self.model.compile(optimizer=config.optimizer, loss=config.loss, metrics=config.metrics)

克隆完成后的内存信息如下:

pmem(rss=289615872, vms=4333002752, shared=107843584, text=2039808, lib=0, data=797331456, dirty=0)

到目前为止,一切都很好。当我尝试通过del self.model删除self.model对象时,内存并没有减少。

pmem(rss=289615872, vms=4333002752, shared=107843584, text=2039808, lib=0, data=797331456, dirty=0)

然后我尝试通过gc.collect()执行垃圾收集器,结果还是一样,没有任何变化。

pmem(rss=289615872, vms=4333002752, shared=107843584, text=2039808, lib=0, data=797331456, dirty=0)

最后,我尝试使用K.clear_session() 清除会话。一切都没有再改变。

pmem(rss=289615872, vms=4333002752, shared=107843584, text=2039808, lib=0, data=797331456, dirty=0)

Keras 版本: 2.1.6(从上一个版本降级以解决此问题但不起作用。)

Tensorflow 版本: 2.0.0-alpha0

【问题讨论】:

  • 结帐this answer.
  • @Mitiku K.clear_session() 与该答案中的方法相同。还是不是?

标签: python tensorflow keras


【解决方案1】:

TF 从不释放它之前抓取的内存。这可能是一件相当不错的事情,因为它有助于避免内存碎片。

请注意,这与分配的内存的哪个部分可供使用无关 - TF 控制它并不意味着内存被积极使用。 clear_session 应该使大部分/所有受控内存再次可用(但同样:仅对 TF,而不是其他进程)。

您需要找出受控内存的哪一部分实际可用、使用或需要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    相关资源
    最近更新 更多