Häufig gestellte Fragen – Cloud TPU auf TensorFlow

Welche Modelle werden von Cloud TPU unterstützt? Eine Liste der unterstützten Modelle finden Sie unter Offizielle unterstützte Modelle.

Kann ich eine Cloud TPU für die Inferenz verwenden? Mit der Keras-Methode tf.keras.Model.predict können Sie Inferenz für ein Modell ausführen, das auf Cloud TPU trainiert wurde.

Sind in TensorFlow Operationen integriert, die in Cloud TPU nicht verfügbar sind?

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

Kann ich ein RL-Modell (Reinforcement Learning) mit einer TPU 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 Cloud TPU zurückbleibt und diese Herangehensweise damit sehr ineffizient ist.

Kann ich Einbettungen mit einer Cloud TPU verwenden?

Ja. Sie können die TPUEinbettungsebene verwenden, um Einbettungen in Keras-Modellen zu unterstützen. In benutzerdefinierten Ebenen und Modellen können Sie tf.nn.embedding_lookup() verwenden.

Kann ich Sequenzen variabler Länge mit einer Cloud TPU 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 Cloud TPU 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 ein Recurrent Neural Network (RNN) auf einer TPU trainieren?

Ja. Zum Trainieren eines RNN mit TensorFlow verwenden Sie Keras RNN-Ebenen.

Kann ich ein generatives kontradiktorisches Netzwerk (Generative Adversarial Network, GAN) mit einer Cloud TPU trainieren?

Das Trainieren von GANs erfordert in der Regel 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 ein Multi-Task-Lernmodell mit einer Cloud TPU 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 Cloud TPU den Eager-Modus von TensorFlow?

In TensorFlow können Nutzer einen @tf.function-Decorator verwenden, um in XLA zu kompilieren und die TPU mit dem Eager-Modus von TensorFlow zu verwenden.

Unterstützt Cloud TPU Modellparallelität?

Cloud TPU unterstützt die SPMM-basierte Modellparallelität (Single Program Multiple Data):

  • Bei der räumlichen Partitionierung in TensorFlow 2.x wird die Verwendung von TPUStrategy'sexperimental_split_to_logical_devices() für den Tensor, der für die räumliche Partitionierung aufgeteilt werden soll, und durch Festlegen von experimental_spmd_xla_partitioning=True unterstützt.
  • in JAX über pjit

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

Diese Funktion wird derzeit von Cloud TPU nicht unterstützt. Oft ist zu empfehlen, Probleme Ihrer Modelle auf der CPU/GPU mit TensorBoard zu beheben und dann zu Cloud TPU zu wechseln, wenn Ihr Modell für das vollständige Skalierungstraining bereit ist.

Meine Trainingsanforderungen sind zu komplex oder spezialisiert für die Keras compile/fit API. Gibt es eine untergeordnete API, die ich verwenden kann?

Wenn Sie eine niedrigere Kontrolle bei der Verwendung von TensorFlow benötigen, können Sie benutzerdefinierte Trainingsschleifen verwenden. In der TensorFlow-Dokumentation wird beschrieben, wie Sie benutzerdefinierte Trainingsschleifen speziell mit TPUs und für den allgemeineren Fall mit tf.distribute verwenden.