Znane problemy

Kompilacja z XLA może znacznie poprawić wydajność twoich programów, ale interop TensorFlow ma wiele znanych ostrych narożników.

tf.Variable na innym urządzeniu

Komunikat o błędzie: INVALID_ARGUMENT: Trying to access resource <Variable> (defined @ <Loc>) located in device CPU:0 from device GPU:0

Klaster XLA działa na dokładnie jedno urządzenie, a to nie może odczytać lub zapisać tf.Variable znajduje się na innym urządzeniu. Zwykle ten komunikat o błędzie wskazuje, że zmienna nie została umieszczona na właściwym urządzeniu na początku. Komunikat o błędzie powinien dokładnie określać lokalizację naruszającej zmiennej.

Konwersja TensorArray TF/XLA nie jest obsługiwana

Komunikat o błędzie: Support for TensorList crossing the XLA/TF boundary is not implemented .

XLA obsługuje tf.TensorArray . Jednak przemiana pomiędzy TF i XLA reprezentacji nie jest jeszcze zaimplementowana. Ten błąd często pojawia się, gdy TensorArray jest używany wewnątrz skompilowanego bloku, ale pochodna jest wyprowadzona na zewnątrz.

Rozwiązanie: opracowania zakresu zewnętrzną, która bierze pochodną.

TensorFlow while pętle muszą być ograniczone (lub mają wyłączone backprop)

Komunikat o błędzie: 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 natomiast pętle utworzone za pomocą tf.while_loop pomocy wstecznej gromadząc wszystkie wyniki pośrednie w TensorArray , ale XLA obsługuje tylko ograniczona TensorArray S.

Obejście: wszystkie skompilowane natomiast pętle trzeba albo mieć maximum_iterations zestaw parametrów do wartości stałej znany w czasie kompilacji, lub wstecznej wyłączona za pomocą back_prop=False .

Dynamiczny tf.TensorArray nie jest obsługiwany

Zapisze tf.TensorArray(..., dynamic_size=True) nie są compilable z XLA, ponieważ takie zapisy wymagają nieznaną liczbę przesunięć gdy tablica przekracza oprawionego oryginału.

Obejście: dostarczenie statycznie znany zobowiązany do swoich tablic.

Generowanie liczb losowych ignoruje ziarno TF

XLA obecnie ignoruje seedy TF do operacji losowych. Wpływa to stanowe TF losowych operacji, takich jak tf.random.normal lub tf.nn.dropout . XLA będzie zachowywać się tak, jakby kompilacja została zaszczepiona nowym unikalnym ziarnem przy każdym uruchomieniu tego samego procesu (pierwsze uruchomienie procesu zawsze da ten sam wynik).

Obejście: użyć zalecanych RNGs takie jak tf.random.stateless_uniform lub tf.random.Generator bezpośrednio.