既知の問題点

XLAを使用してコンパイルすると、プログラムのパフォーマンスを大幅に向上させることができますが、TensorFlow相互運用機能にはいくつかの既知の鋭い角があります。

tf.Variable異なるデバイス上

エラーメッセージINVALID_ARGUMENT: Trying to access resource <Variable> (defined @ <Loc>) located in device CPU:0 from device GPU:0

XLAクラスタは、1つのデバイス上で動作し、それがに読み取りまたは書き込みができませんtf.Variable異なるデバイス上に位置しています。通常、このエラーメッセージは、変数が最初から適切なデバイスに配置されていないことを示しています。エラーメッセージは、問題のある変数の場所を正確に指定する必要があります。

TensorArray TF / XLA相互変換はサポートされていません

エラーメッセージSupport for TensorList crossing the XLA/TF boundary is not implemented

XLAはサポートしてい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秒。

回避策:ループはどちらか持っている必要がありながら、すべてのコンパイル済みmaximum_iterations使用して無効に一定のコンパイル時に既知の値、またはバックプロパゲーションに設定したパラメータをback_prop=False

ダイナミックtf.TensorArrayサポートされていません。

書き込むtf.TensorArray(..., dynamic_size=True)アレイは、元のバウンドを超える場合、そのような書き込みが再割り当ての未知数を必要とする、XLAとコンパイルされません。

回避策:静的に知られているあなたの配列にバインドを提供しています。

乱数生成はTFシードを無視します

XLAは現在、ランダム操作に対するTFシードを無視しています。これは、次のようなステートフルなTFランダム動作に影響tf.random.normal 、又はtf.nn.dropout 。 XLAは、同じプロセス内の各実行でコンパイルに新しい一意のシードがシードされたかのように動作します(プロセスの最初の実行では常に同じ結果が得られます)。

回避策:使用推奨のRNGなどtf.random.stateless_uniformtf.random.Generator直接。