Precisione mista
Aumentate l'efficienza del deep learning con l'addestramento a precisione mista! Ottenete velocità più elevate, riduzione dell'uso della memoria e risparmio energetico senza sacrificare la precisione.
La precisione mista è una tecnica utilizzata nel deep learning per accelerare l'addestramento dei modelli e ridurre il consumo di memoria. Consiste nell'utilizzare una combinazione di formati numerici a bassa precisione, come quelli a virgola mobile a 16 bit (FP16), e formati a più alta precisione, come quelli a virgola mobile a 32 bit (FP32), durante il calcolo. Utilizzando strategicamente numeri a bassa precisione per alcune parti del modello, come la moltiplicazione dei pesi, e mantenendo i componenti critici, come gli aggiornamenti dei pesi, in alta precisione, l'addestramento a precisione mista può accelerare significativamente le prestazioni sulle moderne GPU senza una sostanziale perdita di precisione del modello.
Come funziona la precisione mista
L'idea alla base della precisione mista è quella di sfruttare la velocità e l'efficienza della memoria dei tipi di dati a bassa precisione. L'hardware moderno, in particolare le GPU NVIDIA con Tensor Cores, è in grado di eseguire operazioni su numeri a 16 bit molto più velocemente che su numeri a 32 bit. Il processo prevede in genere tre fasi fondamentali:
- Conversione a precisione inferiore: La maggior parte delle operazioni del modello, in particolare le moltiplicazioni e le convoluzioni di matrici ad alta intensità di calcolo, vengono eseguite utilizzando l'aritmetica a mezza precisione (FP16). Questo riduce l'ingombro in memoria e velocizza i calcoli.
- Mantenimento di una copia master dei pesi: Per mantenere l'accuratezza e la stabilità del modello, viene mantenuta una copia master dei pesi del modello nel formato standard a 32 bit in virgola mobile (FP32). Questa copia principale viene utilizzata per accumulare i gradienti e aggiornare i pesi durante il processo di addestramento.
- Scalatura delle perdite: Per evitare l'underflow numerico, in cui piccoli valori di gradiente diventano nulli quando vengono convertiti in FP16, viene utilizzata una tecnica chiamata loss scaling. Si tratta di moltiplicare la perdita per un fattore di scala prima della retropropagazione, in modo da mantenere i valori del gradiente entro un intervallo rappresentabile per FP16. Prima di aggiornare i pesi, i gradienti vengono ridimensionati.
I framework di apprendimento profondo come PyTorch e TensorFlow dispongono di un supporto integrato per la precisione mista automatica, che ne facilita l'implementazione.
Applicazioni ed esempi
La precisione mista è ampiamente adottata nell'addestramento di modelli di apprendimento automatico (ML) su larga scala, dove l'efficienza è fondamentale.
Concetti correlati
La precisione mista è una delle diverse tecniche di ottimizzazione utilizzate per rendere più efficienti i modelli di deep learning. È importante distinguerla dai concetti correlati:
- Quantizzazione del modello: La quantizzazione riduce le dimensioni del modello e il costo computazionale convertendo i numeri in virgola mobile (come FP32 o FP16) in formati interi a bit più bassi, come INT8. Mentre la precisione mista utilizza diversi formati in virgola mobile durante l'addestramento, la quantizzazione viene tipicamente applicata dopo l'addestramento(quantizzazione post-training) o durante l'addestramento(addestramento quantization-aware) per ottimizzare l'inferenza, soprattutto sui dispositivi edge.
- Potenziamento del modello: Il pruning è una tecnica che prevede la rimozione di connessioni (pesi) ridondanti o non importanti da una rete neurale. A differenza della precisione mista, che modifica il formato numerico dei pesi, la potatura altera l'architettura stessa del modello per ridurne le dimensioni e la complessità. Queste tecniche possono essere utilizzate insieme per ottenere un aumento delle prestazioni ancora maggiore.