XLAを使用してコンパイルすると、プログラムのパフォーマンスを大幅に向上させることができますが、TensorFlow相互運用機能にはいくつかの既知の鋭い角があります。
TensorArray TF / XLA相互変換はサポートされていません
エラーメッセージ: Support for TensorList crossing the XLA/TF boundary is not implemented
。
XLAはtf.TensorArray
サポートしtf.TensorArray
。ただし、TF表現とXLA表現の間の相互変換はまだ実装されていません。このエラーは、 TensorArray
がコンパイルされたブロック内で使用されているが、導関数が外部で使用されている場合によく発生します。
回避策:導関数を取得している最も外側のスコープをコンパイルします。
TensorFlow whileループを制限する必要がある(またはbackpropを無効にする)
エラーメッセージ: 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ながらループは使用して作成したtf.while_loop
中ですべての中間結果を蓄積することにより、サポートバックプロパゲーションをTensorArray
囲まれた、しかしXLAのみをサポートしていTensorArray
秒。
回避策:コンパイルされたすべてのwhileループでは、 maximum_iterations
パラメーターをコンパイル時に既知の定数値に設定するか、 back_prop=False
を使用してバックプロパゲーションを無効にするback_prop=False
ます。
動的tf.TensorArray
はサポートされていません
tf.TensorArray(..., dynamic_size=True)
書き込みは、XLAでコンパイルできません。このような書き込みでは、配列が元の境界を超えたときに不明な数の再割り当てが必要になるためです。
回避策:静的に既知のバインドを配列に提供します。
乱数生成はTFシードを無視します
XLAは現在、ランダム操作に対するTFシードを無視しています。これは、 tf.random.normal
やtf.nn.dropout
などのステートフルTFランダム操作に影響します。 XLAは、実行ごとにコンパイルに新しい一意のシードがシードされたかのように動作します。この制限は、ステートレスランダム操作には適用されません。
TensorFlowアサートは無視されます
tf.Assert
および同様の関数を使用して作成されたアサーションは、XLAにコンパイルされた場合はnoopsです。適切なアサーションサポートは原則として可能ですが、特定の最適化が不可能になる場合があります(主にアサーションが実行されるバッファーを融合します)。