Благодарим за настройку Google I/O. Посмотреть все сеансы по запросу Смотреть по запросу

Известные проблемы

Компиляция с помощью XLA может значительно повысить производительность ваших программ, но взаимодействие TensorFlow имеет ряд известных острых углов.

tf.Variable на другом устройстве

Сообщение об ошибке : INVALID_ARGUMENT: Trying to access resource <Variable> (defined @ <Loc>) located in device CPU:0 from device GPU:0

Кластер XLA работает ровно на одном устройстве и не может читать или писать в tf.Variable расположенную на другом устройстве. Обычно это сообщение об ошибке указывает на то, что переменная изначально не была помещена на нужное устройство. В сообщении об ошибке должно быть точно указано местоположение вызывающей ошибку переменной.

Взаимное преобразование TensorArray TF/XLA не поддерживается.

Сообщение об ошибке : Support for TensorList crossing the XLA/TF boundary is not implemented .

XLA поддерживает tf.TensorArray . Однако взаимное преобразование между представлениями TF и ​​XLA еще не реализовано. Эта ошибка часто возникает, когда TensorArray используется внутри скомпилированного блока, а производная выносится наружу.

Обходной путь : скомпилируйте самую внешнюю область видимости, которая принимает производную.

Циклы TensorFlow while должны быть ограничены (или отключено обратное распространение)

Сообщение об ошибке : 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 .

Циклы while TF, созданные с помощью tf.while_loop поддерживают обратное распространение, накапливая все промежуточные результаты в TensorArray , но XLA поддерживает только ограниченные TensorArray .

Обходной путь: во всех скомпилированных циклах while необходимо либо установить для параметра 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_uniform или tf.random.Generator напрямую.

Должны быть постоянными входы, которые являются функциями переменных индукции, не поддерживаются

Сообщение об ошибке: 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 требует, чтобы определенные значения были известны во время компиляции, например, ось уменьшения операции сокращения или размеры транспонирования. Рассмотрим случай, когда, например, ось уменьшения определяется как функция индукционной переменной tf.range : ее статическое разрешение невозможно без развертывания всего цикла, что может быть нежелательно для пользователя.

Обходной путь: разверните циклы, например, путем преобразования tf.range в range Python.