2017-05-23 80 views
2

背景

我有一個單層,256隱藏單元,我已經用Keras培訓過的RNN,現在我想部署。理想情況下,我想將這個RNN的多個實例部署到GPU上。但是,在這一點上,當我使用keras.models.load_model()加載模型時,它似乎使用了我可用的12Gb GPU內存的11Gb。瞭解經過訓練的神經網絡內存使用情況

問題

  1. 爲什麼我的網絡,這是相當小,佔用這麼多內存?我只想預測,而不是訓練。我是否以錯誤的方式加載模型?
  2. 有什麼方法可以大致瞭解我的RNN結構到它將使用的GPU內存量的映射嗎?
  3. 有了這個理解,我該如何減少我的RNN消耗的內存量?

目前瞭解

我目前的多少內存我的網絡應該使用是從超參數的數量給出估計:

  • 256輸入的權重
  • 256輸出權
  • 256x256輪迴重量
  • 256隱藏單位小號
  • 256隱藏的單元偏置

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

這是顯著不到什麼我目前看到的。所以我的假設是,Keras認爲我仍在訓練我的模型,因此正試圖緩存批量錯誤大小。但是我還應該如何加載我的模型?

回答

4

不,這只是一個gpu內存使用策略。 Keras通常基於張量流,並且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))