錯誤代碼: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 裝置會依序執行這些指令。如果 TPU 硬體遇到無法復原的狀況,導致無法繼續執行,就會發生「Core Halted Unexpectedly」錯誤,並強制核心進入致命的「HALTED」狀態。

由於這個錯誤可能源自實體硬體故障、編譯器錯誤或使用者程式碼問題 (特別是在自訂核心中),因此您必須仔細分析記錄訊息,找出具體原因。

偵錯

如要解決這項錯誤,請先找出導致意外停止的三種特定情況。請檢查記錄,確認是否出現下列特定文字簽章。

情境 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 編譯器產生的斷言失敗

簽章:錯誤訊息包含編譯器產生的失敗斷言相關詳細資料。請尋找下列關鍵字:

  • 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 核心加入的同步群組與目前的群組領導者具有不同的程式 ID,這表示主機間的程式不一致。

  • 驗證 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_printcheckify 驗證張量索引。
  • 檢查分片:確認分片註解與張量形狀一致。

情境 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 會使用信號燈管理依附元件 (例如確保 DMA 在使用前完成)。這項錯誤表示信號燈上的信號未正確等待。

  • 稽核同步:確認每個 dma_start 都有對應的 dma_wait
  • 檢查信號:確認信號和等待時間嚴格配對。

未分類問題

如果錯誤記錄不符合情境 1、2 或 3 (即沒有「觀察到的錯誤」、沒有「scheck」標記,也沒有特定界限/信號燈訊息):