หมวดหมู่: รันไทม์: แกนกลางหยุดทำงานโดยไม่คาดคิด
ข้อผิดพลาดนี้บ่งชี้ว่าแกน 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: โครงสร้างพื้นฐานล้มเหลว (ฮาร์ดแวร์/เครือข่าย/ไฟฟ้า)
- "ข้อผิดพลาดที่พบคือ: [ผู้ใช้]": แสดงว่ามีการละเมิดข้อจำกัดของฮาร์ดแวร์ → ข้ามไปที่ สถานการณ์ที่ 2: การละเมิดข้อจำกัดด้านฮาร์ดแวร์
ข้อความแสดงข้อผิดพลาดมีรายละเอียดที่เฉพาะเจาะจง เช่น คีย์เวิร์ดต่อไปนี้
BoundsCheck,scheckne,scheckeq,schecklt,scheckge,scheckbetweenซึ่งบ่งชี้ว่าการยืนยันที่คอมไพเลอร์สร้างขึ้นในโปรแกรมที่คอมไพล์ ล้มเหลวระหว่างการดำเนินการ → ข้ามไปที่ สถานการณ์ที่ 3: การยืนยันที่คอมไพเลอร์ XLA สร้างขึ้นล้มเหลว
สถานการณ์ที่ 1: โครงสร้างพื้นฐานล้มเหลว (ฮาร์ดแวร์/เครือข่าย/ไฟฟ้า)
ลายเซ็น: บันทึกระบุอย่างชัดเจนว่า observed errors are: [Hardware] หรือ
observed errors are: [Network] หรือ observed errors are: [Power]
ซึ่งบ่งบอกถึงความล้มเหลวของโครงสร้างพื้นฐานทางกายภาพที่ไม่เกี่ยวข้องกับซอฟต์แวร์หรือ ตรรกะของโมเดล ชิป TPU, โครงสร้างเครือข่ายที่เชื่อมต่อชิป หรือ แหล่งจ่ายไฟล้มเหลว
- ลองส่งงานอีกครั้ง: หากปัญหาเกิดจากแรงดันไฟฟ้าตกชั่วคราวหรือเครือข่ายไม่เสถียร การลองส่งอีกครั้งอาจช่วยได้
- ระบุและนำโหนดที่ไม่ดีออก: หากข้อผิดพลาดยังคงเกิดขึ้นในงานหรือโฮสต์เดียวกัน เฉพาะเจาะจง แสดงว่าฮาร์ดแวร์อาจมีข้อบกพร่อง ใช้เครื่องมือการจัดการคลัสเตอร์เพื่อ "ระบาย"/"กักกัน" โหนดที่ได้รับผลกระทบและรีสตาร์ทงานในโหนดที่ทำงานได้
สถานการณ์ที่ 2: การละเมิดข้อจำกัดด้านฮาร์ดแวร์
ลายเซ็น: บันทึกระบุว่า observed errors are: [User]
ซึ่งบ่งชี้ว่าคอมไพเลอร์ XLA สร้างคำสั่งที่ละเมิดข้อจำกัดด้านฮาร์ดแวร์ที่ละเมิดไม่ได้ (เช่น คำสั่งที่พยายามเข้าถึงที่อยู่หน่วยความจำที่อยู่นอกขอบเขตในหน่วยความจำ HBM หรือ Scratchpad) แม้จะมีป้ายกำกับว่า "ผู้ใช้" แต่สาเหตุของปัญหานี้มักไม่ได้เกิดจากโค้ดระดับสูงของผู้ใช้
- รายงานข้อบกพร่องของ XLA: นี่อาจเป็นข้อบกพร่องของคอมไพเลอร์ คอมไพเลอร์ไม่ควร ปล่อยคำสั่งที่ละเมิดข้อกำหนดของฮาร์ดแวร์ โปรดส่งรายงานข้อบกพร่อง
สถานการณ์ที่ 3: การยืนยันที่คอมไพเลอร์ XLA สร้างขึ้นไม่สำเร็จ
ลายเซ็น: ข้อความแสดงข้อผิดพลาดมีรายละเอียดเฉพาะเกี่ยวกับการยืนยันที่คอมไพเลอร์สร้างขึ้นซึ่งไม่สำเร็จ มองหาคีย์เวิร์ดต่อไปนี้
BoundsCheck,scheckne,scheckeq,schecklt,scheckge,scheckbetween
ซึ่งบ่งชี้ว่าการยืนยันที่คอมไพเลอร์สร้างขึ้นในโปรแกรมที่คอมไพล์ ล้มเหลวระหว่างการดำเนินการ วิเคราะห์ข้อความแสดงข้อผิดพลาดที่เฉพาะเจาะจงเพื่อระบุ ประเภทย่อย
สถานการณ์ที่ 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เพื่อตรวจสอบดัชนีเทนเซอร์ - ตรวจสอบชาร์ดดิ้ง: ตรวจสอบว่าคำอธิบายประกอบชาร์ดดิ้งสอดคล้องกับรูปร่างของ Tensor
สถานการณ์ 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 โปรดส่งรายงานข้อบกพร่อง