エラーコード: 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 ハードウェアで回復不能な状態が発生し、それ以上の実行が妨げられ、コアが致命的な「HALTED」状態に強制的に移行すると、「Core Halted Unexpectedly」エラーが発生します。

このエラーは、物理ハードウェアの障害、コンパイラのバグ、ユーザーコードの問題(特にカスタム カーネルの場合)が原因で発生する可能性があるため、ログメッセージを慎重に分析して特定する必要があります。

デバッグ

このエラーを解決するには、まず、3 つの特定のシナリオのうち、予期しない停止の原因となったシナリオを特定する必要があります。ログで、以下に説明する特定のテキスト シグネチャを確認します。

シナリオ 1: インフラストラクチャの障害(ハードウェア/ネットワーク/電源)

シグネチャ: ログに observed errors are: [Network]observed errors are: [Power]、または observed errors are: [Hardware] が明示的に記載されています。

これは、ソフトウェアやモデルのロジックとは無関係の物理インフラストラクチャの障害を示しています。TPU チップ、チップを接続するネットワーク ファブリック、または電源に障害が発生しました。

  • ジョブを再試行する: 問題が一時的な電圧低下またはネットワーク フラップである場合は、単純な再試行で解決する可能性があります。
  • 不良ノードを特定して削除する: 同じ特定のタスクまたはホストでエラーが続く場合は、ハードウェアに欠陥がある可能性があります。クラスタ管理ツールを使用して、影響を受けるノードを「ドレイン」または「コーディング」し、正常なノードでジョブを再開します。

シナリオ 2: ハードウェアの制約違反

シグネチャ: ログに observed errors are: [User] と表示されます。

これは、XLA コンパイラが、違反できないハードウェア制約に違反する命令(HBM または Scratchpad メモリの範囲外のメモリアドレスにアクセスしようとする命令など)を生成したことを示します。「User」とラベル付けされていますが、これは高レベルのユーザーコードが原因であることはほとんどありません。

  • 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 はセマフォを使用して依存関係を管理します(使用前に DMA が完了していることを確認するなど)。このエラーは、セマフォのシグナルが適切に待機されていないことを示しています。

  • 監査の同期: すべての dma_start に対応する dma_wait があることを確認します。
  • セマフォを確認する: セマフォのシグナルと待機が厳密にペアになっていることを確認します。

未分類の問題

エラーログがシナリオ 1、2、3 のいずれにも該当しない場合(「observed errors」がない、scheck タグがない、特定の境界/セマフォ メッセージがない場合):

  • 対応: これは内部 XLA バグである可能性があります。バグレポートを提出してください。