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

หมวดหมู่: รันไทม์: แกนกลางหยุดทำงานโดยไม่คาดคิด

ข้อผิดพลาดนี้บ่งชี้ว่าแกน 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: [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 ที่เฉพาะเจาะจง) ให้ทำดังนี้