Visualiseur de motifs de bits FP16 et bfloat16
Visualisez les motifs de bits des nombres à virgule flottante en demi-précision (FP16, IEEE 754 binary16) et bfloat16. Convertissez du décimal aux bits et inversement, avec le signe, l'exposant et la mantisse mis en couleur. Utile pour apprendre la quantification en ML et l'accélération de l'inférence.
Structure de FP16 face à bfloat16
Les deux formats totalisent 16 bits, mais répartissent ces bits entre l'exposant et la mantisse de façon très différente, donnant à chacun une plage représentable et une précision très différentes.
| Élément | FP16 (IEEE 754 半精度) | bfloat16 |
|---|---|---|
| Bits au total | 16 | 16 |
| Bits d'exposant | 5 | 8 |
| Bits de mantisse | 10 | 7 |
| Plage représentable | Environ ±6,1×10⁻⁵ à ±65504 (plage plus étroite, mais plus de bits de mantisse pour la précision) | Environ ±1,2×10⁻³⁸ à ±3,4×10³⁸ (même large plage que float32, mais précision moindre) |
| Usage principal | Traitement d'image, graphisme, inférence économe en mémoire (entraînement en demi-précision) | Entraînement de deep learning (TPU et GPU récents) — pas besoin de se soucier du dépassement de l'exposant lors de la conversion depuis float32 |
bfloat16 partage la largeur d'exposant (8 bits) et le biais (127) de float32, ce qui signifie qu'il peut être obtenu à partir d'une valeur float32 simplement en tronquant la mantisse — un raccourci d'implémentation pratique.
Astuces d'utilisation
- Même pour une valeur identique comme 0.1, FP16 et bfloat16 l'arrondissent très différemment. Changez de format et comparez les motifs de bits de la mantisse.
- Comme bfloat16 partage la largeur d'exposant et le biais de float32, il résiste au dépassement même pour de grandes valeurs supérieures à 65504. FP16, en revanche, déborde vers l'infini dès que 65504 est dépassé.
- Convertir "70000" en FP16 déborde vers l'infini, alors que bfloat16 le représente correctement (avec une précision réduite).
- Lors de la quantification de modèles dans des frameworks comme PyTorch ou TensorFlow, bfloat16 se convertit facilement depuis float32, tandis que la plage plus étroite de FP16 nécessite parfois une mise à l'échelle préalable.
- Pour reconvertir des bits en décimal, saisissez une valeur hexadécimale à 4 chiffres avec le préfixe `0x`, ou une valeur binaire à 16 chiffres (le préfixe `0b` est facultatif).
Questions fréquentes
Anecdote — Pourquoi le machine learning voulait une représentation numérique "moins précise"
Vers 2018, Google a conçu un nouveau format à virgule flottante de 16 bits appelé bfloat16 pour ses Tensor Processing Units (TPU). FP16 (demi-précision IEEE 754) existait déjà et était utilisé en pratique dans le traitement d'image et le graphisme, mais ses maigres 5 bits d'exposant lui donnaient une plage représentable étroite, mal adaptée aux gradients qui s'évanouissent ou explosent pendant l'entraînement en deep learning.
L'idée de conception de bfloat16 est simple : sacrifier la précision de la mantisse, mais garder l'exposant exactement aussi large que les 8 bits de float32, afin de pouvoir gérer en toute sécurité les valeurs extrêmement grandes et petites qui apparaissent pendant l'entraînement. Le nom "Brain Floating Point" vient de Google Brain, l'équipe de recherche en machine learning qui l'a créé.
En informatique classique, réduire la précision en virgule flottante a longtemps été considéré comme un terreau propice aux bugs. Mais les modèles de deep learning ont une propriété inhabituelle : une erreur numérique modeste nuit rarement beaucoup à la précision finale des prédictions. Tirer parti de cette propriété — "quelque peu imprécis mais qui fonctionne dans l'ensemble" — et réduire de moitié le coût mémoire et calcul avec un format 16 bits représente une optimisation propre au machine learning, assez éloignée de la sagesse traditionnelle de l'informatique.