FP8
Scopri che cos’è FP8, come funzionano E4M3 ed E5M2 e come scaling, supporto hardware e precisione mista migliorano l’addestramento e l’inferenza dell’IA.
FP8, ovvero la virgola mobile a 8 bit, è un formato numerico a bassa precisione che memorizza ogni valore in otto bit. I sistemi di AI usano FP8 per ridurre il traffico di memoria e accelerare moltiplicazioni tra matrici, convoluzioni e altre operazioni costose su hardware compatibile. Rispetto a FP16 o FP32, rappresenta un numero inferiore di valori distinti, quindi i flussi di lavoro FP8 efficaci combinano il calcolo rapido a bassa precisione con il ridimensionamento e operazioni selettive a precisione superiore per preservare la qualità del modello.
Come FP8 rappresenta i numeri#
Un valore in virgola mobile contiene un segno, un esponente che controlla l'intervallo e una mantissa che controlla il livello di dettaglio. FP8 è comunemente disponibile in due formati documentati dai tipi di dati in virgola mobile di PyTorch:
- E4M3: Un bit per il segno, quattro bit per l'esponente e tre bit per la mantissa. Offre un maggiore livello di dettaglio numerico, ma un intervallo più ristretto.
- E5M2: Un bit per il segno, cinque bit per l'esponente e due bit per la mantissa. Copre un intervallo più ampio, ma arrotonda i valori in modo più aggressivo.
E4M3 è spesso adatto a pesi e attivazioni, mentre E5M2 può gestire meglio i gradienti con intervalli di valori ampi. Le varianti esatte differiscono a seconda della piattaforma, come mostrato nella documentazione AMD sulla virgola mobile a bassa precisione, quindi un modello FP8 non è automaticamente portabile tra tutti gli acceleratori e i runtime.
Poiché otto bit non possono rappresentare l'intero intervallo e tutti i dettagli originali di un tensore, i framework generalmente moltiplicano i valori per un fattore di scala prima della conversione. La guida introduttiva al ridimensionamento FP8 di NVIDIA descrive strategie come il ridimensionamento ritardato, che ricava le scale future dai valori massimi osservati in precedenza. Il ridimensionamento limita overflow, underflow e saturazione senza richiedere che ogni operazione venga eseguita a precisione superiore.
FP8 e formati correlati#
FP8 si colloca in una posizione intermedia tra i tipi di dati comuni nell'AI:
- FP16 o mezza precisione: Usa il doppio dei bit, offrendo un maggiore livello di dettaglio numerico e, in genere, un addestramento più semplice. FP8 può ridurre ulteriormente lo spazio di archiviazione e la larghezza di banda, ma richiede un ridimensionamento più attento.
- BF16: Mantiene un ampio intervallo per l'esponente, offrendo al contempo meno dettaglio frazionario rispetto a FP16. Viene spesso usato come complemento a precisione superiore nell'addestramento FP8.
- INT8: Rappresenta numeri interi anziché valori in virgola mobile. La quantizzazione del modello INT8 si basa normalmente su scale per mappare i valori reali su livelli interi fissi, mentre FP8 conserva un esponente per una spaziatura naturalmente non uniforme.
- FP4: Usa solo quattro bit e può offrire una compressione maggiore, ma il suo intervallo e la sua granularità estremamente limitati rendono generalmente più difficile preservare la precisione.
FP8 fa spesso parte di un flusso di lavoro a precisione mista, anziché essere il tipo di dati per ogni tensore. L'accumulazione, la normalizzazione, lo stato dell'ottimizzatore o i livelli sensibili possono rimanere in BF16, FP16 o FP32. Inoltre, la precisione numerica è diversa dalla metrica di valutazione della precisione, che misura quante predizioni positive del modello sono corrette.
Applicazioni nel mondo reale#
Due applicazioni pratiche illustrano perché FP8 è importante:
-
Addestramento di modelli di grandi dimensioni: L'addestramento di Transformer esegue ripetutamente grandi moltiplicazioni tra matrici. Un framework compatibile con FP8 può convertire pesi e attivazioni idonei in FP8, mantenendo una precisione superiore dove la stabilità lo richiede. Questo riduce la larghezza di banda necessaria e può aumentare il throughput dell'addestramento. Il flusso di lavoro per l'addestramento quantizzato TorchAO include opzioni di ridimensionamento a livello di tensore e di riga, che bilanciano la velocità massima con una migliore gestione dei valori anomali.
-
Inferenza per la visione ad alto throughput: Un data center può eseguire il rilevamento degli oggetti su centinaia di flussi video di negozi, traffico o stabilimenti produttivi. I kernel compatibili con FP8 possono ridurre il tempo e la memoria utilizzati dai livelli idonei del modello, riducendo potenzialmente la latenza di inferenza e aumentando la capacità di gestire flussi simultanei. La guida ai tipi quantizzati di TensorRT spiega come le operazioni esplicite di quantizzazione e dequantizzazione descrivono l'esecuzione FP8.
Rischi numerici e supporto hardware#
Un ridimensionamento inadeguato può causare la saturazione dei valori grandi e l'arrotondamento a zero dei valori piccoli. I valori anomali sono particolarmente problematici quando un'unica scala copre un intero tensore. Questi effetti possono modificare i punteggi di confidenza, destabilizzare l'addestramento o ridurre la precisione del rilevamento, quindi dovresti convalidare il modello convertito rispetto alla sua baseline a precisione superiore.
Anche il supporto hardware nativo è essenziale. L'architettura NVIDIA Hopper ha introdotto l'accelerazione FP8 dei Tensor Core, mentre la meno recente GPU NVIDIA A100 supporta FP16, BF16 e INT8, ma non il calcolo FP8 nativo. Dovresti quindi consultare la matrice di supporto hardware di TensorRT prima di selezionare la precisione di deployment.
Utilizzare FP8 nella pratica#
Questo piccolo esempio PyTorch mostra la conversione E4M3 e l'errore di arrotondamento prodotto quando i valori FP8 vengono riconvertiti in FP32:
import torch
values = torch.tensor([0.1, 1.0, 3.14, 100.0], dtype=torch.float32)
# Convert to E4M3 FP8, then restore the values for comparison.
fp8_values = values.to(torch.float8_e4m3fn)
restored = fp8_values.to(torch.float32)
absolute_error = (restored - values).abs()
print(torch.stack((values, restored, absolute_error), dim=1))Il flusso di lavoro documentato per l'esportazione TensorRT di Ultralytics offre opzioni FP16 e INT8 calibrate per Ultralytics YOLO, anziché un'esportazione FP8 con un singolo argomento. Il deployment FP8 richiede quindi una toolchain di conversione downstream compatibile. Qualunque precisione tu scelga, usa la modalità benchmark di Ultralytics sulla GPU di destinazione per confrontare latenza, throughput, utilizzo della memoria e precisione dell'attività prima del deployment in produzione.






