카테고리: CompileTime: SparseCore No Viable Logical Replica Count
이 오류는 XLA:SparseCore 컴파일러가 워크로드가 SparseCore의 로컬 스크래치패드 메모리 (Tilespmem)에 맞도록 하는 유효한 논리적 복제본 수 구성이 결정되지 않을 때 발생합니다.
샘플 오류 메시지:
XLA:TPU compile permanent error. Compilation failure: No viable logical replica count for the embedding table with metadata: max_nz_per_row = 141352, max_unique_nz_per_row = 8, feature_width = 8, sample_count = 204800 (last tried split factor for vector splitting = 1, last tried split factor for sample dimension splitting = 1, fixed_size_allocation_bytes = 410880, row_dependent_size_allocation_bytes = 1696224, total_spmem_size_bytes = 524288) ...
XLA 백엔드: TPU
개요
이 오류는 SparseCore 사용 사례, 특히 대규모 임베딩 모델 (LEM)에 적용됩니다.
논리 복제본 수는 스크래치패드 할당 압력을 관리하기 위해 입력 배치 파티셔닝 방법을 결정하는 내부 컴파일러 매개변수입니다. 컴파일러는 각 청크에 필요한 중간 버퍼가 SparseCore의 제한된 스크래치패드 메모리에 맞도록 워크로드를 더 작은 청크 (복제본)로 분할하려고 시도합니다. 일반적으로 논리적 복제본 수가 많을수록 한 번에 더 작은 데이터 배치를 처리하여 할당 압력이 줄어듭니다.
이 오류는 다양한 분할 구성을 시도한 후에도 컴파일러가 필수 버퍼가 Tilespmem 메모리에 맞는 설정을 찾을 수 없음을 나타냅니다. 할당 크기는 다음의 조합으로 결정됩니다.
sample_count: 각 SparseCore에 할당된 임베딩 조회 ID의 수입니다 (배치 크기에서 파생됨).feature_width: 임베딩 차원의 크기입니다.max_nz_per_row: 모든 SparseCore에서 중복되지 않는 임베딩 조회 ID의 최대 개수입니다.max_unique_nz_per_row: 고유한 임베딩 조회 ID의 최대 수입니다.
디버깅
이 오류를 해결하려면 SparseCore 스크래치 패드의 메모리 압력을 줄여야 합니다.
1. 메타데이터 추정 개선
컴파일러는 max_nz_per_row 및 max_unique_nz_per_row에 따라 메모리를 할당합니다. 이러한 값이 보수적으로 추정되는 경우 (즉, 실제 데이터에 필요한 것보다 훨씬 높게 설정됨) 컴파일러가 불필요한 공간을 예약하여 이 오류가 발생합니다. 이러한 매개변수가 데이터 세트의 실제 ID 분포를 정확하게 반영하는지 확인하세요.
피드백 기반 최적화 (FDO)를 적용하여 이러한 파라미터의 최적 값을 결정하는 것이 좋습니다.
2. 배치 크기 줄이기
sample_count는 전역 배치 크기에서 직접 파생됩니다. 배치 크기를 줄이면 각 SparseCore가 단계별로 처리해야 하는 데이터양이 줄어들어 필요한 스크래치패드 버퍼의 크기가 줄어듭니다.