English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

invité
1 / ?
retour aux leçons

Signe, Exposant, Mantisse

Format IEEE 754 à Virgule Flottante

Chaque nombre à virgule flottante stocke trois champs :


- Bit de signe (1 bit) : positif ou négatif

- Exposant (E bits) : l'échelle de magnitude, une puissance entière de 2

- Mantisse (M bits) : la précision fractionnaire, un nombre entre 1,0 et ~2,0


Nombre total de bits = 1 + E + M. La valeur vaut approximativement (-1)^sign (1 + mantissa) 2^(exponent - bias).


Deux propriétés comptent pour l'entraînement :


Plage dynamique = 2^(2^E) (approximativement). Plus d'bits d'exposant signifie représenter des nombres plus petits et plus grands sans débordement.


Précision = 2^M valeurs distinctes par puissance de 2. Plus de bits de mantisse signifie une représentation plus fine entre les puissances de 2 consécutives.


Les Trois Formats


FormatBits totauxSigneExpMantPlage dynamiquePrécision
FP32321823~10^-38 à ~10^38~7 chiffres
FP16161510~10^-5 à ~10^5~3 chiffres
FP8 E4M38143~2^-9 à ~448~2 chiffres

FP8 E4M3 signifie « 4 bits d'exposant, 3 bits de mantisse ». Une alternative FP8 E5M2 échange la précision contre la plage ; les expériences ANDREA utilisent E4M3 car les activations des transformers restent dans des bandes de magnitude étroites où la précision supplémentaire l'emporte sur la plage supplémentaire.

Octets Par Paramètre

ANDREA-120M contient approximativement 120 000 000 de paramètres. Calculez l'empreinte de stockage des seules matrices de poids en (a) FP32, (b) FP16, (c) FP8. Montrez votre arithmétique en MB. Puis calculez (d) l'empreinte de stockage avec poids + premier moment Adam + second moment Adam (3x le nombre de poids) en FP16.

Pourquoi une précision inférieure s'exécute plus rapidement

La bande passante mémoire domine la vitesse d'entraînement

Les GPU modernes passent plus de temps à attendre la mémoire qu'à calculer. La RTX 4090 a une bande passante mémoire de 1008 Go/s & 165 TFLOPS de calcul FP16. Une couche typique lit les poids depuis la VRAM, multiplie les activations, réécrit les résultats. C'est la bande passante, pas le calcul, qui détermine le débit.


Diviser la précision par deux divise les octets par paramètre par deux, donc lire les mêmes poids utilise la moitié de la bande passante mémoire. Le débit double approximativement.


Tensor Cores : Multiplication matricielle accélérée par le matériel

La RTX 4090 intègre des unités de cœurs tensor dédiées qui calculent les multiplications matricielles en FP16 ou FP8 directement. Une seule opération de cœur tensor multiplie un petit bloc (par ex. 16x16) en un cycle, de manière considérablement plus rapide que les multiplications scalaires FP32.


Chiffres empiriques d'ANDREA-120M :


PrécisionÉtapes/minNotes
FP32~3référence ; pas d'accélération par cœurs tensor
FP16~6cœurs tensoriels cuBLAS ; accélération 2x
FP8 E4M3~6cœurs tensoriels ; comparable à FP16

FP8 n'a pas surpassé FP16 en débit pour cette charge de travail car le débit de calcul n'était plus le goulot d'étranglement ; la bande passante mémoire et la surcharge de lancement sont devenues limitantes. ANDREA-120M v3 est livré en FP16 cuBLAS à 6 étapes/min pour une marge de sécurité confortable sans perte de débit.


Risque de NaN en FP8

FP8 E4M3 représente les nombres de ~2^-9 à ~448. Les activations ou gradients en dehors de cette plage débordent en NaN (not a number) ou sous-débordent en zéro. Un seul NaN contamine tous les calculs en aval : les multiplications matricielles avec un NaN renvoient tout-NaN ; les gradients tout-NaN corrompent l'état AdamW ; AdamW avec des m et v NaN produit des mises à jour NaN ; les poids deviennent NaN ; toute la session d'entraînement meurt.


Les expériences FP8 d'ANDREA ont produit des falaises NaN occasionnelles nécessitant un scaling de perte, un basculement programmé de précision, ou des chemins de repli. La plage dynamique de FP16 (~10^-5 à ~10^5) est assez large pour que les événements NaN restent rares sans astuces de scaling complexes.


Comparaison de précision : FP32 vs FP16 vs FP8

Choisir la précision pour une nouvelle exécution

Vous lancez une nouvelle exécution d'entraînement de style ANDREA sur une RTX 4090. Vous avez deux priorités en conflit : (1) maximiser les étapes/min, (2) éviter les débogages de crashes NaN en milieu d'entraînement. ANDREA-120M v3 a choisi FP16 cuBLAS plutôt que FP8 E4M3 malgré les deux à ~6 étapes/min. Raisonnez sur pourquoi FP16 a gagné cette décision. Référez-vous à la plage dynamique ET au support des tensor cores dans votre réponse.

Faire tenir 120M sur une seule 4090

Le multiplicateur 6-8x de la leçon d'introduction

Rappelons depuis grow_a_language_model_intro que la mémoire d'entraînement équivaut à environ 6-8x le nombre brut de poids, en tenant compte de :


- Poids (1x)

- Premier moment Adam m (1x)

- Deuxième moment Adam v (1x)

- Tampon de gradient (1x)

- Activations & temporaires (~2-4x, dépend du batch & contexte)


ANDREA-120M en FP16 avec batch_size=8, context=1024 :


ComposantTaille FP16
Poids240 Mo
m (premier moment)240 MB
v (deuxième moment)240 MB
Gradients240 MB
Activations~2-4 GB (batch, ctx)
Total~3.5 GB

La RTX 4090 dispose de 24 Go de VRAM. ANDREA-120M utilise ~14 % en FP16. Largement de place pour des tailles de lot plus grandes ou des fenêtres de contexte plus longues. ANDREA-12M n'a utilisé que 1,4 Go au total.


Où vit la précision mixte

ANDREA ne garde pas tout à une seule précision. L'entraînement en précision mixte stocke :


- Poids maîtres : FP32 (préserve la stabilité de l'entraînement)

- Calcul forward & backward : FP16 (utilise les tensor cores)

- État de l'optimiseur AdamW : FP32 (m & v ont besoin de précision pour les mises à jour long-tail)

- Tampon de gradients : FP16 (côté calcul)


Le budget mémoire final mélange les deux. L'empreinte réelle d'ANDREA se situe entre le FP16 pur (720 MB état optimiseur) & le FP32 pur (1.44 GB état optimiseur), plus proche du FP32 car m & v restent en FP32.

Dimensionner un Budget pour ANDREA-480M

ANDREA-480M (le troisième membre prévu de la famille) contient ~480 millions de paramètres. Estimez (a) poids FP16 seulement en MB, (b) poids FP16 + m + v en MB (supposez m & v aussi en FP16 pour simplifier), & (c) avec la règle empirique du multiplicateur 6-8x, empreinte totale au moment de l'entraînement en FP16. ANDREA-480M s'adapte-t-il sur une RTX 4090 unique (24 GB) ?

Précision en Pratique

Supposons que vous découvriez en plein entraînement qu'ANDREA-120M produisait occasionnellement des pertes NaN toutes les ~5000 étapes en FP16, & chaque NaN nécessitait un redémarrage depuis un checkpoint. Quelle **UNE** modification essaieriez-vous en premier pour réduire la fréquence des NaN sans quitter FP16 ? Justifiez avec un mécanisme en une phrase.

Activités Adjacentes

Trois activités sœurs liées à la précision :


- Activité 1 : Intro / Budget VRAM. La précision multiplie chaque terme dans l'arithmétique du budget mémoire. La règle empirique du multiplicateur 6-8x est sans unité ; bytes-par-param lui donne des unités.

- Activité 10 : AdamW. L'état de l'optimiseur (m & v) reste généralement en FP32 même lorsque le calcul forward/backward s'exécute en FP16. Raison : la précision de l'accumulateur long-tail est plus importante que la vitesse d'exécution pour l'optimiseur.

- Activité 12 : Clipping des gradients. Le clipping limite les magnitudes des gradients avant les mises à jour de l'état de l'optimiseur. Avec forward/backward en FP16 & optimiseur en FP32, le clipping se produit à la frontière où la précision change & où le risque de débordement se concentre.


La précision est un bouton gratuit : changez-la, le modèle s'entraîne plus vite & utilise moins de mémoire. Le coût est la vigilance numérique : gestion des NaN, scaling des pertes, discipline de précision mixte. ANDREA-120M v3 démontre le gain : 120M de paramètres entraînés sur du matériel grand public en 23 jours parce que FP16 a tout divisé par deux.