2017-05-23 6 views
2

Hintergrund

Ich habe eine einzelne Schicht, 256 hidden-Einheit, RNN, die ich mit Keras trainiert habe und dass ich jetzt bereitstellen möchten. Im Idealfall möchte ich mehrere Instanzen dieser RNN auf einer GPU bereitstellen. An diesem Punkt, wenn ich das Modell mit keras.models.load_model() lade, scheint es jedoch 11 GB meines verfügbaren 12 GB GPU-Speichers zu verwenden.Verständnis trainierten neuronalen Netzwerk Speichernutzung

Fragen

  1. Warum mein Netzwerk, das recht klein ist, nehmen so viel Speicher auf? Ich will nur vorhersagen, nicht trainieren. Laden ich das Modell falsch?
  2. Gibt es eine Möglichkeit, die Zuordnung meiner RNN-Struktur zu der Menge an GPU-Speicher zu verstehen, die es verwenden wird?
  3. Wie kann ich die Menge an Speicher reduzieren, die von meinem RNN verbraucht wird?

gegenwärtiges Verständnis

Meine aktuelle Schätzung, wie viel Speicher mein Netzwerk sollte Gebrauch von der Anzahl der hyper-Parameter gegeben:

  • 256 Eingangsgewichte
  • 256 Ausgangsgewichte
  • 256x256 wiederkehrende Gewichte
  • 256 versteckte Einheit s
  • 256 versteckte Einheit spannt

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

Dies ist deutlich weniger als was ich zur Zeit zu sehen. Meine Hypothese ist also, dass Keras denkt, ich trainiere immer noch mein Modell und versuche daher, Stapelfehlergrößen zwischenzuspeichern. Aber wie soll ich mein Modell sonst noch laden?

Antwort

4

Nein, es ist nur eine Strategie der GPU Speicherauslastung. Keras basiert im Allgemeinen auf Tensorflow, und Tensorflow default bildet den gesamten freien GPU-Speicher ab, um eine dynamische Speicherzuweisung zu vermeiden, unabhängig davon, wie viel Speicher tatsächlich verwendet wird.

Sie können es wie unten konfigurieren:

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)) 
Verwandte Themen