FP8
Apprends ce qu'est le FP8, comment fonctionnent E4M3 et E5M2, et comment la mise à l'échelle, le support matériel et la précision mixte améliorent l'entraînement et l'inférence en IA.
Le FP8, ou virgule flottante 8 bits, est un format numérique de basse précision qui stocke chaque valeur sur huit bits. Les systèmes d'IA utilisent le FP8 pour réduire le trafic mémoire et accélérer les multiplications de matrices, les convolutions et d'autres opérations coûteuses sur le matériel compatible. Comparé au FP16 ou au FP32, il représente moins de valeurs distinctes ; par conséquent, les workflows FP8 réussis associent un calcul rapide à basse précision à une mise à l'échelle et à des opérations sélectives de plus haute précision pour préserver la qualité du modèle.
Link to this sectionComment le FP8 représente les nombres#
Une valeur à virgule flottante contient un signe, un exposant qui contrôle la plage, et une mantisse qui contrôle le détail. Le FP8 apparaît couramment dans deux formats documentés par les types de données à virgule flottante PyTorch :
- E4M3 : Un bit de signe, quatre bits d'exposant et trois bits de mantisse. Il offre plus de détails numériques mais une plage plus étroite.
- E5M2 : Un bit de signe, cinq bits d'exposant et deux bits de mantisse. Il couvre une plage plus large mais arrondit les valeurs de manière plus agressive.
L'E4M3 convient souvent aux poids et aux activations, tandis que l'E5M2 s'accommode mieux des gradients présentant de grandes plages de valeurs. Les variantes exactes diffèrent selon les plates-formes, comme le montre la documentation sur les types flottants à basse précision d'AMD, de sorte qu'un modèle FP8 n'est pas automatiquement portable entre chaque accélérateur et runtime.
Puisque huit bits ne peuvent pas représenter toute la plage et tous les détails d'origine d'un tenseur, les frameworks multiplient généralement les valeurs par un facteur d'échelle avant la conversion. L'introduction au scaling FP8 de NVIDIA décrit des stratégies telles que le scaling différé, qui déduit les échelles futures à partir de valeurs maximales observées précédemment. Le scaling limite le dépassement, le sous-dépassement et la saturation sans nécessiter l'exécution de chaque opération en plus haute précision.
Link to this sectionFP8 par rapport aux formats associés#
Le FP8 occupe une position intermédiaire parmi les types de données d'IA courants :
- FP16 ou demi-précision : Utilise deux fois plus de bits, offrant un plus grand détail numérique et un entraînement généralement plus simple. Le FP8 peut réduire davantage le stockage et la bande passante, mais nécessite un scaling plus minutieux.
- BF16 : Conserve une large plage d'exposants tout en offrant moins de détails fractionnaires que le FP16. Il est souvent utilisé comme composant de plus haute précision dans l'entraînement FP8.
- INT8 : Représente des entiers plutôt que des valeurs à virgule flottante. La quantification de modèle INT8 s'appuie normalement sur des échelles pour mapper les valeurs réelles sur des niveaux entiers fixes, tandis que le FP8 conserve un exposant pour un espacement naturellement non uniforme.
- FP4 : Utilise seulement quatre bits et peut offrir une plus grande compression, mais sa plage et sa granularité extrêmement limitées rendent généralement la préservation de la précision plus difficile.
Le FP8 fait fréquemment partie d'un workflow en précision mixte plutôt que d'être le type de données de chaque tenseur. L'accumulation, la normalisation, l'état de l'optimiseur ou les couches sensibles peuvent rester en BF16, FP16 ou FP32. De plus, la précision numérique est différente de la métrique d'évaluation de la précision, qui mesure combien de prédictions positives du modèle sont correctes.
Link to this sectionApplications concrètes#
Deux applications pratiques illustrent pourquoi le FP8 est important :
-
Entraînement de grands modèles : L'entraînement de Transformer effectue de manière répétée de grandes multiplications de matrices. Un framework compatible FP8 peut convertir les poids et activations éligibles en FP8 tout en conservant une plus haute précision là où la stabilité l'exige. Cela réduit la demande en bande passante et peut augmenter le débit d'entraînement. Le workflow d'entraînement quantifié TorchAO inclut des choix de scaling par tenseur et par ligne qui permettent d'arbitrer entre vitesse maximale et meilleure gestion des valeurs aberrantes.
-
Inférence de vision à haut débit : Un centre de données peut exécuter une détection d'objets sur des centaines de flux vidéo de vente au détail, de trafic ou de fabrication. Les noyaux compatibles FP8 peuvent réduire le temps et la mémoire utilisés par les couches de modèles éligibles, abaissant potentiellement la latence d'inférence et augmentant la capacité de flux simultanés. Le guide des types quantifiés TensorRT explique comment les opérations explicites de quantification et de déquantification décrivent l'exécution FP8.
Link to this sectionRisques numériques et support matériel#
Un mauvais scaling peut provoquer la saturation des grandes valeurs et l'arrondi à zéro des petites valeurs. Les valeurs aberrantes posent particulièrement problème lorsqu'une seule échelle couvre un tenseur entier. Ces effets peuvent modifier les scores de confiance, déstabiliser l'entraînement ou réduire la précision de la détection ; tu dois donc valider le modèle converti par rapport à sa référence de plus haute précision.
Le support matériel natif est tout aussi important. L'architecture NVIDIA Hopper a introduit l'accélération Tensor Core FP8, tandis que l'ancien GPU NVIDIA A100 prend en charge le FP16, le BF16 et l'INT8, mais pas le calcul FP8 natif. Il convient donc de vérifier la matrice de support matériel TensorRT avant de sélectionner une précision de déploiement.
Link to this sectionTravailler avec le FP8 en pratique#
Ce petit exemple PyTorch démontre la conversion E4M3 et l'erreur d'arrondi produite lorsque les valeurs FP8 sont restaurées en 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))Le workflow d'exportation TensorRT d'Ultralytics documenté fournit des options FP16 et INT8 étalonnées pour Ultralytics YOLO plutôt qu'une exportation FP8 à un seul argument. Le déploiement FP8 nécessite donc une chaîne d'outils de conversion aval compatible. Quelle que soit la précision sélectionnée, utilise le mode de benchmark Ultralytics sur le GPU cible pour comparer la latence, le débit, l'utilisation de la mémoire et la précision de la tâche avant le déploiement en production.






