カテゴリ: ランタイム: コアが予期せず停止した
このエラーは、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 つのシナリオのいずれかを特定する必要があります。ログで、以下に示す特定のテキスト署名を確認します。
- 「 observed errors are: [Hardware/Network/Power]」: これは 物理インフラストラクチャの障害を示します。→ シナリオ 1: インフラストラクチャの障害(ハードウェア/ネットワーク/電源)に移動
- 「observed errors are: [User]」: ハードウェア制約 の違反を示します。→ シナリオ 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 メモリの境界外のメモリアドレスにアクセスしようとする命令など)を生成したことを示します。「User」とラベル付けされていますが、これはハイレベルのユーザーコードが原因であることはほとんどありません。
- 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を使用して、テンソル インデックスを検証します。 - シャーディングを確認する: シャーディング アノテーションがテンソルの形状と一致していることを確認します。
シナリオ 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 と一致しない場合(「observed errors」がない、「scheck」タグがない、特定の境界/セマフォ メッセージがない場合):
- アクション: これは XLA の内部バグである可能性があります。 バグレポートを提出してください。