Migliorare le prestazioni del modello con bfloat16
Per impostazione predefinita, le TPU eseguono operazioni di moltiplicazione di matrici con valori bfloat16
e accumulazioni con valori IEEE float32
. L'utilizzo di numeri in virgola mobile con precisione ridotta riduce il tempo di convergenza senza perdere precisione.
L'intervallo dinamico di bfloat16
e float32
è equivalente. Tuttavia, bfloat16
utilizza metà dello spazio di memoria. Per ulteriori informazioni sul rendimento di bfloat16
, consulta Uno studio su BFLOAT16 per l'addestramento del deep learning.
Utilizzare bfloat16 in modo esplicito
Sebbene la conversione automatica dei formati nelle TPU ti consenta di evitare di pensare alla precisione numerica, puoi ottenere miglioramenti delle prestazioni eseguendo il casting esplicito dei valori in bfloat16
. Esistono due motivi per eseguire il casting esplicito dei valori in bfloat16
:
La memorizzazione dei valori in formato
bfloat16
consente di risparmiare memoria on-chip, consentendo alle Cloud TPU di addestrare modelli più grandi o di utilizzare dimensioni batch più grandi.Alcune operazioni sono legate alla larghezza di banda della memoria, il che significa che il tempo necessario per caricare i dati dalla memoria può rallentare il tempo complessivo impiegato per eseguire il calcolo. L'archiviazione degli operandi e delle uscite di queste operazioni in formato
bfloat16
riduce la quantità di dati da trasferire, migliorando la velocità complessiva.
Per iniziare, ti consigliamo di fare un po' di pratica con uno dei modelli di riferimento Cloud TPU. Dopodiché, la guida agli strumenti di profilazione e la guida alla risoluzione dei problemi forniscono informazioni tecniche approfondite per aiutarti a creare e ottimizzare autonomamente i modelli di machine learning.
Dettagli sulla conversione del formato
La conversione del formato da float32
a bfloat16
viene inserita automaticamente dal compilatore XLA. Su TPU, lo schema di arrotondamento nella conversione è
arrotondamento al numero pari più vicino
e overflow a inf
. Inoltre, bfloat16
su Cloud TPU non supporta i valori subnormali, pertanto tutti i valori subnormali vengono azzerati durante la conversione.
I valori speciali, come NaN
e inf
, vengono conservati nella conversione.
Anche la conversione del formato da bfloat16
a float32
viene inserita automaticamente dal compilatore XLA. Poiché float32
può rappresentare tutti i valori esatti in bfloat16
,
la conversione aggiunge 16 zeri ai bit della frazione. I valori speciali vengono conservati nella conversione.
I checkpoint ottenuti da un modello addestrato su Cloud TPU possono essere implementati su altre piattaforme hardware (ad esempio, inferenza o ottimizzazione fine su CPU o GPU) senza conversioni manuali estese.