Weź udział w sympozjum Women in ML 7 grudnia Zarejestruj się teraz

Znane problemy

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

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 dokładnie na jednym urządzeniu i nie może odczytywać ani zapisywać do tf.Variable znajdującej 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 konwersja między reprezentacjami TF i XLA nie została jeszcze zaimplementowana. Ten błąd często pojawia się, gdy TensorArray jest używany wewnątrz skompilowanego bloku, ale pochodna jest pobierana na zewnątrz.

Obejście : skompiluj najbardziej zewnętrzny zakres, który pobiera 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 .

Pętle while TF utworzone przy użyciu tf.while_loop obsługują propagację wsteczną, gromadząc wszystkie wyniki pośrednie w TensorArray , ale XLA obsługuje tylko ograniczone TensorArray .

Obejście : wszystkie skompilowane pętle while muszą albo mieć parametr maximum_iterations ustawiony na stałą wartość znaną w czasie kompilacji, albo propagację wsteczną wyłączoną przy użyciu back_prop=False .

Dynamiczny tf.TensorArray nie jest obsługiwany

Zapisy w tf.TensorArray(..., dynamic_size=True) nie są kompilowalne z XLA, ponieważ takie zapisy wymagają nieznanej liczby relokacji, gdy tablica przekracza oryginalną granicę.

Obejście : podaj statycznie znane powiązanie z tablicami.

Generowanie liczb losowych ignoruje ziarno TF

XLA obecnie ignoruje seedy TF do operacji losowych. Ma to wpływ na stanowe operacje losowe TF, takie 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żyj zalecanych RNG , takich jak tf.random.stateless_uniform lub tf.random.Generator bezpośrednio.

Wejścia muszą być stałe, które są funkcjami zmiennych indukcyjnych, nie są obsługiwane

Komunikat o błędzie: XLA compilation requires that operator arguments that represent shapes or dimensions be evaluated to concrete values at compile time. This error means that a shape or dimension argument could not be evaluated at compile time, usually because the value of the argument depends on a parameter to the computation, on a variable, or on a stateful operation such as a random number generator .

XLA wymaga, aby pewne wartości były znane w czasie kompilacji, takie jak oś redukcji operacji redukcji lub wymiary transpozycji. Rozważmy przypadek, w którym np. oś redukcji zdefiniowana jest jako funkcja zmiennej indukcyjnej tf.range : jej statyczne rozwiązanie nie jest możliwe bez rozwinięcia całej pętli, co może nie być pożądane przez użytkownika.

Obejście : Rozwiń pętle, np. konwertując tf.range na range Pythona .