Warum verwenden Trainings-RNNs nicht 100% der GPU?

8

Ich frage mich, warum das Training von RNNs normalerweise nicht 100% der GPU verwendet.

Wenn ich diesen RNN-Benchmark beispielsweise auf einem Maxwell Titan X unter Ubuntu 14.04.4 LTS x64 ausführe, liegt die GPU-Auslastung unter 90%:

Geben Sie hier die Bildbeschreibung ein

Der Benchmark wurde mit dem folgenden Befehl gestartet:

python rnn.py -n 'fastlstm' -l 1024 -s 30 -b 128

Wie kann ich den Engpass diagnostizieren?

Franck Dernoncourt
quelle

Antworten:

5

Ich erhalte ungefähr die gleiche Auslastungsrate, wenn ich Modelle mit Tensorflow trainiere. Der Grund ist in meinem Fall ziemlich klar: Ich wähle manuell eine zufällige Charge von Proben aus und rufe die Optimierung für jede Charge separat auf.

Das bedeutet, dass sich jeder Datenstapel im Hauptspeicher befindet, dann in den GPU-Speicher kopiert wird, wo sich der Rest des Modells befindet. Anschließend wird die Vorwärts- / Rückwärtsübertragung und Aktualisierung in GPU durchgeführt. Anschließend wird die Ausführung an meinen Code zurückgegeben, wo ich sie greife ein weiterer Stapel und Aufruf darauf optimieren.

Dies ist schneller möglich, wenn Sie einige Stunden damit verbringen, Tensorflow so einzurichten, dass das Batch-Laden parallel aus vorbereiteten TF-Datensätzen durchgeführt wird.

Mir ist klar, dass Sie möglicherweise Tensorflow unter Keras verwenden oder nicht, aber da meine Erfahrung dazu neigt, sehr ähnliche Nutzungszahlen zu erzeugen, gehe ich auf die Nerven, indem ich vorschlage, dass es einen ziemlich wahrscheinlichen Kausalzusammenhang gibt, der sich aus diesen Korrelationen ergibt. Wenn Ihr Rahmen wird jede Charge aus dem Hauptspeicher in die GPU ohne die zusätzliche Effizienz / Komplexität des asynchronen Ladens Laden (die GPU selbst handhaben kann), dann dies würde ein erwartetes Ergebnis.

davidparks21
quelle
Das ist auch mein Verdacht. Wissen Sie, wie Sie die PCI Express-Busnutzung unter Linux mit CLI überwachen können ?
Franck Dernoncourt
Ich kann nicht sagen, dass ich jemals darüber nachgedacht habe, das zu überwachen, aber Sie haben mich jetzt neugierig gemacht.
Davidparks21
Ich bekomme immer ungefähr 90% mit Keras auch. Ich habe den Quellcode noch nie überprüft, aber ich würde erwarten, dass ein solches Framework Stapel parallel zur GPU liefert (zumindest optional, wenn Sie sich den Speicher leisten können. Warum sollte das nicht der Fall sein?).
stmax
1
Keras ist ein Wrapper um Tensorflow oder Theano. Ich habe nur Erfahrung mit Tensorflow. Aus dieser Perspektive erfordert der Prozess, der zum Aktivieren des asynchronen Ladens von Daten erforderlich ist, dass Sie die Daten in ein Tensorflow-spezifisches Binärformat vorverarbeiten. Ich gehe davon aus, dass Theano eine gleichwertige Methode hat, dies zu tun. Die meisten Modelle beginnen wahrscheinlich mit dem Laden von Speicher pro Stapel (lassen Sie ihn funktionieren, bevor Sie die Geschwindigkeit optimieren). Und da die Charta von Keras "einfach halten" lautet, kann es nicht unerwartet sein, dass sie den direkteren / einfacheren Ansatz für nur einen Effizienzverlust von ~ 10% wählen.
Davidparks21