Ich versuche, einen groben Griff auf der GPU Speicherbedarf meines TensorFlow tief Lernmodelle zu bekommen, und auf a heuristic I've found verlasse mich mit schon sagt:Wie kann ich den GPU-Footprint meines TensorFlow-Modells schätzen?
bewusst seinDer größte Engpass bei ConvNet Konstruktion Architekturen der Speicherengpass. Viele moderne GPUs haben ein Limit von 3/4/6GB Speicher, mit den besten GPUs mit etwa 12 GB Speicher. Es gibt drei Hauptquellen der Speicher im Auge zu behalten:
Aus den Zwischenvolumengrößen: Dies sind die rohen Anzahl der Aktivierungen auf jeder Ebene des ConvNet sind, sowie deren Gradienten (von gleicher Größe). Üblicherweise sind die meisten Aktivierungen auf den früheren Schichten eines ConvNet (d. H. Ersten Conv Layers). Diese werden um gehalten, weil sie für Backpropagation benötigt werden, aber eine clevere Implementierung, die ein ConvNet nur zur Testzeit laufen lässt, könnte in Prinzip dies um eine riesige Menge reduzieren, indem nur die aktuellen Aktivierungen auf jeder Schicht gespeichert und die vorherige verworfen werden Aktivierungen auf Schichten darunter.
Aus den Parametergrößen: Dies sind die Zahlen, die die Netzwerkparameter, deren Gradienten während backpropagation halten, und häufig einen Schritt Cache auch wenn die Optimierung Dynamik unter Verwendung, Adagrad oder RMSProp. Daher muss der Speicher zum Speichern des Parameters Vektor allein in der Regel mit einem Faktor von mindestens 3 oder so multipliziert werden.
Jede ConvNet Implementierung hat verschiedene Speicher zu halten, wie die Bilddaten Chargen, vielleicht ihre Augmented-Versionen usw.
Sobald Sie eine grobe Schätzung der Gesamtzahl der Werte (für Aktivierungen, Farbverläufe und misc), die Zahl sollte in Größe in GB konvertiert werden. Nehmen Sie die Anzahl der Werte, multiplizieren Sie mit 4, um die rohe Anzahl der Bytes zu erhalten (da jedes Fließkomma 4 Bytes ist, oder vielleicht 8 für doppelte Genauigkeit), und teilen Sie dann durch 1024 mehrere Male, um die Menge an Speicher zu erhalten in KB, MB und schließlich GB. Wenn Ihr Netzwerk nicht passt, ist eine übliche Heuristik, um es fit zu machen, um die Batch-Größe zu verringern, da der Großteil des Speichers in der Regel durch die Aktivierungen verbraucht wird.
Aber ich bin nicht sicher, ein paar Dinge:
- Was ist die Rolle der Chargengröße bei dieser Berechnung? Es scheint, dass es nur Aktivierungen betrifft (das heißt, ich sollte die Aktivierungen mit der Batch-Größe multiplizieren). Ist das korrekt?
- Woher weiß ich, welche dieser Dinge auf meiner GPU (mit 12GiB) sitzt und welche auf meinem CPU-RAM (in TensorFlow)? Im Allgemeinen befinden sich diese auf der GPU?
- Wo soll ich nach "Verschiedenes" suchen? Die Eingangsdaten sind die Hauptquelle dafür. Und wenn ja, zähle ich eine einzelne Menge solcher Daten oder alles zusammen?
Können Sie das in die Fragen übersetzen 1-3 wie sie sich auf die Interpretation des Originaltextes beziehen? – orome
Es gibt 3 verschiedene Absätze, einen pro Punkt. Ich werde jedoch bearbeiten – nessuno