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

un

Gast
1 / ?

Vorzeichen, Exponent, Mantisse

IEEE 754 Gleitkommaformat

Jede Gleitkommazahl speichert drei Felder:


- Vorzeichenbit (1 Bit): positiv oder negativ

- Exponent (E Bits): die Magnituden-Skala, eine ganzzahlige Potenz von 2

- Mantisse (M Bits): die fraktionale Präzision, eine Zahl zwischen 1.0 & ~2.0


Gesamte Bits = 1 + E + M. Der Wert entspricht ungefähr (-1)^sign (1 + mantissa) 2^(exponent - bias).


Zwei Eigenschaften sind für das Training wichtig:


Dynamischer Bereich = 2^(2^E) (ungefähr). Mehr Exponenten-Bits bedeutet, kleinere & riesige Zahlen ohne Überlauf darzustellen.


Präzision = 2^M unterschiedliche Werte pro Potenz von 2. Mehr Mantissenbits bedeuten eine feinkörnigere Darstellung zwischen aufeinanderfolgenden Potenzen von 2.


Die drei Formate


FormatGesamtbitsVorzeichenExpMantDynamischer BereichPräzision
FP32321823~10^-38 bis ~10^38~7 Stellen
FP16161510~10^-5 bis ~10^5~3 Stellen
FP8 E4M38143~2^-9 bis ~448~2 Stellen

FP8 E4M3 bedeutet „4 Exponentenbits, 3 Mantissenbits“. Eine Alternative FP8 E5M2 tauscht Präzision gegen Reichweite; ANDREA-Experimente verwenden E4M3, weil Transformer-Aktivierungen in engen Magnitudenbereichen bleiben, wo zusätzliche Präzision über zusätzliche Reichweite siegt.

Bytes pro Parameter

ANDREA-120M enthält etwa 120.000.000 Parameter. Berechnen Sie den Speicherbedarf nur der Gewichtsmatrizen in (a) FP32, (b) FP16, (c) FP8. Zeigen Sie Ihre Rechenarbeit in MB. Berechnen Sie dann (d) den Speicherbedarf mit Gewichte + Adam-Erster-Moment + Adam-Zweiter-Moment (3x die Gewichtsanzahl) bei FP16.

Warum niedrigere Präzision schneller läuft

Memory Bandwidth dominiert die Trainingsgeschwindigkeit

Moderne GPUs verbringen mehr Zeit mit Warten auf Speicher als mit Rechnen. Die RTX 4090 hat 1008 GB/s Speicherbandbreite & 165 TFLOPS FP16-Rechenleistung. Eine typische Schicht liest Gewichte aus dem VRAM, multipliziert Aktivierungen, schreibt Ergebnisse zurück. Bandbreite, nicht Rechenleistung, bestimmt den Durchsatz.


Die Halbierung der Präzision halbiert die Bytes pro Parameter, sodass das Lesen derselben Gewichte nur die Hälfte der Speicherbandbreite benötigt. Der Durchsatz verdoppelt sich ungefähr.


Tensor Cores: Hardware-beschleunigtes Matrix-Multiplizieren

Die RTX 4090 enthält spezialisierte Tensor-Core-Einheiten, die Matrix-Multiplikationen bei FP16 oder FP8 direkt berechnen. Eine einzelne Tensor-Core-Operation multipliziert einen kleinen Block (z. B. 16x16) in einem Taktzyklus, dramatisch schneller als skalare FP32-Multiplikationen.


Empirische Zahlen von ANDREA-120M:


PräzisionSchritte/minHinweise
FP32~3Basislinie; keine Tensor-Core-Beschleunigung
FP16~6cuBLAS Tensor-Kerne; 2x Beschleunigung
FP8 E4M3~6Tensor-Kerne; vergleichbar mit FP16

FP8 konnte FP16 in der Durchsatzrate bei dieser Workload nicht schlagen, weil der Rechen-Durchsatz nicht mehr der Engpass war; Speicherbandbreite & Start-Overhead wurden limitierend. ANDREA-120M v3 wird mit FP16 cuBLAS bei 6 Schritten/Minute ausgeliefert für einen komfortablen Sicherheitsabstand ohne Verlust an Durchsatz.


NaN-Risiko bei FP8

FP8 E4M3 stellt Zahlen von ~2^-9 bis ~448 dar. Aktivierungen oder Gradienten außerhalb dieses Bereichs überlaufen zu NaN (not a number) oder unterlaufen zu null. Ein einzelnes NaN vergiftet jede nachgelagerte Berechnung: Matrixmultiplikationen mit einem NaN ergeben alle-NaN; alle-NaN-Gradienten korrumpieren den AdamW-Zustand; AdamW mit NaN m & v gibt NaN-Updates aus; Gewichte werden zu NaN; der gesamte Training-Lauf stirbt.


ANDREA's FP8-Experimente produzierten gelegentliche NaN-Klippen, die Loss-Scaling, geplante Präzisionswechsel oder Fallback-Pfade erforderten. Der FP16-Dynamikbereich (~10^-5 bis ~10^5) ist breit genug, dass NaN-Ereignisse selten bleiben, ohne komplizierte Scaling-Tricks.


Präzisionsvergleich: FP32 vs FP16 vs FP8

Präzision für einen neuen Lauf wählen

Du startest einen neuen ANDREA-ähnlichen Training-Lauf auf einer RTX 4090. Du hast zwei widersprüchliche Prioritäten: (1) Schritte/Min maximieren, (2) Debugging von NaN-Crashes während des Trainings vermeiden. ANDREA-120M v3 wählte FP16 cuBLAS statt FP8 E4M3, obwohl beide bei ~6 Schritten/Min laufen. Überlege, warum FP16 diese Entscheidung gewann. Beziehe dich in deiner Antwort auf Dynamikbereich UND Tensor-Core-Unterstützung.

120M auf einer einzelnen 4090 unterbringen

Der 6-8x-Multiplikator aus der Einführungslektion

Erinnern Sie sich aus grow_a_language_model_intro, dass das Trainingsgedächtnis etwa 6-8x der rohen Gewichtsanzahl entspricht, unter Berücksichtigung von:


- Gewichte (1x)

- Adam erstes Moment m (1x)

- Adam zweites Moment v (1x)

- Gradientenpuffer (1x)

- Aktivierungen & Temporaries (~2-4x, hängt von Batch & Kontext ab)


ANDREA-120M bei FP16 mit batch_size=8, context=1024:


KomponenteFP16-Größe
Gewichte240 MB
m (erster Moment)240 MB
v (zweiter Moment)240 MB
Gradienten240 MB
Aktivierungen~2-4 GB (Batch, Kontext)
Gesamt~3.5 GB

RTX 4090 hat 24 GB VRAM. ANDREA-120M verwendet ~14% bei FP16. Ausreichend Platz für größere Batch-Größen oder längere Kontextfenster. ANDREA-12M verwendete insgesamt nur 1.4 GB.


Wo Mixed Precision zum Einsatz kommt

ANDREA speichert nicht alles in einer einzigen Präzision. Mixed-Precision-Training speichert:


- Master-Gewichte: FP32 (erhält Trainingsstabilität)

- Forward- & Backward-Berechnung: FP16 (nutzt Tensor Cores)

- AdamW-Optimizer-Zustand: FP32 (m & v benötigen Präzision für Long-Tail-Updates)

- Gradientenpuffer: FP16 (Berechnungsseite)


Das endgültige Speicherbudget kombiniert beides. ANDREA's tatsächliche Speichernutzung liegt zwischen reinem FP16 (720 MB Optimizer-Zustand) & reinem FP32 (1.44 GB Optimizer-Zustand), näher an FP32, weil m & v in FP32 bleiben.

Budgetgröße für ANDREA-480M

ANDREA-480M (das geplante dritte Familienmitglied) hat ~480 Millionen Parameter. Schätzen Sie (a) FP16-Gewichte nur in MB, (b) FP16-Gewichte + m + v in MB (angenommen m & v ebenfalls FP16 zur Vereinfachung), & (c) unter Berücksichtigung der Daumenregel mit 6-8x Multiplikator, den gesamten Trainingszeit-Fußabdruck bei FP16. Passt ANDREA-480M auf eine einzelne RTX 4090 (24 GB)?

Präzision in der Praxis

Stellen Sie sich vor, Sie stellen während des Trainings fest, dass ANDREA-120M etwa alle ~5000 Schritte bei FP16 gelegentlich NaN-Verluste produziert, & jeder NaN einen Neustart von einem Checkpoint erfordert. Welche **eine** Änderung würden Sie zuerst ausprobieren, um die NaN-Häufigkeit zu reduzieren, ohne FP16 zu verlassen? Begründen Sie mit einem Satzan mechanik.

Benachbarte Aktivitäten

Drei Geschwisterthemen beziehen sich auf Präzision:


- Aktivität 1: Einführung / VRAM-Budget. Präzision multipliziert jeden Term in der Speicherbudget-Arithmetik. Die Daumenregel mit dem 6-8x-Multiplikator ist dimensionslos; Bytes-pro-Param gibt ihr Einheiten.

- Aktivität 10: AdamW. Optimizer-Zustand (m & v) bleibt typischerweise bei FP32, auch wenn Forward/Backward-Berechnungen bei FP16 laufen. Grund: Die Präzision des Long-Tail-Akkumulators ist für den Optimizer wichtiger als die Laufzeitgeschwindigkeit.

- Aktivität 12: Gradient Clipping. Clipping begrenzt die Gradientengrößen vor den Optimizer-Zustandsaktualisierungen. Bei FP16 Forward/Backward & FP32 Optimizer passiert das Clipping an der Grenze, wo sich die Präzision ändert & wo das Überlauf-Risiko am stärksten ist.


Präzision ist ein kostenloser Regler: Ändere sie, das Modell trainiert schneller & verbraucht weniger Speicher. Die Kosten sind numerische Sorgfalt: NaN-Behandlung, Loss-Scaling, Mixed-Precision-Disziplin. ANDREA-120M v3 demonstriert den Nutzen: 120M Parameter auf Consumer-Hardware in 23 Tagen trainiert, weil FP16 alles halbiert hat.