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.