Precisione dimezzata
Scopri come la precisione dimezzata (FP16) accelera l'IA con un calcolo più rapido, un utilizzo ridotto della memoria e un'implementazione efficiente dei modelli.
La precisione dimezzata, nota anche come FP16, è un formato di numero in virgola mobile che utilizza 16 bit di memoria per rappresentare un numero, a differenza dei più comuni formati a precisione singola a 32 bit (FP32) o a precisione doppia a 64 bit (FP64). Nel contesto del deep learning, l'utilizzo della precisione dimezzata riduce significativamente l'ingombro di memoria e i requisiti computazionali di un modello. Questo compromesso comporta una riduzione dell'intervallo numerico e della precisione. Tuttavia, le tecniche moderne, in particolare il training a precisione mista, hanno reso FP16 un caposaldo dell'efficiente machine learning (ML), consentendo un training e un'inferenza più rapidi con un impatto minimo sulla precisione del modello.
Come funziona la precisione dimezzata?
Passare da FP32 a FP16 dimezza la memoria necessaria per memorizzare i pesi e le attivazioni del modello. Ciò consente modelli più grandi, dimensioni dei batch maggiori o l'addestramento su GPU con meno memoria. Inoltre, le GPU moderne, come quelle con NVIDIA Tensor Core, sono specificamente progettate per eseguire operazioni su matrici a 16 bit a velocità molto più elevate rispetto alle operazioni a 32 bit.
La sfida principale con FP16 è la sua gamma numerica limitata, che può portare a problemi come la scomparsa dei gradienti durante l'addestramento. Per contrastare questo, la mezza precisione viene quasi sempre implementata utilizzando un approccio a precisione mista. Questa strategia prevede l'esecuzione della maggior parte dei calcoli in FP16 per la velocità, ma l'utilizzo strategico di FP32 per operazioni critiche, come gli aggiornamenti dei pesi e alcuni calcoli della funzione di perdita, per mantenere la stabilità numerica. Framework di deep learning come PyTorch e TensorFlow offrono supporto integrato per l'addestramento automatico a precisione mista.
Applicazioni ed Esempi
La precisione dimezzata, principalmente attraverso tecniche di precisione mista, è ampiamente utilizzata:
- Accelerazione dell'addestramento del modello: L'addestramento di modelli di deep learning di grandi dimensioni, come quelli per la classificazione delle immagini o l'elaborazione del linguaggio naturale (NLP), può essere notevolmente accelerato utilizzando la precisione mista, riducendo i tempi e i costi di addestramento. Piattaforme come Ultralytics HUB spesso utilizzano queste ottimizzazioni durante le sessioni di addestramento nel cloud.
- Ottimizzazione dell'inferenza di object detection: Modelli come Ultralytics YOLO11 possono essere esportati in formati come ONNX o TensorRT con precisione FP16 per un'inferenza in tempo reale più rapida. Questo è fondamentale per applicazioni che richiedono un'elevata produttività, come un sistema di sicurezza che analizza più flussi video o il controllo qualità su una linea di produzione ad alta velocità.
- Distribuzione su dispositivi con risorse limitate: L'impronta di memoria ridotta e il costo computazionale dei modelli FP16 li rendono adatti per la distribuzione su piattaforme edge AI come NVIDIA Jetson o dispositivi mobili che utilizzano framework come TensorFlow Lite o Core ML di Apple.
- Addestramento di modelli linguistici di grandi dimensioni (LLM): Le enormi dimensioni di modelli come GPT-3 e altri modelli di fondazione rendono necessario l'uso di formati a 16 bit per adattare i modelli alla memoria e completare l'addestramento entro tempi ragionevoli.
Precisione dimezzata rispetto ad altri formati
- Bfloat16 (BF16): Un formato alternativo a 16 bit sviluppato da Google, Bfloat16 alloca più bit all'esponente e meno alla mantissa rispetto a FP16. Questo gli conferisce la stessa gamma dinamica di FP32, rendendolo più resistente al underflow e all'overflow, ma a costo di una minore precisione. È ampiamente utilizzato nelle TPU di Google. Puoi saperne di più sul Google Cloud AI Blog.
- Quantizzazione del modello: Sebbene entrambe siano tecniche di ottimizzazione del modello, la quantizzazione del modello in genere converte i pesi in virgola mobile (FP32 o FP16) in formati interi a bit inferiori, più comunemente interi a 8 bit (INT8). Questo può fornire accelerazioni ancora maggiori, specialmente su CPU e determinati acceleratori, ma spesso richiede un processo di calibrazione più accurato, come il Quantization-Aware Training (QAT), per evitare un calo significativo delle prestazioni del modello.
- Precisione singola (FP32): Questo è il formato predefinito nella maggior parte dei framework di deep learning. Offre un'elevata precisione e un'ampia gamma dinamica, rendendolo robusto per l'addestramento. Tuttavia, è più lento e richiede più memoria rispetto alla mezza precisione, il che lo rende meno ideale per l'implementazione di modelli di grandi dimensioni o per applicazioni che richiedono la massima velocità. I compromessi tra questi formati sono una considerazione chiave, come mostrato in vari confronti di modelli.