FP32 vs FP16 vs BF16 vs INT8 : les formats numériques comparés

Le FP32 est le format à virgule flottante simple précision sur 32 bits ; il sert de référence pour les calculs. Le FP16 et le BF16 font tous deux 16 bits, mais répartissent leurs bits différemment. Le FP16 consacre beaucoup de bits à la mantisse pour la précision, ce qui réduit sa plage, avec un maximum de 65504. Le BF16 garde un exposant de 8 bits comme le FP32, ce qui préserve une plage comparable au FP32, au prix d’une précision moindre. L’INT8 est un entier sur 8 bits utilisé pour la quantification, qui approxime les nombres réels à l’aide d’un facteur d’échelle ; il réduit fortement la mémoire et la consommation en inférence d’IA.

CritèreFP32FP16BF16INT8
Nombre de bits32 bits16 bits16 bits8 bits
Bits de signe, d’exposant et de mantisse1, 8, 231, 5, 101, 8, 7Ni exposant ni mantisse. Entier en complément à deux de −128 à 127
Plus grande valeur représentableEnviron 3,4 × 10³⁸65504Environ 3,4 × 10³⁸ (presque identique au FP32)127 (les réels sont représentés à l’aide d’un facteur d’échelle)
Plus petit nombre normaliséEnviron 1,2 × 10⁻³⁸Environ 6,1 × 10⁻⁵ (2⁻¹⁴)Environ 1,2 × 10⁻³⁸Sans objet (le pas des valeurs représentables est fixé par le facteur d’échelle)
Ordre de grandeur de la précisionEnviron 7 chiffres décimaux (écart entre 1 et le nombre suivant : 2⁻²³ ≈ 1,2 × 10⁻⁷)Environ 3 chiffres décimaux (2⁻¹⁰ ≈ 9,8 × 10⁻⁴)2 à 3 chiffres décimaux (2⁻⁷ ≈ 7,8 × 10⁻³)Une échelle de 256 graduations
Conversion depuis le FP32Sans objet (référence)La plage étant étroite, les grandes valeurs peuvent déborder et les petites devenir 0Il suffit de prendre les 16 bits de poids fort et d’arrondir ; la plage ne déborde pasQuantification après détermination de l’échelle (et du point zéro). Une calibration pour étudier la plage des valeurs est nécessaire
Mémoire par valeur4 octets2 octets2 octets1 octet
Efficacité des unités de calculMultiplieurs volumineux ; peu de multiplications-accumulations par unité de surfaceUnités plus petites qu’en FP32 ; on peut aligner de nombreuses multiplications-accumulationsComparable au FP16. La mantisse plus courte rend le multiplieur encore plus petitMultiplieurs les plus petits et les plus économes. Les produits sont souvent accumulés en entiers 32 bits
Usage en apprentissagePoids maîtres, état de l’optimiseur, accumulation des produitsApprentissage en précision mixte. Le loss scaling évite que les petits gradients deviennent 0Largement utilisé en apprentissage en précision mixte. Le loss scaling est le plus souvent inutileGénéralement non utilisé (l’apprentissage conscient de la quantification simule l’effet de la quantification)
Usage en inférenceRéférence de précision. Lorsque l’exactitude prime sur les performancesInférence sur GPU, entre autresInférence sur GPU et accélérateurs d’IAInférence de modèles quantifiés, en particulier sur les NPU embarqués en périphérie (edge)

Les valeurs indiquées sont des ordres de grandeur typiques et varient selon la génération de procédé et le produit.

Quand choisir l'un ou l'autre ?

FP32
Calculs exigeant de la précision, poids maîtres et accumulation des produits en apprentissage, et référence pour vérifier les résultats en basse précision.
FP16 et BF16
Lorsqu’on veut diviser par deux la mémoire et le calcul en apprentissage et en inférence d’IA. Le BF16 pour l’apprentissage où la plage compte ; le FP16 lorsque les valeurs tiennent dans sa plage et que la précision importe.
INT8
Lorsqu’on veut quantifier un modèle entraîné pour rendre l’inférence plus rapide et plus économe ; inférence sur des appareils en périphérie à mémoire et consommation limitées.

Questions fréquentes

Pourquoi préfère-t-on souvent le BF16 au FP16 pour l’apprentissage en IA ?

Le BF16 a un exposant de 8 bits comme le FP32, donc une plage presque identique. Le FP16 exige un loss scaling pour éviter que les petits gradients deviennent 0 ou que les grandes valeurs débordent, alors que le BF16 s’en passe le plus souvent, et la conversion depuis le FP32 est simple. Sa précision est plus faible, mais cela pose rarement problème pour l’apprentissage des réseaux de neurones.

Pourquoi la valeur maximale du FP16 est-elle 65504 ?

Le FP16 a un exposant de 5 bits (biais de 15), et la valeur où tous ces bits valent 1 est réservée à l’infini et aux NaN : l’exposant maximal est donc 2 puissance 15. Avec les 10 bits de mantisse tous à 1, (2 − 2⁻¹⁰) × 2¹⁵ est la plus grande valeur finie, soit 65504.

Comment l’INT8 représente-t-il des valeurs décimales ?

Par une approximation de la forme réel ≈ échelle × (entier − point zéro). Pour une quantification symétrique autour de 0, le point zéro vaut 0 et l’échelle est fixée par exemple à « plus grande valeur absolue ÷ 127 ». L’échelle est définie par tenseur ou par canal.

Peut-on aussi faire l’apprentissage en INT8 ?

On utilise en général des formats à virgule flottante pour l’apprentissage, car les gradients couvrent une large plage de valeurs et il faut aussi traiter de petites mises à jour des poids. L’INT8 sert surtout à l’inférence de modèles entraînés puis quantifiés ; même en apprentissage conscient de la quantification, les poids sont mis à jour en virgule flottante.

Vérifier vos connaissances

En simple précision IEEE 754 (32 bits), quelle combinaison donne le nombre de bits attribués au signe, à l'exposant et à la mantisse ?

  1. A1 · 11 · 20
  2. B1 · 8 · 23
  3. C1 · 5 · 26
Afficher la réponse et l'explication

Réponse : B. 1 · 8 · 23

La simple précision (FP32) comporte 1 bit de signe, 8 bits d'exposant et 23 bits de mantisse, soit 32 bits. Pour les nombres normalisés, le 1 de tête de la mantisse est omis : la précision est donc de 24 bits, soit environ 7 chiffres décimaux. La double précision (FP64) comporte 1 bit de signe, 11 bits d'exposant et 52 bits de mantisse, avec un exposant plus large et une précision plus élevée. 1 · 11 · 20 confond avec la largeur d'exposant de la double précision, et 1 · 5 · 26 avec celle de la demi-précision.

Quelle est la plus grande valeur finie représentable en FP16 (1 bit de signe, 5 bits d'exposant (biais 15), 10 bits de mantisse) ?

  1. A32768
  2. B65536
  3. C65504
Afficher la réponse et l'explication

Réponse : C. 65504

L'exposant tout à 1 (31) étant réservé à l'infini et aux NaN, le champ d'exposant maximal vaut 30, soit un exposant réel de 30 − 15 = 15. Avec une mantisse entièrement à 1, la valeur vaut (1 + 1 − 2⁻¹⁰) × 2¹⁵ = (2 − 2⁻¹⁰) × 32768 = 65536 − 32 = 65504. Tout résultat supérieur devient l'infini ; l'entraînement en FP16 doit donc aussi surveiller le dépassement de capacité. 32768 est 2¹⁵ avec une mantisse nulle et 65536 est 2¹⁶ ; aucun n'est la valeur maximale.

Quelle est la principale raison de l'emploi de bfloat16 pour l'entraînement en IA ?

  1. ASon exposant de 8 bits, identique à celui de FP32, offre une large plage de valeurs représentables
  2. BSa mantisse est plus longue que celle de FP32 et sa précision plus élevée
  3. CIl permet de calculer avec des opérations entières
Afficher la réponse et l'explication

Réponse : A. Son exposant de 8 bits, identique à celui de FP32, offre une large plage de valeurs représentables

bfloat16 est un format 16 bits comportant 1 bit de signe, 8 bits d'exposant et 7 bits de mantisse. Son exposant étant identique à celui de FP32, sa plage est quasiment la même : les valeurs très petites ou très grandes, comme les gradients d'entraînement, provoquent rarement dépassement ou soupassement de capacité, et la conversion depuis un modèle FP32 est simple. Sa précision est faible, mais l'entraînement tolère bien de petites erreurs, et le volume de données comme la surface des opérateurs sont divisés par deux. Sa mantisse est plus courte que celle de FP32, et le calcul se fait en virgule flottante, non en entiers.

  1. Lors de l'entraînement d'un réseau de neurones en FP16 (demi-précision : 1 bit de signe, 5 d'exposant, 10 de mantisse), quel problème survient fréquemment et se traite en multipliant la perte par un facteur (loss scaling) ?
  2. En inférence d'IA, quel est le principal avantage de la conversion (quantification) des poids de FP32 en INT8 ?
  3. Dans l'entraînement en précision mixte en IA, pourquoi conserve-t-on la valeur originale des poids (poids maîtres) en FP32 tout en effectuant la plupart des calculs en FP16 ou bfloat16 ?

Questions d'entraînement sur Arithmétique des ordinateurs

Termes clés expliqués

IEEE 754
Norme internationale définissant la représentation des nombres à virgule flottante et les règles de calcul. Elle définit les formats simple précision (32 bits), double précision (64 bits), etc., les modes d'arrondi et les valeurs spéciales comme l'infini et NaN, afin que les résultats soient identiques d'un ordinateur à l'autre.
bfloat16
Format à virgule flottante sur 16 bits : 1 bit de signe, 8 bits d'exposant, 7 bits de mantisse. Son exposant étant identique à celui du FP32, sa plage est large ; malgré sa faible précision, il est utilisé pour l'entraînement d'IA. Le FP16 (exposant 5 bits, mantisse 10 bits) est plus précis mais de plage plus étroite.
INT8
Entier signé sur 8 bits (−128 à 127). En inférence d'IA, convertir poids et activations en INT8 avec un facteur d'échelle (quantification) réduit fortement les calculs et la mémoire, et permet un traitement rapide avec de petits circuits entiers.
Précision mixte
Utilisation de précisions numériques différentes selon les parties du calcul. Les multiplications se font par exemple en FP16 et l'accumulation en FP32, conciliant vitesse et précision.
Quantification post-entraînement
Méthode qui, après l'entraînement, examine la plage des valeurs des poids et activations du modèle sur des données représentatives, puis les convertit en faible précision. PTQ.

Comparatifs associés