ปัญหาที่ทราบ

การคอมไพล์ด้วย 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