การคอมไพล์ด้วย 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 ในขณะที่ต้องมีการ จำกัด ลูป (หรือปิดการใช้งาน backprop)
ข้อความแสดงข้อผิดพลาด : 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 loops ที่สร้างโดยใช้ tf.while_loop
รองรับ backpropagation โดยการสะสมผลลัพธ์ระดับกลางทั้งหมดใน TensorArray
แต่ XLA รองรับเฉพาะ TensorArray
s ที่มีขอบเขตเท่านั้น
วิธีแก้ปัญหา : ลูปในขณะที่คอมไพล์ทั้งหมดจำเป็นต้องมีพารามิเตอร์ maximum_iterations
ตั้งค่าเป็นค่าคงที่ที่ทราบ ณ เวลาคอมไพล์ หรือปิดใช้งานการเผยแพร่กลับโดยใช้ back_prop=False
ไม่รองรับไดนามิก tf.TensorArray
การเขียนลงใน tf.TensorArray(..., dynamic_size=True)
ไม่สามารถคอมไพล์ด้วย XLA ได้ เนื่องจากการเขียนดังกล่าวจำเป็นต้องมีการจัดสรรใหม่โดยไม่ทราบจำนวนเมื่ออาร์เรย์เกินขอบเขตดั้งเดิม
วิธีแก้ปัญหา : จัดให้มีการเชื่อมโยงที่ทราบแบบคงที่กับอาร์เรย์ของคุณ
การสร้างตัวเลขสุ่มจะละเว้นเมล็ด TF
ขณะนี้ XLA เพิกเฉยต่อเมล็ด TF ไปสู่การดำเนินการแบบสุ่ม สิ่งนี้ส่งผลต่อการดำเนินการสุ่ม TF แบบมีสถานะ เช่น tf.random.normal
หรือ tf.nn.dropout
XLA จะทำงานเหมือนกับว่าการคอมไพล์ถูก seed ด้วย seed ที่ไม่ซ้ำกันใหม่ในการรันแต่ละครั้งภายในกระบวนการเดียวกัน (การรันครั้งแรกของกระบวนการจะให้ผลลัพธ์เดียวกันเสมอ)
วิธีแก้ปัญหา : ใช้ 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
เป็น Python range