Les formats numériques les plus courants pour les LLM
Le fonctionnement efficace des grands modèles de langage (LLM) repose en grande partie sur le stockage et le traitement adéquats de leurs poids. Le format numérique sélectionné influe directement sur les besoins en mémoire, la vitesse de calcul et la précision du modèle. Au fil des années, le format FP32 a été progressivement supplanté ou remplacé par les formats FP16 et BF16 pour l'entraînement, tandis que les formats INT8, voire les formats quantifiés à plus faible nombre de bits, sont de plus en plus utilisés pour optimiser l'inférence.

L'intelligence artificielle, en particulier l'apprentissage profond, implique une grande quantité de calculs. Les formats numériques utilisés dans ces calculs (c'est-à-dire la manière dont les nombres sont stockés et manipulés par l'ordinateur) influencent directement :
- Vitesse : Les formats de plus faible précision (moins de bits) permettent des calculs plus rapides.
- Empreinte mémoire : Moins de bits nécessitent moins de mémoire, ce qui est crucial pour charger et exécuter de grands modèles.
- Consommation d'énergie : Le traitement de moins de bits nécessite généralement moins d'énergie.
- Précision : Les formats de plus haute précision (plus de bits) donnent des résultats plus précis, mais souvent au détriment de la vitesse, de la mémoire et de la puissance.
L'objectif est de trouver l'équilibre optimal entre précision et efficacité. Pour les LLM, les formats numériques les plus courants pour stocker les poids sont la virgule flottante demi-précision (FP16) et le bfloat16 (BF16). Pour l'optimisation de l'inférence par quantification, INT8 et des formats à bits encore plus faibles sont de plus en plus utilisés.
Formats numériques clés en IA :
- FP32 (Virgule flottante 32 bits)
- Historiquement, c'était le format par défaut dans l'apprentissage profond.
- Offre une haute précision mais exige des ressources mémoire et de calcul importantes.
- Rarement utilisé directement pour stocker les poids dans les grands LLM modernes.
- FP16 (Virgule flottante 16 bits / Demi-précision)
- Introduit par Nvidia avec l'architecture Pascal (2016).
- Pris en charge par les cœurs Tensor de Nvidia et d'autres GPU, permettant des calculs plus rapides.
- Réduit l'utilisation de la mémoire et les besoins de calcul par rapport à FP32. La réduction de précision est souvent acceptable pour l'entraînement et l'exécution de modèles d'apprentissage profond.
- Suffisamment précis pour de nombreux grands modèles, mais dans certains cas (par exemple, très petits gradients), la perte de précision peut causer des problèmes comme le sous-dépassement.
- BF16 (bfloat16 / Brain Floating Point)
- Également 16 bits comme FP16, mais avec une structure interne différente : plus de bits pour l'exposant et moins pour la mantisse (partie fractionnaire).
- Cela donne à BF16 une plage dynamique (la différence entre les nombres représentables le plus grand et le plus petit) plus proche de FP32 que de FP16.
- Cela atténue les problèmes de sous-dépassement et permet d'utiliser efficacement BF16 pendant l'entraînement avec moins de perte de précision par rapport à FP16 dans certains scénarios.
- Nvidia a introduit la prise en charge de BF16 avec l'architecture Ampere (2020).
- FP8 (Virgule flottante 8 bits)
- Lancé dans les architectures Hopper (H100) et Blackwell (B100, B200, GB200) de Nvidia.
- Se décline en deux variantes : E4M3 (4 bits d'exposant, 3 bits de mantisse) et E5M2 (5 bits d'exposant, 2 bits de mantisse).
- E4M3 offre une précision plus élevée, tandis que E5M2 offre une plage dynamique plus large.
- Accélère considérablement l'entraînement et l'inférence, souvent avec une perte de précision acceptable par rapport à FP16.
- INT8 (Entier 8 bits, pour les modèles quantifiés)
- Très efficace en termes de mémoire et de calcul, potentiellement jusqu'à 4 fois plus rapide que les opérations FP16.
- Entraîne une certaine perte de précision, mais peut être gérée efficacement grâce à des techniques de quantification minutieuses.
- Courant sur les appareils périphériques et les plateformes mobiles, et pris en charge par des accélérateurs d'IA dédiés (par exemple, Nvidia TensorRT, Qualcomm AI Engine).
- Moins couramment utilisé pendant l'entraînement, car la perte de précision peut être plus problématique pour les calculs de gradients.
- Il est courant de quantifier les modèles initialement entraînés en FP32 ou FP16, en convertissant les poids et les activations en INT8 pour l'inférence.
- INT4 / INT2 (Formats quantifiés à faible nombre de bits)
- De plus en plus courants dans les modèles et optimisations récents (par exemple, pour les modèles Llama, GPT-4).
- Réduit considérablement l'utilisation de la mémoire et accélère l'inférence.
- Principalement utilisé pour l'inférence ; généralement non adapté à l'entraînement.
L'importance du support matériel pour les formats numériques
Le support matériel des formats numériques est essentiel pour les GPU (et autres accélérateurs d'IA) car il détermine fondamentalement l'efficacité du calcul.
- Unités d'exécution optimisées : Lorsqu'un GPU prend en charge un format matériellement (par exemple, FP16, BF16, FP8), cela signifie que des circuits dédiés (unités d'exécution, comme les unités de multiplication-accumulation) sur la puce sont spécifiquement conçus pour ce format. Ces circuits effectuent des opérations directement en matériel, ce qui est plusieurs ordres de grandeur plus rapide que l'émulation logicielle.
- Mouvement de données efficace : Le support matériel optimise non seulement le calcul, mais aussi le mouvement des données. Le système de mémoire du GPU (registres, caches, mémoire globale) et les bus de données sont alignés sur les formats pris en charge. Cela signifie que moins de bits doivent être déplacés, ce qui réduit les besoins en bande passante mémoire, la latence et la consommation d'énergie.
- Maximisation du parallélisme : Les GPU tirent leur puissance d'un parallélisme massif. Le support matériel permet d'effectuer plus d'opérations simultanément sur les données dans le format pris en charge. Par exemple, si un GPU prend en charge les opérations 16 bits en matériel, il peut effectuer deux opérations 16 bits en parallèle à la place d'une opération 32 bits, ce qui peut potentiellement doubler le débit de ces opérations.
- Efficacité énergétique : Les circuits dédiés sont non seulement plus rapides, mais aussi plus efficaces sur le plan énergétique. Moins de transistors doivent commuter pour effectuer la même opération par rapport à un matériel moins spécialisé ou à une émulation logicielle, ce qui se traduit par une consommation d'énergie et une production de chaleur inférieures.
Résumé
Pour l'entraînement, FP16 ou BF16 sont prédominants. Pour l'inférence, de nombreux modèles utilisent désormais la quantification INT8 ou même INT4 pour une exécution plus rapide et une empreinte mémoire réduite. L'évolution des formats numériques dans l'IA est un processus d'optimisation continu. Les formats de plus faible précision permettent de construire des systèmes d'IA plus rapides, plus efficaces et potentiellement moins chers, mais les compromis entre précision, plage dynamique et exactitude doivent être soigneusement étudiés. Les nouvelles architectures matérielles (comme Ampere, Ada Lovelace, Hopper, Blackwell) prennent en charge un nombre croissant de formats numériques efficaces, ce qui accélère encore le développement de l'IA. À l'avenir, nous pouvons nous attendre à l'émergence de formats numériques encore plus spécialisés et adaptés aux charges de travail de l'IA.