카테고리: 런타임: 코어가 예기치 않게 중지됨
이 오류는 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 하드웨어에서 추가 실행을 방지하는 복구할 수 없는 상태가 발생하여 코어가 치명적인 '중지됨' 상태로 전환될 때 발생합니다.
이 오류는 물리적 하드웨어 오류, 컴파일러 버그 또는 사용자 코드 문제 (특히 커스텀 커널)로 인해 발생할 수 있으므로 로그 메시지를 주의 깊게 분석하여 구체적인 원인을 파악해야 합니다.
디버깅
이 오류를 해결하려면 먼저 세 가지 특정 시나리오 중 어떤 시나리오로 인해 예기치 않은 중지가 발생했는지 파악해야 합니다. 아래에 설명된 특정 텍스트 서명이 있는지 로그를 확인합니다.
- "관찰된 오류는 [하드웨어/네트워크/전원]입니다.": 이는 물리적 인프라 오류를 나타냅니다. → 시나리오 1: 인프라 오류 (하드웨어/네트워크/전원)로 이동
- "관찰된 오류는 [사용자]입니다.": 하드웨어 제약조건 위반을 나타냅니다. → 시나리오 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 또는 스크래치패드 메모리의 범위를 벗어난 메모리 주소에 액세스하려는 명령어)을 위반하는 명령어를 생성했음을 나타냅니다. '사용자'로 라벨이 지정되지만 이는 상위 수준 사용자 코드로 인해 발생하는 경우는 거의 없습니다.
- 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.
원인: 이 오류는 Pallas JAX에서 사용하는 모자이크 컴파일러에서 생성된 코드에만 해당됩니다. 이는 커스텀 커널 내의 동기화 문제를 나타냅니다. TPU는 세마포어를 사용하여 종속 항목을 관리합니다 (예: 사용 전에 DMA가 완료되었는지 확인). 이 오류는 세마포어의 신호가 제대로 대기되지 않았음을 나타냅니다.
- 동기화 감사: 모든
dma_start에 상응하는dma_wait가 있는지 확인합니다. - 세마포어 확인: 세마포어 신호와 대기가 엄격하게 쌍을 이루는지 확인합니다.
카테고리 없는 문제
오류 로그가 시나리오 1, 2 또는 3과 일치하지 않는 경우 (즉, '관찰된 오류' 없음, 'scheck' 태그 없음, 특정 경계/세마포어 메시지 없음):
- 작업: 내부 XLA 버그일 가능성이 높습니다. 버그 신고를 제출해 주세요.