Codice di errore: E3001

Categoria: CompileTime: SparseCore No Viable Logical Replica Count

Questo errore si verifica quando il compilatore XLA:SparseCore non riesce a determinare una configurazione valida del conteggio delle repliche logiche che consenta al workload di rientrare nella memoria scratchpad locale (Tilespmem) di SparseCore.

Messaggi di errore di esempio:

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) ...

Backend XLA: TPU

Panoramica

Questo errore è specifico dei casi d'uso di SparseCore, in particolare per i modelli di incorporamento di grandi dimensioni (LEM).

Il conteggio delle repliche logiche è un parametro del compilatore interno che determina come vengono partizionati i batch di input per gestire la pressione di allocazione dello spazio di lavoro. Il compilatore tenta di dividere il workload in blocchi più piccoli (repliche) in modo che i buffer intermedi richiesti per ogni blocco rientrino nella memoria scratchpad limitata di SparseCore. In genere, un numero maggiore di repliche logiche riduce la pressione di allocazione elaborando batch di dati più piccoli alla volta.

Questo errore indica che, anche dopo aver tentato varie configurazioni di suddivisione, il compilatore non è riuscito a trovare una configurazione in cui i buffer richiesti rientrano nella memoria Tilespmem. Le dimensioni dell'allocazione sono determinate da una combinazione di:

  • sample_count: il numero di ID di ricerca di incorporamento assegnati a ogni SparseCore (derivato dalla dimensione del batch).
  • feature_width: la dimensione della dimensione di incorporamento.
  • max_nz_per_row: il numero massimo di ID di ricerca di incorporamento non univoci in tutti gli SparseCore.
  • max_unique_nz_per_row: il numero massimo di ID di ricerca di incorporamento unici.

Debug

Per risolvere questo errore, devi ridurre la pressione della memoria sullo spazio di lavoro SparseCore.

1. Migliorare le stime dei metadati

Il compilatore alloca la memoria in base a max_nz_per_row e max_unique_nz_per_row. Se questi valori vengono stimati in modo conservativo (ovvero impostati molto più alti di quanto richiesto dai dati effettivi), il compilatore riserverà spazio non necessario, causando questo errore. Assicurati che questi parametri riflettano con precisione la distribuzione effettiva degli ID del tuo set di dati.

Puoi prendere in considerazione l'applicazione dell'ottimizzazione basata sul feedback (FDO) per determinare i valori ottimali per questi parametri.

2. Riduci le dimensioni del batch

Il sample_count è derivato direttamente dalle dimensioni del batch globale. La riduzione delle dimensioni del batch diminuisce la quantità di dati che ogni SparseCore deve elaborare per passaggio, riducendo così le dimensioni dei buffer scratchpad richiesti.