Precisione mista
Ottimizza l'efficienza del deep learning con il training a precisione mista! Ottieni velocità superiori, un utilizzo ridotto della memoria e risparmi energetici senza sacrificare l'accuratezza.
La precisione mista è una tecnica utilizzata nel deep learning per accelerare l'addestramento del modello e ridurre il consumo di memoria. Essa comporta l'uso di una combinazione di formati numerici a precisione inferiore, come il floating-point a 16 bit (FP16), e formati a precisione superiore, come il floating-point a 32 bit (FP32), durante il calcolo. Utilizzando strategicamente numeri a precisione inferiore per determinate parti del modello, come la moltiplicazione dei pesi, e mantenendo i componenti critici come gli aggiornamenti dei pesi a precisione superiore, l'addestramento a precisione mista può accelerare significativamente le prestazioni sulle moderne GPU senza una perdita sostanziale di accuratezza 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 precisione inferiore. L'hardware moderno, in particolare le GPU NVIDIA con Tensor Core, può eseguire operazioni su numeri a 16 bit molto più velocemente che su numeri a 32 bit. Il processo in genere prevede tre passaggi chiave:
- Casting a precisione inferiore: La maggior parte delle operazioni del modello, in particolare le moltiplicazioni di matrici e le convoluzioni ad alta intensità di calcolo, vengono eseguite utilizzando l'aritmetica a mezza precisione (FP16). Ciò riduce l'ingombro di memoria e accelera i calcoli.
- Mantenimento di una copia master dei pesi: Per mantenere l'accuratezza e la stabilità del modello, viene conservata una copia master dei pesi del modello nel formato standard a virgola mobile a 32 bit (FP32). Questa copia master viene utilizzata per accumulare i gradienti e aggiornare i pesi durante il processo di training.
- Ridimensionamento della perdita (Loss Scaling): Per prevenire l'underflow numerico, ovvero quando piccoli valori di gradiente diventano zero quando convertiti in FP16, viene utilizzata una tecnica chiamata ridimensionamento della perdita. Questa tecnica prevede la moltiplicazione della perdita per un fattore di scala prima della retropropagazione per mantenere i valori del gradiente entro un intervallo rappresentabile per FP16. Prima che i pesi vengano aggiornati, i gradienti vengono riportati alla scala originale.
Framework di deep learning come PyTorch e TensorFlow hanno un supporto integrato per la precisione mista automatica, rendendone facile l'implementazione.
Applicazioni ed Esempi
La precisione mista è ampiamente adottata nell'addestramento di modelli di machine learning (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:
- Model Quantization: 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 inferiori, 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 (quantization-aware training) per ottimizzare l'inferenza, specialmente sui dispositivi edge.
- Model Pruning: 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, il pruning altera l'architettura stessa del modello per ridurne le dimensioni e la complessità. Queste tecniche possono essere utilizzate insieme per ottenere migliori prestazioni.