รหัสข้อผิดพลาด: E2002

หมวดหมู่: เวลาคอมไพล์: บล็อกและการแบ่งไทล์อินพุต/เอาต์พุตของโมเสกไม่ตรงกัน

ข้อผิดพลาดนี้เกิดขึ้นเมื่อรูปร่างบล็อกของอินพุตหรือเอาต์พุตเคอร์เนลไม่สอดคล้องกับการแบ่งไทล์เริ่มต้นของประเภทข้อมูลในฮาร์ดแวร์ TPU ที่เฉพาะเจาะจงที่ใช้

ตัวอย่างข้อความแสดงข้อผิดพลาด:

UNIMPLEMENTED: Mosaic failed to compile TPU kernel: Failed to set window params
for input 0: Operand of shape (..., 256, 8192) has tiling (16, 128), but its
block shape (..., 8, 8192) is not divisible by tiling evenly nor matches the
full shape.

แบ็กเอนด์ XLA: TPU

ภาพรวม

Tensor Core (TC) ใน TPU มีรีจิสเตอร์เวกเตอร์แบบ 2 มิติ มิติข้อมูลทั้ง 2 รายการเรียกว่าเลนย่อยและเลน เนื่องจากหน่วยประมวลผล TPU (เช่น MXU) ทำงานที่ระดับความละเอียดของรีจิสเตอร์เวกเตอร์ โดยอาร์เรย์ XLA จะจัดวางใน หน่วยความจำ TPU ในไทล์

การปูกระเบื้องนี้ (เช่น 8x128) ลดการเปลี่ยนรูปแบบข้อมูลเมื่อป้อนข้อมูลไปยัง หน่วยประมวลผล ขนาดการแบ่งช่องที่แน่นอน (เลนย่อย × เลน) จะขึ้นอยู่กับ รุ่นของฮาร์ดแวร์และประเภทข้อมูล เช่น การแบ่งไทล์ที่พบบ่อยสำหรับ ประเภทส่วนใหญ่คือ 8×128

ในเวลาคอมไพล์ XLA จะบังคับใช้ข้อจำกัดต่อไปนี้สำหรับมิติข้อมูลย่อยและมิติข้อมูลย่อยที่ 2 ของอินพุต/เอาต์พุตของแต่ละเคอร์เนล

  1. ความสามารถในการหาร: มิติข้อมูลบล็อกต้องเป็นค่าพหุคูณของมิติข้อมูลไทล์ ในเทนเซอร์พื้นฐาน หรือ
  2. ข้อยกเว้นของรูปร่างเต็ม: หากหารมิติข้อมูลบล็อกไม่ลงตัว มิติข้อมูลนั้นต้องเท่ากับขนาดเต็มของมิติข้อมูลนั้นในเทนเซอร์พื้นฐาน

ข้อผิดพลาดนี้จะเกิดขึ้นเมื่อบล็อกละเมิดทั้ง 2 เงื่อนไข เช่น การโหลดบล็อกของรูปร่าง (8, 100) จากอินพุตของรูปร่าง (8, 1024) ใน ฮาร์ดแวร์ที่มีการจัดเรียงรูปร่าง (8, 128) จะล้มเหลวเนื่องจาก 100 หารด้วย 128 และ 100 != 1024 ไม่ลงตัว แต่จะอนุญาตหากรูปร่างอินพุตเป็น (32, 100)

การแก้ไขข้อบกพร่อง

หากต้องการแก้ไขข้อผิดพลาดนี้ ให้ตรวจสอบว่ารูปร่างบล็อกของเคอร์เนลสอดคล้องกับการจัดเรียงฮาร์ดแวร์ปัจจุบัน แก้ไขโค้ดเคอร์เนลเพื่อจัดแนวขนาดบล็อกให้เป็น หลายเท่าของการจัดเรียงที่จำเป็น

  • ตัวอย่าง: หากข้อผิดพลาดระบุว่าการปูกระเบื้องเป็น (16, 128) แต่รูปร่างบล็อกเป็น (8, 128) ให้เปลี่ยนข้อกำหนดของบล็อกเพื่อให้รูปร่างตรงกับ (16, 128)