Bekannte Probleme

Das Kompilieren mit XLA kann die Leistung Ihrer Programme erheblich verbessern, aber das TensorFlow-Interop weist eine Reihe bekannter scharfer Ecken auf.

Die TensorArray TF / XLA-Interkonvertierung wird nicht unterstützt

Fehlermeldung : Die Support for TensorList crossing the XLA/TF boundary is not implemented .

XLA unterstützt tf.TensorArray . Die gegenseitige Umwandlung zwischen TF- und XLA-Darstellungen ist jedoch noch nicht implementiert. Dieser Fehler tritt häufig auf, wenn das TensorArray innerhalb des kompilierten Blocks verwendet wird, die Ableitung jedoch außerhalb.

Problemumgehung : Kompilieren Sie den äußersten Bereich, der die Ableitung verwendet.

TensorFlow while-Schleifen müssen begrenzt werden (oder Backprop deaktiviert haben)

Fehlermeldung : Für die XLA compilation requires a fixed tensor list size. Set the max number of elements. This could also happen if you're using a TensorArray in a while loop that does not have its maximum_iteration set, you can fix this by setting maximum_iteration to a suitable value .

TF while- Schleifen, die mit tf.while_loop erstellt wurden, unterstützen die Backpropagation, indem alle Zwischenergebnisse in einem TensorArray werden. XLA unterstützt jedoch nur begrenzte TensorArray .

Problemumgehung : Für alle kompilierten while-Schleifen muss entweder der Parameter maximum_iterations auf einen zur Kompilierungszeit bekannten konstanten Wert gesetzt oder die Backpropagation mit back_prop=False deaktiviert werden.

Dynamic tf.TensorArray wird nicht unterstützt

tf.TensorArray(..., dynamic_size=True) in tf.TensorArray(..., dynamic_size=True) nicht mit XLA kompiliert werden, da solche Schreibvorgänge eine unbekannte Anzahl von Neuzuweisungen erfordern, wenn das Array die ursprüngliche Grenze überschreitet.

Problemumgehung : Geben Sie eine statisch bekannte Bindung an Ihre Arrays an.

Die Zufallszahlengenerierung ignoriert TF-Seed

XLA ignoriert derzeit TF-Seeds für zufällige Operationen. Dies wirkt sich auf zustandsbehaftete TF-Zufallsoperationen aus, z. B. tf.random.normal oder tf.nn.dropout . XLA verhält sich so, als ob die Kompilierung bei jedem Lauf mit einem neuen eindeutigen Startwert versehen wurde. Diese Einschränkung gilt nicht für zustandslose Zufallsoperationen.

TensorFlow-Asserts werden ignoriert

Mit tf.Assert und ähnlichen Funktionen erstellte tf.Assert sind beim Kompilieren in XLA noops. Eine ordnungsgemäße Unterstützung von Zusicherungen ist im Prinzip möglich, kann jedoch bestimmte Optimierungen unmöglich machen (hauptsächlich das Zusammenführen des Puffers, für den die Zusicherung durchgeführt wird).

Nicht deterministische Ausgabe

Bei CPU und GPU ist die Ausgabe möglicherweise nicht deterministisch (wie bei TF).

Problemumgehung : Um Determinismus zu erzwingen, setzen Sie die Umgebungsvariable TF_DETERMINISTIC_OPS auf 1 (wie bei TF).