หมวดหมู่: เวลาคอมไพล์: บล็อกและการแบ่งไทล์อินพุต/เอาต์พุตของโมเสกไม่ตรงกัน
ข้อผิดพลาดนี้เกิดขึ้นเมื่อรูปร่างบล็อกของอินพุตหรือเอาต์พุตเคอร์เนลไม่สอดคล้องกับการแบ่งไทล์เริ่มต้นของประเภทข้อมูลในฮาร์ดแวร์ 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 ของอินพุต/เอาต์พุตของแต่ละเคอร์เนล
- ความสามารถในการหาร: มิติข้อมูลบล็อกต้องเป็นค่าพหุคูณของมิติข้อมูลไทล์ ในเทนเซอร์พื้นฐาน หรือ
- ข้อยกเว้นของรูปร่างเต็ม: หากหารมิติข้อมูลบล็อกไม่ลงตัว มิติข้อมูลนั้นต้องเท่ากับขนาดเต็มของมิติข้อมูลนั้นในเทนเซอร์พื้นฐาน
ข้อผิดพลาดนี้จะเกิดขึ้นเมื่อบล็อกละเมิดทั้ง 2 เงื่อนไข เช่น การโหลดบล็อกของรูปร่าง (8, 100) จากอินพุตของรูปร่าง (8, 1024) ใน
ฮาร์ดแวร์ที่มีการจัดเรียงรูปร่าง (8, 128) จะล้มเหลวเนื่องจาก 100 หารด้วย
128 และ 100 != 1024 ไม่ลงตัว แต่จะอนุญาตหากรูปร่างอินพุตเป็น
(32, 100)
การแก้ไขข้อบกพร่อง
หากต้องการแก้ไขข้อผิดพลาดนี้ ให้ตรวจสอบว่ารูปร่างบล็อกของเคอร์เนลสอดคล้องกับการจัดเรียงฮาร์ดแวร์ปัจจุบัน แก้ไขโค้ดเคอร์เนลเพื่อจัดแนวขนาดบล็อกให้เป็น หลายเท่าของการจัดเรียงที่จำเป็น
- ตัวอย่าง: หากข้อผิดพลาดระบุว่าการปูกระเบื้องเป็น
(16, 128)แต่รูปร่างบล็อกเป็น(8, 128)ให้เปลี่ยนข้อกำหนดของบล็อกเพื่อให้รูปร่างตรงกับ(16, 128)