Codice di errore: E2002

Categoria: Tempo di compilazione: blocco e tiling di input/output mosaico non allineati

Questo errore si verifica quando la forma del blocco di un input o di un output del kernel non è allineata al tiling predefinito del tipo di dati sull'hardware TPU specifico in uso.

Messaggi di errore di esempio:

UNIMPLEMENTED: Mosaic failed to compile TPU kernel: Failed to set window params
for input 0: Operand of shape (..., 256, 8192) has tiling (16, 128), but its
block shape (..., 8, 8192) is not divisible by tiling evenly nor matches the
full shape.

Backend XLA: TPU

Panoramica

I Tensor Core (TC) delle TPU hanno registri vettoriali bidimensionali. Le due dimensioni sono denominate corsia secondaria e corsia. Poiché le unità di calcolo TPU (ad es. MXU) operano con la granularità dei registri vettoriali, gli array XLA sono disposti nella memoria TPU in riquadri.

Questo affiancamento (ad es. 8x128) riduce al minimo le trasformazioni dei dati durante l'inserimento delle unità di calcolo. Le dimensioni esatte delle tessere (corsie secondarie × corsie) dipendono dalla generazione dell'hardware e dal tipo di dati. Ad esempio, un tiling comune per la maggior parte dei tipi è 8×128.

In fase di compilazione, XLA applica i seguenti vincoli alle dimensioni secondarie e terziarie di ogni input/output del kernel:

  1. Divisibilità:la dimensione del blocco deve essere un multiplo della dimensione del riquadro nel tensore sottostante oppure
  2. Eccezione per la forma completa:se la dimensione del blocco non è divisibile, deve essere uguale alla dimensione completa di quella dimensione nel tensore sottostante.

Questo errore viene attivato quando un blocco viola entrambe le condizioni. Ad esempio, il caricamento di un blocco di forma (8, 100) da un input di forma (8, 1024) su hardware con tiling di forma (8, 128) non riesce perché 100 non è divisibile per 128 e 100 != 1024. Tuttavia, sarebbe consentito se la forma di input fosse (32, 100).

Debug

Per risolvere questo errore, assicurati che le forme dei blocchi del kernel siano allineate alla tassellatura hardware attuale. Modifica il codice del kernel in modo da allineare la dimensione del blocco in modo che sia un multiplo del tiling richiesto.

  • Esempio: se l'errore indica che la tassellatura è (16, 128), ma la forma del blocco è (8, 128), modifica la specifica del blocco in modo che la forma corrisponda a (16, 128).