2017-10-26 2 views
1

Ich benutze die neue TensorFlow profiler, um die Speicherauslastung in meinem neuronalen Netz zu profilieren, das ich auf einer Titan X GPU mit 12GB RAM betreibe. Hier ist ein Beispiel einer Ausgabe, wenn ich meine Haupttrainingsschleife Profil:Wie erhält man detaillierte Speicherzusammenbrüche im TensorFlow Profiler?

==================Model Analysis Report====================== 
node name | requested bytes | ... 
Conv2DBackpropInput  10227.69MB (100.00%, 35.34%),  ... 
Conv2D      9679.95MB (64.66%, 33.45%),  ... 
Conv2DBackpropFilter   8073.89MB (31.21%, 27.90%),  ... 

Offensichtlich ist dies summiert sich auf mehr als 12 GB, so dass einige dieser Matrizen im Hauptspeicher sein müssen, während andere auf der GPU sind. Ich würde gerne eine detaillierte Aufschlüsselung der Variablen in einem bestimmten Schritt sehen. Ist es möglich, detaillierte Informationen darüber zu erhalten, wo verschiedene Parameter gespeichert sind (Haupt- oder GPU-Speicher), entweder mit dem Profiler oder anders?

Antwort

1

"Angeforderte Bytes" zeigt eine Summe über alle Speicherzuweisungen, aber dieser Speicher kann zugewiesen und freigegeben werden. Nur weil "angeforderte Bytes" den GPU-RAM überschreiten, bedeutet dies nicht notwendigerweise, dass Speicher an die CPU übertragen wird.

Insbesondere für ein neuronales Feedforward-Netzwerk wird TF normalerweise die Forward-Aktivierungen beibehalten, um Backprop effizient zu machen, muss aber die intermediären Backprop-Aktivierungen, dh dL/dh in jeder Schicht, nicht beibehalten Werfen Sie diese Zwischenprodukte einfach weg, nachdem sie damit fertig sind. Also denke ich, in diesem Fall interessiert dich der Speicher von Conv2D, der weniger als 12 GB ist.

Sie können die Zeitachse auch verwenden, um zu überprüfen, ob die Gesamtspeicherbelegung niemals 12 GB überschreitet.

Verwandte Themen