La demi-précision, techniquement connue sous le nom de FP16 (Floating-Point 16-bit), est un format numérique qui utilise 16 bits pour représenter un nombre, contrairement aux formats plus courants de 32 bits en simple précision (FP32) ou de 64 bits en double précision (FP64). Dans le domaine de l'intelligence artificielle (IA) et en particulier de l'apprentissage profond (DL), l'exploitation de la demi-précision est devenue une technique cruciale pour optimiser l'entraînement et l'inférence des modèles, en équilibrant l'efficacité informatique et la précision numérique. Elle permet aux modèles de s'exécuter plus rapidement et de consommer moins de mémoire, rendant l'IA complexe réalisable sur une plus large gamme de matériel.
Qu'est-ce que la demi-précision ?
Les nombres à virgule flottante sont utilisés pour représenter les nombres réels dans les ordinateurs, en les approximant dans un nombre fixe de bits. La norme IEEE 754 définit les formats courants, notamment FP16 et FP32. Un nombre FP16 utilise 1 bit pour le signe, 5 bits pour l'exposant (qui détermine la plage) et 10 bits pour le significand ou la mantisse (qui détermine la précision). En comparaison, FP32 utilise 1 bit pour le signe, 8 bits pour l'exposant et 23 bits pour le significand. Cette réduction du nombre de bits signifie que le FP16 a une plage numérique nettement plus petite et une précision plus faible que le FP32. Pour une vue d'ensemble du fonctionnement de ces formats, voir les bases de l'arithmétique à virgule flottante.
Avantages de la demi-précision
L'utilisation du FP16 offre plusieurs avantages dans les flux de travail d'apprentissage profond :
- Utilisation réduite de la mémoire : Les poids du modèle, les activations et les gradients stockés en FP16 nécessitent la moitié de la mémoire par rapport à FP32. Cela permet d'utiliser des modèles plus importants, des lots plus volumineux ou de les déployer sur des appareils dont la mémoire est limitée.
- Des calculs plus rapides : Le matériel moderne, tel que les GPUNVIDIA avec Tensor Cores et les processeurs spécialisés comme les TPU deGoogle , peut effectuer les opérations FP16 beaucoup plus rapidement que les opérations FP32.
- Amélioration du débit et diminution de la latence : La combinaison d'exigences réduites en matière de bande passante de mémoire et de calculs plus rapides entraîne un débit plus élevé pendant l'entraînement et une latence d'inférence plus faible, ce qui permet une inférence en temps réel pour les applications exigeantes.
Inconvénients potentiels
Bien que bénéfique, l'utilisation exclusive de FP16 peut parfois entraîner des problèmes :
- Plage numérique réduite : La plus petite plage d'exposants rend les nombres FP16 plus susceptibles de déborder (devenir trop grands) ou de déborder (devenir trop petits, souvent zéro).
- Précision moindre : Le nombre réduit de bits de signification signifie moins de précision, ce qui peut parfois avoir un impact sur la précision finale des modèles sensibles si elle n'est pas gérée avec soin.
- Problèmes de gradient : Pendant l'apprentissage, les petites valeurs de gradient peuvent passer à zéro en FP16, ce qui entrave l'apprentissage. Cela peut exacerber des problèmes tels que la disparition des gradients.
Demi-précision et concepts connexes
Il est important de distinguer le FP16 des autres formats et techniques numériques :
- Simple précision (FP32) : Le format par défaut dans de nombreux cadres d'apprentissage machine (ML) comme PyTorch et TensorFlow. Offre un bon équilibre entre portée et précision pour la plupart des tâches, mais est plus gourmand en ressources que FP16.
- Double précision (FP64) : Fournit une très haute précision mais nécessite le double de la mémoire et des ressources de calcul du FP32. Utilisé principalement dans l'informatique scientifique, rarement dans l'apprentissage profond.
- Précision mixte: C'est la façon la plus courante d'utiliser le FP16 dans l'apprentissage profond. Elle consiste à utiliser stratégiquement à la fois le FP16 et le FP32 pendant la formation ou l'inférence. Généralement, les opérations à forte intensité de calcul comme les convolutions et les multiplications de matrices sont effectuées en FP16 pour plus de rapidité, tandis que les opérations critiques comme les mises à jour de poids ou certaines réductions sont conservées en FP32 pour maintenir la stabilité et la précision numériques. Des techniques telles que la mise à l'échelle des pertes permettent d'atténuer les problèmes de sous-écoulement. Voir le document de formation original sur la précision mixte ou les guides de PyTorch AMP et TensorFlow Mixed Precision. Les modèles Ultralytics utilisent souvent la précision mixte ; voir les conseils pour la formation des modèles.
- BFloat16 (BF16) : Un autre format de 16 bits, principalement développé par Google. Il utilise 8 bits d'exposant (comme FP32, ce qui offre une large gamme) mais seulement 7 bits de significand (précision plus faible que FP16). Il est particulièrement utile pour la formation de grands modèles de langage (LLM). En savoir plus sur BFloat16.
- Quantification du modèle: Techniques qui réduisent encore davantage la précision du modèle, souvent à des entiers de 8 bits (INT8) ou moins. Cela permet d'obtenir une efficacité maximale pour le déploiement sur les appareils périphériques, mais nécessite généralement un étalonnage minutieux ou une formation consciente de la quantification (QAT) pour maintenir la précision. Voir l'introduction à la quantification sur PyTorch.
Applications et exemples
La demi-précision, principalement par le biais de techniques de précision mixte, est largement utilisée :
- Accélérer la formation des modèles : La formation de grands modèles d'apprentissage profond, tels que ceux pour la classification d'images ou le traitement du langage naturel (NLP), peut être considérablement accélérée en utilisant la précision mixte, ce qui réduit le temps et les coûts de formation. Les plateformes comme Ultralytics HUB ont souvent recours à ces optimisations.
- Optimiser l'inférence de la détection d'objets: Modèles comme Ultralytics YOLO11 peuvent être exportés (à l'aide des outils décrits dans la documentation sur le mode d'exportation) dans des formats tels que ONNX ou TensorRT avec une précision FP16 pour une inférence plus rapide. Ceci est crucial pour les applications nécessitant des performances en temps réel, telles que les véhicules autonomes ou les systèmes de vidéosurveillance en direct.
- Déploiement sur des appareils à ressources limitées : L'empreinte mémoire et le coût de calcul réduits des modèles FP16 les rendent adaptés au déploiement sur des plateformes d'edge computing comme NVIDIA Jetson ou des appareils mobiles utilisant des frameworks comme TensorFlow Lite ou Core ML.
- Formation de grands modèles linguistiques (LLM) : La taille énorme des modèles comme le GPT-3 et les architectures plus récentes nécessite l'utilisation de formats 16 bits (FP16 ou BF16) pour faire entrer les modèles dans la mémoire et terminer la formation dans des délais raisonnables.
En résumé, la demi-précision (FP16) est un outil essentiel dans la boîte à outils d'optimisation de l'apprentissage profond, permettant un calcul plus rapide et une utilisation réduite de la mémoire. Bien qu'elle présente des limites en termes de portée et de précision, celles-ci sont souvent gérées efficacement à l'aide de techniques de précision mixte, ce qui la rend indispensable pour l'entraînement de grands modèles et le déploiement d'applications d'IA efficaces.