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
- Warum mein Netzwerk, das recht klein ist, nehmen so viel Speicher auf? Ich will nur vorhersagen, nicht trainieren. Laden ich das Modell falsch?
- Gibt es eine Möglichkeit, die Zuordnung meiner RNN-Struktur zu der Menge an GPU-Speicher zu verstehen, die es verwenden wird?
- 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?