La compilación con XLA puede mejorar en gran medida el rendimiento de sus programas, pero la interoperabilidad de TensorFlow tiene una serie de esquinas afiladas conocidas.
tf.Variable
en un dispositivo diferente
Mensaje de error : INVALID_ARGUMENT: Trying to access resource <Variable> (defined @ <Loc>) located in device CPU:0 from device GPU:0
El clúster XLA se ejecuta exactamente en un dispositivo y no puede leer ni escribir en tf.Variable
. Variable ubicada en un dispositivo diferente. Por lo general, este mensaje de error indica que, para empezar, la variable no se colocó en el dispositivo correcto. El mensaje de error debe especificar con precisión la ubicación de la variable infractora.
No se admite la interconversión de TensorArray TF/XLA
Mensaje de error : Support for TensorList crossing the XLA/TF boundary is not implemented
.
XLA es compatible con tf.TensorArray
. Sin embargo, la interconversión entre representaciones TF y XLA aún no está implementada. Este error a menudo surge cuando TensorArray
se usa dentro del bloque compilado, pero la derivada se toma fuera.
Solución alternativa : compile el alcance más externo que está tomando la derivada.
TensorFlow mientras que los bucles deben estar delimitados (o tener backprop deshabilitado)
Mensaje de error : 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
.
Los bucles while de TF creados con tf.while_loop
admiten la propagación hacia atrás mediante la acumulación de todos los resultados intermedios en un TensorArray
, pero XLA solo admite TensorArray
limitado.
Solución alternativa : todos los bucles while compilados deben tener el parámetro maximum_iterations
establecido en un valor constante conocido en el momento de la compilación, o la propagación hacia atrás deshabilitada usando back_prop=False
.
No se admite tf.TensorArray
dinámico
Las escrituras en tf.TensorArray(..., dynamic_size=True)
no se pueden compilar con XLA, ya que tales escrituras requieren un número desconocido de reasignaciones cuando la matriz excede el límite original.
Solución alternativa : proporcione un límite conocido estáticamente a sus arreglos.
La generación de números aleatorios ignora la semilla TF
XLA actualmente ignora las semillas de TF para operaciones aleatorias. Esto afecta a las operaciones aleatorias de TF con estado, como tf.random.normal
o tf.nn.dropout
. XLA se comportará como si la compilación se sembrara con una nueva semilla única en cada ejecución dentro del mismo proceso (la primera ejecución del proceso siempre arrojará el mismo resultado).
Solución alternativa : use los RNG recomendados , como tf.random.stateless_uniform
o tf.random.Generator
directamente.
Las entradas que deben ser constantes que son funciones de variables de inducción no son compatibles
Mensaje de error : 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 requiere que se conozcan ciertos valores en el momento de la compilación, como el eje de reducción de una operación de reducción o las dimensiones de transposición. Considere el caso cuando, por ejemplo, el eje de reducción se define como una función de una variable de inducción de tf.range
: no es posible resolverlo estáticamente sin desenrollar todo el ciclo, lo que podría no ser deseado por el usuario.
Solución alternativa : desenrolle los bucles, por ejemplo, convirtiendo tf.range
en Python range
.