หมวดหมู่: รันไทม์: บัฟเฟอร์อินพุตของโปรแกรมไม่ตรงกัน
ข้อผิดพลาดนี้เกิดขึ้นเมื่อรันไทม์ XLA ตรวจพบว่าขนาดของบัฟเฟอร์หน่วยความจำที่โปรแกรมที่คอมไพล์แล้วคาดหวังไม่ตรงกับขนาดของบัฟเฟอร์ที่ระบุจริงในเวลาที่ดำเนินการ
ตัวอย่างข้อความแสดงข้อผิดพลาด:
XlaRuntimeError: INVALID_ARGUMENT: Executable(jit_embedding_pipeline_step_fn) expected parameter 2482 of size 5242880 (bf16[16,1280,40]{2,1,0:T(8,128)(2,1)}) but got buffer with incompatible size 1638400 (bf16[16,1280,40]{1,2,0:T(8,128)(2,1)}): while running replica 0 and partition 0 of a replicated computation (other replicas may have failed as well).
แบ็กเอนด์ XLA: TPU
ภาพรวม
ข้อความแสดงข้อผิดพลาดจะระบุทั้งขนาดที่คาดไว้และขนาดจริง รวมถึงรูปร่างและเลย์เอาต์ของเทนเซอร์ โปรดทราบว่าข้อผิดพลาดเหล่านี้อาจเกิดขึ้นแม้ว่าเทนเซอร์ 2 รายการจะมีรูปร่างเดียวกัน แต่ขนาดในหน่วยความจำอาจแตกต่างกันหากเลย์เอาต์จริง (วิธีจัดเรียงข้อมูลในฮาร์ดแวร์) แตกต่างกัน
ข้อผิดพลาดเหล่านี้ส่วนใหญ่เกิดจากสาเหตุต่อไปนี้
- การกำหนดค่าจุดตรวจสอบและ XLA ไม่ตรงกัน: มีการฝึกโมเดลและบันทึกจุดตรวจสอบ เลย์เอาต์จริงของน้ำหนักในจุดตรวจสอบนั้น จะกำหนดโดยเวอร์ชันและการกำหนดค่า XLA ที่แน่นอน (เช่น แฟล็ก XLA) ณ เวลานั้น ต่อมา ระบบจะโหลดจุดตรวจสอบนี้ในสภาพแวดล้อมอื่นที่ การกำหนดค่ามีการเปลี่ยนแปลง แฟล็กใหม่ ค่าเริ่มต้นที่แตกต่างกัน หรือการเปลี่ยนแปลงในโมเดล/โค้ด XLA อาจทำให้รันไทม์คาดหวังเลย์เอาต์จริงที่แตกต่างกันสำหรับน้ำหนัก เมื่อส่งบัฟเฟอร์เก่าจากจุดตรวจสอบไปยังโปรแกรม XLA ที่คอมไพล์ใหม่ รันไทม์จะแสดงข้อผิดพลาด
- เลย์เอาต์เฉพาะฮาร์ดแวร์/โทโพโลยี: คอมไพเลอร์ XLA มีอิสระในการเลือก เลย์เอาต์จริงที่แตกต่างกันสำหรับเทนเซอร์เพื่อเพิ่มประสิทธิภาพในฮาร์ดแวร์ต่างๆ เลย์เอาต์ที่เหมาะสำหรับ TPU v4 อาจแตกต่างจาก TPU v5 หรือแม้แต่สำหรับพ็อดสไลซ์ที่แตกต่างกันของชิปเดียวกัน (เช่น 4x4x4 กับ 4x8) ข้อผิดพลาดจะเกิดขึ้นเมื่อคอมไพล์โมเดลโดยมีสมมติฐานเกี่ยวกับเลย์เอาต์ของโทโพโลยีหนึ่ง แต่ในเวลาเรียกใช้จะมีการกำหนดเวลาในโทโพโลยีอื่น หรือมีข้อบกพร่องในตรรกะเลย์เอาต์ของคอมไพเลอร์สำหรับฮาร์ดแวร์บางชิ้น
การแก้ไขข้อบกพร่อง
- ตรวจสอบว่าการกำหนดค่าสอดคล้องกันระหว่างการส่งออกโมเดลและการเรียกใช้ซ้ำจากจุดตรวจสอบ
- หลีกเลี่ยงการใช้จุดตรวจสอบเก่ากับโค้ดใหม่ เว้นแต่คุณจะมั่นใจว่าไม่มีการเปลี่ยนแปลงที่ส่งผลต่อเลย์เอาต์
- หากสงสัยว่ามีเช็คพอยต์/การกำหนดค่าไม่ตรงกัน วิธีแก้ปัญหาที่น่าเชื่อถือที่สุดคือการส่งออกโมเดลที่บันทึกไว้ซ้ำโดยใช้ฐานของโค้ดและการกำหนดค่าเดียวกันทุกประการ (และปัจจุบัน) กับที่คุณใช้สำหรับการอนุมานหรือการปรับแต่ง
- ตรวจสอบการเปลี่ยนแปลงการกำหนดค่า (เช่น แฟล็ก XLA) ระหว่างการเรียกใช้ 2 ครั้ง
- เลย์เอาต์เฉพาะฮาร์ดแวร์/โทโพโลยี
- ตรวจสอบว่าเวอร์ชันฮาร์ดแวร์และโทโพโลยีไม่ตรงกันหรือไม่ หากเปลี่ยนฮาร์ดแวร์ หรือโทโพโลยี