了解经过训练的神经网络内存使

时间:2017-05-23 02:41:03

标签: python memory tensorflow gpu keras

背景

我有一个单层,256个隐藏单元,我用Keras训练的RNN,我现在想要部署。理想情况下,我想将此RNN的多个实例部署到GPU上。但是,此时,当我使用keras.models.load_model()加载模型时,它似乎使用了我可用的12Gb GPU内存的11Gb。

问题

  1. 为什么我的网络很小,占用了这么多内存?我只想预测,而不是训练。我是否以错误的方式加载模型?
  2. 我是否可以通过某种方式了解我的RNN结构到它将使用的GPU内存量的映射?
  3. 鉴于这种理解,我如何减少RNN消耗的内存量?
  4. 当前理解

    我目前对网络使用多少内存的估计值来自超参数的数量:

    • 256个输入重量
    • 256输出重量
    • 256x256经常性重量
    • 256个隐藏单位
    • 256个隐藏单位偏见

    总计:32 bits/parameter x (4 x 256 + 256 x 256) parameters = 260e6 bits

    这比我目前看到的要少得多。所以我的假设是Keras认为我仍在训练我的模型,因此试图缓存批量错误大小。但我还应该加载我的模型呢?

1 个答案:

答案 0 :(得分:4)

不,它只是gpu内存使用的策略。 Keras通常基于tensorflow,而tensorflow默认映射所有你的免费gpu内存,以避免动态内存分配,无论你真正使用多少内存。

您可以像下面这样进行配置:

import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3  # or any valid options.
set_session(tf.Session(config=config))