【问题标题】:Keras Memory LeakKeras 内存泄漏
【发布时间】:2019-01-09 15:45:42
【问题描述】:

我正在使用 Keras TensorFlow 1.8,但我的 gpu (1080 ti) 出现内存泄漏。训练网络后,即使完全关闭 python,我的内存也会被使用。在 nvidia-smi 中,它不再显示 python,但内存使用情况仍然存在。

我无法重新启动计算机,因为其他用户正在运行进程(我确定他们没有使用 gpu)。

[编辑:我上传了错误的截图]

【问题讨论】:

  • 你是如何关闭python的?杀死它的进程通常会释放自己的内存。 sudo fuser -v /dev/nvidia* 返回什么
  • 我关闭了 PyCharm。该命令显示了一个 python 实例,考虑到我没有运行 python 的应用程序,这很奇怪
  • 那么关闭它!
  • 就像你用 kill -9 杀死了进程
  • 解决了这个问题。谢谢

标签: python tensorflow memory-leaks keras gpu


【解决方案1】:

总是

K.clear_session()

其中 K 定义为

from keras import backend as K

在您的处理结束时。

它可以防止 TensorFlow 内存泄漏。

你也可以试试

import gc
gc.collect()

或者,

从您的 tf 会话开始,使用整个 gpu 功能阻止 tensorflow:

import tensorflow as tf
config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)

【讨论】:

  • 我都试过了。它们减缓了内存泄漏,但并没有完全阻止它。
【解决方案2】:

在尝试过多地尝试keras.clear_session()gc.collect() 之后,我放弃了并创建了一个可靠的解决方法。它是一个装饰器,允许在单独的脚本中运行一个函数。

它叫做scriptifier,它通过pip install scriptifier安装

它会自动生成脚本并负责传递参数并返回,只要它们是可腌制或 keras 模型或 keras 模型列表...(有关文档,请参阅:github

应该是这样的:

from scriptifier import scriptifier

def func_1(in):
    ...
    model.fit()
    ...
    return out

scriptified_func_1 = scriptifier.run_as_script(func_1)
out = scriptified_func_1(in)

【讨论】:

    猜你喜欢
    • 2018-10-24
    • 1970-01-01
    • 2019-04-11
    • 2021-01-16
    • 1970-01-01
    • 2020-01-27
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多