2016-12-27 1 views
0

Ich benutze eine Warteschlange, die von einem Anruf tf.train.shuffle_batch für Training in TensorFlow zurückgegeben wird. Ich hatte angenommen, dass TF den nächsten Stapel vorlesen würde, während Berechnungen mit dem aktuellen Stapel auf der GPU durchgeführt würden. Dh, stellte ich eine Strömung wie diesesUnbenutztes Potiential für Parallelisierung

  • Last Charge A auf CPU
  • Verwendung Charge A auf GPU, während Lade Charge B auf CPU
  • Verwendung Charge B auf GPU, während Lade batch C auf CPU
  • ...

jedoch an der Verfolgungsausgabe suchen, dies scheint nicht der Fall zu sein:

Trace

Für die meisten der QueueDequeueMany Betrieb ist die GPU im Leerlauf.

Ist etwas, was ich mir mit TensorFlow überhaupt vorstellen kann und wenn ja: Was mache ich falsch?

Antwort

1

Das Problem ist, dass FIFOQueue ist CPU-only Prefetching funktioniert nur auf der CPU. Sie können jedoch Ihren eigenen Vorabruf implementieren, indem Sie GPU-Variablen erstellen und Daten aus der FIFO-Warteschlange parallel auf GPU-Variablen kopieren und dann auf diese Variablen anstatt auf die Warteschlange für die GPU-Eingabe zurückgreifen. Hier ist eine Umsetzung dieser Idee von Tim Zaman:

https://github.com/tensorflow/tensorflow/issues/5722#issuecomment-266297116

+0

Nizza, Dank für den Link! Ich schaue es mir später noch einmal an – fabian789

0

Ich glaube nicht, dass TensorFlow derzeit diese Optimierung durchführt. Es würde sich lohnen, eine Feature-Anfrage zu stellen (TensorFlow github issue). Ein potentieller Kostenfaktor für eine solche Optimierung ist der erhöhte Speicherbedarf für eine zusätzliche Pufferung für den nächsten Stapel.

Verwandte Themen