오류 코드: 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'(코어가 예기치 않게 중단됨) 오류가 발생합니다.

이 오류는 실제 하드웨어 장애, 컴파일러 버그 또는 사용자 코드 문제 (특히 맞춤 커널에서)에서 비롯될 수 있으므로 로그 메시지를 주의 깊게 분석하여 구체적인 원인을 파악해야 합니다.

디버깅

이 오류를 해결하려면 먼저 세 가지 특정 시나리오 중 어떤 시나리오로 인해 예기치 않은 중지가 발생했는지 확인해야 합니다. 아래에 설명된 특정 텍스트 서명을 로그에서 확인합니다.

시나리오 1: 인프라 장애 (하드웨어/네트워크/전원)

서명: 로그에 observed errors are: [Network] 또는 observed errors are: [Power] 또는 observed errors are: [Hardware]이 명시적으로 표시됩니다.

이는 소프트웨어 또는 모델 로직과 관련이 없는 실제 인프라 장애를 나타냅니다. TPU 칩, 칩을 연결하는 네트워크 패브릭 또는 전원 공급 장치가 고장났습니다.

  • 작업 재시도: 일시적인 전압 강하 또는 네트워크 플랩이 문제인 경우 간단히 재시도하면 될 수 있습니다.
  • 불량 노드 식별 및 삭제: 동일한 특정 작업 또는 호스트에서 오류가 계속되면 하드웨어에 결함이 있을 가능성이 높습니다. 클러스터 관리 도구를 사용하여 영향을 받는 노드를 '드레인'/'코던'하고 정상 노드에서 작업을 다시 시작합니다.

시나리오 2: 하드웨어 제약 조건 위반

서명: 로그에 observed errors are: [User] 상태가 표시됩니다.

이는 XLA 컴파일러가 위반할 수 없는 하드웨어 제약 조건 (예: HBM 또는 스크래치패드 메모리에서 범위를 벗어난 메모리 주소에 액세스하려고 하는 명령어)을 위반하는 명령어를 생성했음을 나타냅니다. '사용자'로 라벨이 지정되지만, 이는 상위 수준 사용자 코드로 인해 발생하는 경우는 거의 없습니다.

  • 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: 모자이크/팔라스 동기화

샘플 오류 메시지:

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' 태그가 없고, 특정 경계/세마포어 메시지가 없음):

  • 조치: 내부 XLA 버그일 가능성이 높습니다. 버그 신고를 제출해 주세요.