L'addestramento a precisione mista è una tecnica utilizzata nel deep learning (DL) per accelerare l'addestramento dei modelli e ridurre il consumo di memoria senza impattare in modo significativo sull'accuratezza del modello. Questo risultato si ottiene utilizzando strategicamente una combinazione di diversi formati di precisione numerica per memorizzare e calcolare i valori all'interno di una rete neurale (NN). In genere, questo comporta l'utilizzo del formato standard a virgola mobile a 32 bit (FP32 o a singola precisione) per le parti critiche come la memorizzazione dei pesi del modello, mentre si utilizzano i formati a virgola mobile a 16 bit più veloci e meno impegnativi per la memoria (FP16 o a mezza precisione e talvolta BF16 o BFloat16) per i calcoli durante i passaggi in avanti e all'indietro(backpropagation).
Come funziona la precisione mista
L'idea alla base della precisione mista è quella di sfruttare i vantaggi in termini di velocità e memoria dei formati a bassa precisione, attenuando al contempo i potenziali problemi di stabilità numerica. Un approccio comune prevede i seguenti passaggi:
- Mantenere i pesi master in FP32: una copia primaria dei pesi del modello viene mantenuta nel formato standard FP32 per garantire un'elevata precisione negli aggiornamenti dei pesi.
- Usa FP16/BF16 per i calcoli: Durante il ciclo di formazione, i pesi FP32 vengono trasformati in FP16 o BF16 per i passaggi in avanti e indietro. I calcoli che utilizzano questi formati a bassa precisione sono significativamente più veloci sull'hardware moderno come le GPUNVIDIA dotate di Tensor Cores, che sono specificamente progettati per accelerare le moltiplicazioni matriciali a bassa precisione.
- Scala delle perdite: Quando si utilizza FP16, la gamma di numeri rappresentabili è molto più piccola rispetto a FP32. Questo può far sì che i piccoli valori di gradiente calcolati durante il backpropagation diventino zero (underflow), ostacolando l'apprendimento. Per evitare questo problema, il valore di perdita viene scalato prima della retropropagazione, scalando di fatto i gradienti in un intervallo rappresentabile da FP16. Prima dell'aggiornamento del peso, questi gradienti vengono ridimensionati. Il BF16, con il suo intervallo dinamico più ampio simile a quello dell'FP32 ma con una precisione inferiore, spesso evita la necessità di scalare la perdita.
- Aggiornamento dei pesi master: I gradienti calcolati (ridimensionati se è stato utilizzato il loss scaling) vengono utilizzati per aggiornare la copia master dei pesi, che rimangono in FP32.
Questo accurato bilanciamento permette ai modelli di allenarsi più velocemente e di utilizzare meno GPU memoria della GPU.
Vantaggi della precisione mista
- Formazione più veloce: I calcoli a bassa precisione (FP16/BF16) vengono eseguiti molto più velocemente su hardware compatibile, riducendo significativamente il tempo necessario per ogni periodo di addestramento. Questo permette di accelerare l'iterazione e la sperimentazione.
- Consumo di memoria ridotto: I valori FP16/BF16 richiedono la metà della memoria dei valori FP32. Questa riduzione si applica alle attivazioni memorizzate durante il passaggio in avanti e ai gradienti calcolati durante il passaggio all'indietro. Un minore utilizzo della memoria consente di addestrare modelli più grandi o di utilizzare batch di dimensioni maggiori, migliorando le prestazioni del modello e la stabilità dell'addestramento.
- Efficienza migliorata: La combinazione di calcoli più veloci e requisiti di larghezza di banda della memoria più bassi porta a un uso più efficiente delle risorse hardware, riducendo potenzialmente i costi di formazione per il cloud computing o i cluster on-premise.
Precisione mista e concetti correlati
- Precisione completa (FP32): La formazione tradizionale utilizza FP32 per tutti i calcoli e la memoria. In genere è più stabile dal punto di vista numerico, ma è più lento e richiede più memoria rispetto alla precisione mista.
- Mezza precisione (FP16/BF16): Utilizzare solo FP16 o BF16 durante l'addestramento può portare a una significativa instabilità numerica (soprattutto FP16 senza tecniche come il loss scaling) e a una potenziale perdita di precisione. La precisione mista è un approccio più robusto che combina FP32 e FP16/BF16.
- Quantizzazione del modello: In genere si riferisce alla conversione dei pesi e/o delle attivazioni del modello in formati di precisione ancora più bassa, come gli interi a 8 bit (INT8), principalmente per ottimizzare la velocità e l'efficienza dell'inferenza, soprattutto sui dispositivi edge. Anche se a volte viene utilizzata durante l'addestramento(Quantization-Aware Training), si distingue dalla tipica precisione mista FP32/FP16 utilizzata durante le fasi di addestramento standard.