Problemi noti

La compilazione con XLA può migliorare notevolmente le prestazioni dei tuoi programmi, ma l'interoperabilità TensorFlow ha una serie di noti spigoli vivi.

tf.Variable su un dispositivo diverso

Messaggio di errore : INVALID_ARGUMENT: Trying to access resource <Variable> (defined @ <Loc>) located in device CPU:0 from device GPU:0

Il cluster XLA viene eseguito esattamente su un dispositivo e non può leggere o scrivere su tf.Variable che si trova su un dispositivo diverso. Di solito questo messaggio di errore indica che la variabile non è stata posizionata sul dispositivo giusto per cominciare. Il messaggio di errore dovrebbe specificare con precisione la posizione della variabile incriminata.

L'interconversione TensorArray TF/XLA non è supportata

Messaggio di errore : Support for TensorList crossing the XLA/TF boundary is not implemented .

XLA supporta tf.TensorArray . Tuttavia, l' interconversione tra le rappresentazioni TF e XLA non è ancora implementata. Questo errore si verifica spesso quando TensorArray viene utilizzato all'interno del blocco compilato, ma la derivata viene presa all'esterno.

Soluzione alternativa : compilare l'ambito più esterno che sta prendendo la derivata.

TensorFlow mentre i loop devono essere limitati (o avere il backprop disabilitato)

Messaggio di errore : 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 .

I cicli TF while creati utilizzando tf.while_loop supportano la backpropagation accumulando tutti i risultati intermedi in un TensorArray , ma XLA supporta solo TensorArray limitati.

Soluzione alternativa : tutti i cicli compilati mentre devono avere il parametro maximum_iterations impostato su un valore costante noto in fase di compilazione o la backpropagation disabilitata usando back_prop=False .

Dynamic tf.TensorArray non è supportato

Le scritture in tf.TensorArray(..., dynamic_size=True) non sono compilabili con XLA, poiché tali scritture richiedono un numero sconosciuto di riallocazioni quando l'array supera il limite originale.

Soluzione alternativa : fornisci un limite staticamente noto ai tuoi array.

La generazione di numeri casuali ignora il seme TF

XLA attualmente ignora i semi TF per operazioni casuali. Ciò influisce sulle operazioni casuali TF con stato, come tf.random.normal o tf.nn.dropout . XLA si comporterà come se la compilazione fosse stata seminata con un nuovo seme univoco ad ogni esecuzione all'interno dello stesso processo (la prima esecuzione del processo produrrà sempre lo stesso risultato).

Soluzione alternativa : utilizzare direttamente gli RNG consigliati come tf.random.stateless_uniform o tf.random.Generator .

Gli input devono essere costanti che sono funzioni di variabili di induzione non sono supportati

Messaggio di errore : 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 richiede che alcuni valori siano noti in fase di compilazione, come l'asse di riduzione di un'operazione di riduzione o le dimensioni di trasposizione. Si consideri il caso in cui ad esempio l'asse di riduzione è definito come una funzione di una variabile di induzione di tf.range : risolverlo staticamente non è possibile senza srotolare l'intero ciclo, cosa che potrebbe non essere desiderata dall'utente.

Soluzione alternativa : srotolare i loop, ad esempio convertendo tf.range in Python range .