Kompilasi dengan XLA dapat sangat meningkatkan kinerja program Anda, tetapi interop TensorFlow memiliki sejumlah sudut tajam yang diketahui.
tf.Variable
pada perangkat yang berbeda
Pesan kesalahan : INVALID_ARGUMENT: Trying to access resource <Variable> (defined @ <Loc>) located in device CPU:0 from device GPU:0
Cluster XLA berjalan tepat di satu perangkat, dan tidak dapat membaca atau menulis ke tf.Variable
yang terletak di perangkat yang berbeda. Biasanya pesan kesalahan ini menunjukkan bahwa variabel tidak ditempatkan pada perangkat yang tepat untuk memulai. Pesan kesalahan harus secara tepat menentukan lokasi variabel yang menyinggung.
Interkonversi TensorArray TF/XLA tidak didukung
Pesan kesalahan : Support for TensorList crossing the XLA/TF boundary is not implemented
.
XLA mendukung tf.TensorArray
. Namun, interkonversi antara representasi TF dan XLA belum diterapkan. Kesalahan ini sering muncul ketika TensorArray
digunakan di dalam blok yang dikompilasi, tetapi turunannya diambil di luar.
Solusi : kompilasi lingkup terluar yang mengambil turunan.
TensorFlow while loop perlu dibatasi (atau backprop dinonaktifkan)
Pesan kesalahan : 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 while loop yang dibuat menggunakan tf.while_loop
mendukung backpropagation dengan mengumpulkan semua hasil antara dalam TensorArray
, tetapi XLA hanya mendukung TensorArray
yang dibatasi.
Solusi : semua loop sementara yang dikompilasi harus memiliki parameter maximum_iterations
yang disetel ke nilai konstan yang diketahui pada waktu kompilasi, atau backpropagation dinonaktifkan menggunakan back_prop=False
.
tf.TensorArray
dinamis tidak didukung
Penulisan ke tf.TensorArray(..., dynamic_size=True)
tidak dapat dikompilasi dengan XLA, karena penulisan tersebut memerlukan jumlah realokasi yang tidak diketahui ketika array melebihi batas aslinya.
Solusi : berikan ikatan yang diketahui secara statis ke array Anda.
Pembuatan nomor acak mengabaikan benih TF
XLA saat ini mengabaikan benih TF untuk operasi acak. Ini memengaruhi operasi acak TF stateful, seperti tf.random.normal
, atau tf.nn.dropout
. XLA akan berperilaku seolah-olah kompilasi diunggulkan dengan benih unik baru di setiap proses dalam proses yang sama (proses yang pertama dijalankan akan selalu menghasilkan hasil yang sama).
Solusi : gunakan RNG yang direkomendasikan seperti tf.random.stateless_uniform
atau tf.random.Generator
secara langsung.
Input yang harus konstan yang merupakan fungsi dari variabel induksi tidak didukung
Pesan Kesalahan : 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 memerlukan nilai tertentu untuk diketahui pada waktu kompilasi, seperti sumbu reduksi dari operasi reduksi, atau dimensi transposisi. Pertimbangkan kasus ketika misalnya sumbu reduksi didefinisikan sebagai fungsi dari variabel induksi tf.range
: menyelesaikannya secara statis tidak mungkin tanpa membuka gulungan seluruh loop, yang mungkin tidak diinginkan oleh pengguna.
Solusi : Buka gulungan loop, misalnya dengan mengubah tf.range
menjadi range
Python .