หมวดหมู่: รันไทม์: แกนกลางหยุดทำงานโดยไม่คาดคิด
ข้อผิดพลาดนี้บ่งชี้ว่าแกน TPU หยุดการดำเนินการ คำสั่งก่อนเวลาอันควร นี่คือสถานะข้อผิดพลาดร้ายแรงที่ฮาร์ดแวร์บังคับให้หยุดทำงานเนื่องจากข้อบกพร่องที่กู้คืนไม่ได้ การละเมิดข้อจำกัดของฮาร์ดแวร์ หรือการขัดจังหวะโดยเจตนาที่เกิดจากการยืนยันรันไทม์ที่คอมไพเลอร์สร้างขึ้น
ตัวอย่างข้อความแสดงข้อผิดพลาด:
INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:1:0x1d9 ...
แบ็กเอนด์ XLA: TPU
ภาพรวม
XLA จะคอมไพล์โปรแกรม JAX เป็นลำดับของคำสั่งแอสเซมบลีระดับต่ำ ในรันไทม์ อุปกรณ์ TPU จะดำเนินการตามคำสั่งเหล่านี้ตามลำดับ ข้อผิดพลาด "Core Halted Unexpectedly" เกิดขึ้นเมื่อฮาร์ดแวร์ TPU พบเงื่อนไขที่กู้คืนไม่ได้ซึ่งทำให้ไม่สามารถดำเนินการต่อได้ และบังคับให้แกนเข้าสู่สถานะ "HALTED" ที่ร้ายแรง
เนื่องจากข้อผิดพลาดนี้อาจเกิดจากความล้มเหลวของฮาร์ดแวร์จริง บั๊กของคอมไพเลอร์ หรือ ปัญหาเกี่ยวกับโค้ดของผู้ใช้ (โดยเฉพาะในเคอร์เนลที่กำหนดเอง) คุณจึงต้องวิเคราะห์ ข้อความบันทึกอย่างละเอียดเพื่อระบุสาเหตุที่เฉพาะเจาะจง
การแก้ไขข้อบกพร่อง
หากต้องการแก้ไขข้อผิดพลาดนี้ คุณต้องระบุสถานการณ์ใดใน 3 สถานการณ์ที่เฉพาะเจาะจง เป็นสาเหตุที่ทำให้หยุดทำงานโดยไม่คาดคิดก่อน ตรวจสอบบันทึกเพื่อดูข้อความ ลายเซ็นที่เฉพาะเจาะจงตามที่อธิบายไว้ด้านล่าง
สถานการณ์ที่ 1: โครงสร้างพื้นฐานล้มเหลว (ฮาร์ดแวร์/เครือข่าย/ไฟฟ้า)
ลายเซ็น: บันทึกระบุอย่างชัดเจนว่า observed errors are: [Network] หรือ
observed errors are: [Power] หรือ observed errors are: [Hardware]
ข้อความนี้บ่งบอกถึงความล้มเหลวของโครงสร้างพื้นฐานทางกายภาพที่ไม่เกี่ยวข้องกับซอฟต์แวร์หรือ ตรรกะของโมเดล ชิป TPU, โครงสร้างเครือข่ายที่เชื่อมต่อชิป หรือ แหล่งจ่ายไฟล้มเหลว
- ลองงานอีกครั้ง: หากปัญหาเกิดจากแรงดันไฟฟ้าตกชั่วคราวหรือเครือข่าย ไม่เสถียร การลองอีกครั้งอาจช่วยได้
- ระบุและนำโหนดที่ไม่ดีออก: หากข้อผิดพลาดยังคงเกิดขึ้นในงานหรือโฮสต์เดียวกัน เฉพาะ แสดงว่าฮาร์ดแวร์อาจมีข้อบกพร่อง ใช้เครื่องมือการจัดการคลัสเตอร์เพื่อ "ระบาย"/"กักกัน" โหนดที่ได้รับผลกระทบและรีสตาร์ทงานในโหนดที่ทำงานได้
สถานการณ์ที่ 2: การละเมิดข้อจำกัดด้านฮาร์ดแวร์
ลายเซ็น: บันทึกระบุว่า observed errors are: [User]
ซึ่งบ่งชี้ว่าคอมไพเลอร์ XLA สร้างคำสั่งที่ละเมิดข้อจำกัดด้านฮาร์ดแวร์ที่ ละเมิดไม่ได้ (เช่น คำสั่งที่พยายามเข้าถึง ที่อยู่หน่วยความจำที่อยู่นอกขอบเขตในหน่วยความจำ HBM หรือ Scratchpad) แม้จะมีป้ายกำกับว่า "ผู้ใช้" แต่สาเหตุของปัญหานี้มักไม่ได้เกิดจากโค้ดระดับสูงของผู้ใช้
- รายงานข้อบกพร่องของ XLA: ข้อบกพร่องนี้อาจเป็นข้อบกพร่องของคอมไพเลอร์ คอมไพเลอร์ไม่ควร ปล่อยคำสั่งที่ละเมิดข้อกำหนดของฮาร์ดแวร์ โปรดส่งรายงานข้อบกพร่อง
สถานการณ์ที่ 3: การยืนยันที่ล้มเหลวซึ่งคอมไพเลอร์ XLA สร้างขึ้น
ลายเซ็น: ข้อความแสดงข้อผิดพลาดมีรายละเอียดเฉพาะเกี่ยวกับการยืนยันที่คอมไพเลอร์สร้างขึ้นซึ่งไม่สำเร็จ มองหาคีย์เวิร์ดต่อไปนี้
BoundsCheckschecknescheckeqscheckltscheckgescheckbetween
ซึ่งบ่งชี้ว่าการยืนยันที่คอมไพเลอร์สร้างขึ้นในโปรแกรมที่คอมไพล์แล้ว ไม่สำเร็จในระหว่างการดำเนินการ วิเคราะห์ข้อความแสดงข้อผิดพลาดที่เฉพาะเจาะจง เพื่อระบุประเภทย่อย
สถานการณ์ที่ 3.A: การเปิดตัวกลุ่มไม่ตรงกัน
ตัวอย่างข้อความแสดงข้อผิดพลาด:
Core halted unexpectedly: INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:1:0x1d9 (from TensorCoreSequencer:1:0x309): scheckne: An unexpected leader shows up in the launch group with a different launch id than the current group leader.
สาเหตุ: ข้อผิดพลาดนี้มักเกิดขึ้นในสภาพแวดล้อม TPU แบบหลายโฮสต์ ซึ่งบ่งชี้ว่าแกน TPU ที่คาดว่าจะเรียกใช้โปรแกรมเดียวกันในลักษณะที่ซิงค์กัน (เป็นส่วนหนึ่งของ "กลุ่มการเปิดตัว") ไม่ได้ซิงค์กันแล้ว กล่าวโดยละเอียดคือ แกน TPU เข้าร่วมกลุ่มการซิงค์ที่มีตัวระบุโปรแกรมแตกต่างจาก หัวหน้ากลุ่มปัจจุบัน ซึ่งบ่งบอกว่าโปรแกรมในโฮสต์ไม่สอดคล้องกัน
- ยืนยันสถานะ XLA: ตรวจสอบว่าโฮสต์ทั้งหมดใช้
XLA_FLAGSเดียวกัน - โปรแกรม Jax ที่สอดคล้องกัน: ตรวจสอบว่าโฮสต์ทั้งหมดเรียกใช้โปรแกรม Jax เดียวกัน ตรวจสอบอิมเมจ Docker, เวอร์ชัน libtpu ฯลฯ
สถานการณ์ 3.B: การตรวจสอบขอบเขตล้มเหลว
ตัวอย่างข้อความแสดงข้อผิดพลาด:
Core halted unexpectedly: INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:23:0x292 (from TensorCoreSequencer:23:0xd74a): BoundsCheck 92 [deref of %s931] for %937 = dma.hbm_to_vmem [thread:$0] /*hbm=*/%s931, /*size_in_granules=*/16384, /*vmem=*/%s935, /*dst_syncflagno=*/%s860, /*src_stride=*/512, /*dst_stride=*/128, /*steps_per_stride=*/8
สาเหตุ: โปรแกรมพยายามเข้าถึงหน่วยความจำนอกขอบเขตที่จัดสรรไว้ ข้อความแสดงข้อผิดพลาดมักจะมีรายละเอียดเกี่ยวกับประเภทการเข้าถึงหน่วยความจำ (เช่น dma.hbm_to_vmem) และการคำนวณที่อยู่
- แก้ไขข้อบกพร่องของเคอร์เนลที่กำหนดเอง: หากใช้ Pallas ให้ตรวจสอบการคำนวณดัชนี
ใช้
pl.debug_printหรือcheckifyเพื่อตรวจสอบดัชนีเทนเซอร์ - ตรวจสอบการแบ่งกลุ่ม: ตรวจสอบว่าคำอธิบายประกอบการแบ่งกลุ่มสอดคล้องกับรูปร่างของเทนเซอร์
สถานการณ์ที่ 3.C: การซิงค์ Mosaic/Pallas
ตัวอย่างข้อความแสดงข้อผิดพลาด:
Core halted unexpectedly: INTERNAL: Accelerator device halted prematurely, perhaps due to an on-device check-failure. Node 0 halted unexpectedly at tag:pc TensorCoreSequencer:21:0xae5 (from TensorCoreSequencer:21:0x54c5): Semaphore (scratch argument 1) has a nonzero value upon exit from a Mosaic kernel. Make sure every DMA is awaited, and every semaphore signal is paired with a wait.
สาเหตุ: ข้อผิดพลาดนี้เกิดขึ้นกับโค้ดที่คอมไพเลอร์ Mosaic สร้างขึ้น (ซึ่ง Pallas JAX ใช้) โดยเฉพาะ ซึ่งบ่งบอกถึงปัญหาการซิงค์ภายในเคอร์เนลที่กำหนดเอง TPU ใช้ Semaphore เพื่อจัดการการขึ้นต่อกัน (เช่น ตรวจสอบว่า DMA เสร็จสมบูรณ์ก่อน ใช้งาน) ข้อผิดพลาดนี้บ่งชี้ว่าไม่ได้รอสัญญาณบน Semaphore อย่างถูกต้อง
- การซิงค์การตรวจสอบ: ตรวจสอบว่า
dma_startทุกรายการมีdma_waitที่สอดคล้องกัน - ตรวจสอบ Semaphore: ยืนยันว่าสัญญาณและรอดำเนินการของ Semaphore จับคู่กันอย่างเคร่งครัด
ปัญหาที่ไม่มีหมวดหมู่
หากบันทึกข้อผิดพลาดไม่ตรงกับสถานการณ์ที่ 1, 2 หรือ 3 (เช่น ไม่มี "observed errors" ไม่มีแท็ก "scheck" และไม่มีข้อความขอบเขต/Semaphore ที่เฉพาะเจาะจง) ให้ทำดังนี้
- การดำเนินการ: ปัญหานี้อาจเป็นข้อบกพร่องภายในของ XLA โปรดส่งรายงานข้อบกพร่อง