Il formato numerico bfloat16

L'utilizzo di numeri in virgola mobile a precisione ridotta è un metodo comune utilizzato per ridurre il tempo per la convergenza senza perdere di precisione. Le TPU utilizzano il formato numerico bfloat16 per le operazioni di matrice. Le operazioni di moltiplicazione della matrice vengono eseguite sui valori bfloat16, mentre gli accumuli vengono eseguiti sui valori IEEE float32.

bfloat16 è un formato virgola mobile personalizzato a 16 bit per il machine learning, composto da un bit di segno, otto bit esponenti e sette bit di mantissa. Il seguente diagramma mostra gli elementi interni di tre formati con rappresentazione in virgola mobile: float32: IEEE a precisione singola, float16: metà precisione di IEEE e bfloat16.

immagine

L'intervallo dinamico di bfloat16 e float32 è equivalente. Tuttavia, bfloat16 occupa metà dello spazio di memoria. Per ulteriori informazioni sulle prestazioni di bfloat16, consulta A Study of BFLOAT16 for Deep Learning Training.

Scelta di bfloat16

Il team dedicato all'hardware di Google ha scelto bfloat16 per le TPU Cloud per migliorare l'efficienza hardware, mantenendo al contempo la capacità di addestrare modelli precisi di deep learning, il tutto con costi minimi per il passaggio da float32. Le dimensioni fisiche di un moltiplicatore di hardware scalano al quadrato della larghezza della mantissa. Con meno bit di mantissa rispetto a FP16, i moltiplicatori bfloat16 sono circa la metà delle dimensioni del silicone di un moltiplicatore FP16 tipico e sono otto volte più piccoli di un moltiplicatore float32.

Le reti neurali sono più sensibili alle dimensioni dell'esponente rispetto alle dimensioni della mantissa. Per garantire un comportamento identico per sottoflussi, overflow e NaN, bfloat16 ha le stesse dimensioni dell'esponente di float32. bfloat16 gestisce i problemi diversi da float32 e li porta a zero. A differenza di float16, che in genere richiede una gestione speciale come la scalabilità di perdita, bfloat16 è un sostituto temporaneo di float32 per l'addestramento e l'esecuzione di reti neurali profonde.

Addestramento a precisione mista

La maggior parte dei calcoli all'interno di una rete neurale profonda può eseguire un'attività con la stessa precisione utilizzando valori di precisione inferiore. Alcuni modelli possono persino raggiungere una precisione maggiore con valori di precisione inferiore.

Quando programma Cloud TPU, il compilatore XLA converte automaticamente i valori compresi tra float32 e bfloat16.

Portabilità del modello

I valori dei parametri e delle attivazioni in un modello possono essere archiviati in formato a 32 bit perché l'hardware TPU può trasmettere automaticamente questi valori a bfloat16. I punti di controllo ottenuti da un modello addestrato su Cloud TPU possono essere sottoposti a deployment su altre piattaforme hardware (ad esempio, inferenza o ottimizzazione su CPU o GPU), senza lunghe conversioni manuali.

Migliorare le prestazioni con bfloat16

La conversione automatica del formato nelle TPU ti consente di non pensare alla precisione numerica, ma puoi ottenere ulteriori miglioramenti delle prestazioni trasmettendo esplicitamente i valori a bfloat16. Esistono due motivi per la trasmissione esplicita di valori a bfloat16:

  1. L'archiviazione di valori nel formato bfloat16 consente di risparmiare memoria su chip, consentendo alle Cloud TPU di addestrare modelli più grandi o utilizzare dimensioni batch di dimensioni maggiori.

  2. Alcune operazioni contengono limiti di larghezza di banda della memoria, il che significa che il tempo necessario per caricare i dati dalla memoria può rallentare il tempo complessivo necessario per eseguire il calcolo. L'archiviazione di operandi e output di tali operazioni nel formato bfloat16 riduce la quantità di dati da trasferire, migliorando la velocità complessiva.

Per iniziare, ti consigliamo di acquisire un'esperienza pratica con uno dei modelli di riferimento abilitati per bfloat16, ottimizzati per Cloud TPU. Successivamente, la nostra guida alle prestazioni, la guida agli strumenti di profilazione e la guida alla risoluzione dei problemi forniscono informazioni tecniche approfondite per creare e ottimizzare autonomamente i modelli di machine learning.