FAQ

Welche Modelle werden in Cloud TPU unterstützt? Eine Liste der unterstützten Modelle finden Sie hier: Offizielle unterstützte Modelle.

Kann ich Compute Engine für Schlussfolgerungen nutzen? Der Vorhersagemodus in TPUEstimator kann dazu genutzt werden, aus einem auf Compute Engine trainierten Modell Schlussfolgerungen zu ziehen. Weitere Informationen finden Sie unter TPUEstimator-Vorhersagemethode.

Sind in TensorFlow Operationen integriert, die in Compute Engine nicht verfügbar sind?

In TensorFlow sind einige Operationen integriert, die derzeit nicht in Compute Engine verfügbar sind. Weitere Informationen finden Sie unter Verfügbare TensorFlow-Operationen, wo auch aktuelle Problemumgehungen beschrieben sind.

Kann ich mit Compute Engine Platzhalter verwenden und Wörterbücher einspeisen?

Diese Aktionen sind in Compute Engine technisch möglich, es wird jedoch dringend davon abgeraten. Bei Verwendung von Platzhaltern und beim Einspeisen von Wörterbüchern sind sie auf einen einzelnen Compute Engine-Kern beschränkt und es wird übermäßiger Overhead verursacht.

Verwenden Sie zum Erstellen einer Trainings-Pipeline stattdessen die TPUEstimator API und die Dataset API. In der ResNet-Anleitung finden Sie ein Beispiel für die Erstellung einer einfachen Trainingsschleife mit TPUEstimator und Dataset.

Kann ich ein RL-Modell (Reinforcement Learning) mit einer Compute Engine trainieren?

Reinforcement Learning umfasst eine breite Palette von Techniken, von denen einige derzeit nicht mit den Software-Abstraktionen für TPUs kompatibel sind. Einige Reinforcement-Learning-Konfigurationen erfordern die Ausführung einer Blackbox-"Simulationsumgebung", wobei eine CPU als Teil der Trainingsschleife verwendet wird. Wir haben festgestellt, dass deren Leistung hinter der Compute Engine zurückbleibt und diese Herangehensweise damit sehr ineffizient ist.

Kann ich mit Compute Engine Worteinbettungen verwenden?

Ja, Compute Engine unterstützt tf.nn.embedding_lookup(), da es sich nur um einen Wrapper um tf.gather() handelt, die auf der Compute Engine implementiert ist. Compute Engine unterstützt jedoch nicht tf.nn.embedding_lookup_sparse(). Beachten Sie, dass der Eingabe-ID-Tensor für tf.embedding_lookup() während des Trainings eine statische Form haben muss (d. h. die Batchgröße und die Sequenzlänge müssen für jeden Batch gleich sein). Dies ist eine allgemeinere Einschränkung für alle Tensoren, wenn Compute Engine verwendet wird.

Kann ich mit Compute Engine Sequenzen variabler Länge verwenden?

Es gibt mehrere Methoden zum Darstellen von Sequenzen variabler Länge in TensorFlow, einschließlich Padding, tf.while_loop(), abgeleiteter Tensordimensionen und Bucketing. Leider unterstützt die aktuelle Ausführungsengine von Compute Engine nur einen Teil davon. Sequenzen mit variabler Länge müssen mithilfe von tf.while_loop(), tf.dynamic_rnn(), Bucketing, Padding oder Sequenzverkettung implementiert werden.

Kann ich mit Compute Engine ein Recurrent Neural Network (RNN) trainieren?

In bestimmten Konfigurationen sind tf.static_rnn() und tf.dynamic_rnn() mit der aktuellen TPU-Ausführungsengine kompatibel. Im Allgemeinen unterstützt die TPU sowohl tf.while_loop() als auch TensorArray, die zum Implementieren von tf.dynamic_rnn() dienen. Spezielle Toolkits wie CuDNN werden auf der TPU nicht unterstützt, da sie GPU-spezifischen Code enthalten. Wenn Sie tf.while_loop() auf der TPU verwenden, müssen Sie eine Obergrenze für die Anzahl der Schleifenwiederholungen angeben, damit die TPU-Ausführungsengine die Speicherbelegung statisch ermitteln kann.

Kann ich mit Compute Engine ein generatives kontradiktorisches Netzwerk (Generative Adversarial Network, GAN) trainieren?

Das Trainieren von GANs erfordert normalerweise einen häufigen Wechsel zwischen dem Trainieren des Generators und dem Trainieren des Diskriminators. Die aktuelle TPU-Ausführungsengine unterstützt nur einen einzelnen Ausführungsgraphen. Für den Wechsel zwischen Graphen muss eine vollständige Neukompilierung durchgeführt werden, die 30 Sekunden oder länger dauern kann.

Eine mögliche Problemumgehung besteht darin, immer die Summe der Verluste für den Generator und den Diskriminator zu berechnen, diese jedoch anschließend mit den beiden Eingabetensoren g_w und d_w zu multiplizieren. In Batches, in denen der Generator trainiert werden soll, können Sie g_w=1.0 und d_w=0.0 übergeben. Für Batches, in denen der Diskriminator trainiert werden soll, kehren Sie diese Werte um.

Kann ich mit Compute Engine ein Multi-Task-Lernmodell trainieren?

Wenn die Aufgaben als großer Graph mit einer Aggregatverlustfunktion dargestellt werden können, ist keine spezielle Unterstützung für das Multi-Task-Lernen erforderlich. Die TPU-Ausführungsengine unterstützt derzeit jedoch nur einen einzelnen Ausführungsgraphen. Daher ist es nicht möglich, schnell zwischen mehreren Ausführungsgraphen mit gleichen Variablen aber unterschiedlicher Struktur zu wechseln. Zum Ändern von Ausführungsgraphen muss der Schritt der Graphkompilierung noch einmal ausgeführt werden, der 30 Sekunden oder länger dauern kann.

Unterstützt Compute Engine den Eager-Modus?

Nein, der Eager-Modus verwendet eine neue dynamische Ausführungsengine, während Compute Engine XLA verwendet, das eine statische Kompilierung des Ausführungsgraphen durchführt.

Unterstützt Compute Engine Modellparallelität?

Modellparallelität (oder das Ausführen nicht identischer Programme auf mehreren Kernen innerhalb eines einzelnen Compute Engine-Geräts) wird derzeit in Compute Engine nicht unterstützt.

Wie kann ich den tatsächlichen Wert der Zwischentensoren in Compute Engine prüfen, wie bei tf.Print oder tfdbg?

Diese Funktion wird derzeit in Compute Engine nicht unterstützt. Das für die Entwicklung in Compute Engine vorgeschlagene Verfahren besteht darin, das Modell mit dem Framework TPUEstimator zu implementieren, das einen nahtlosen Übergang zwischen TPU und CPU/GPU ermöglicht (Flag use_tpu). Oft ist zu empfehlen, Probleme Ihrer Modelle auf der CPU/GPU mit den Standardtools von TensorFlow zu beheben und dann zu Compute Engine zu wechseln, wenn Ihr Modell für ein komplettes Training bereit ist.

Mein Trainingsschema ist zu komplex oder spezialisiert für die TPUEstimator API. Gibt es eine untergeordnete API, die ich verwenden kann?

TPUEstimator ist das primäre Framework für Cloud TPU-Training. TPUEstimator umschließt jedoch die tpu API, die Bestandteil des Open-Source-Tools TensorFlow ist. Daher ist es technisch möglich, direkt die Low-Level-API tpu zu verwenden, auch wenn dies nicht unterstützt wird. Wenn die Trainingspipeline eine häufige Kommunikation zwischen Compute Engine und der CPU bzw. häufige Änderungen des Ausführungsgraphen erforderlich macht, können Berechnungen auf Compute Engine nicht effizient ausgeführt werden.