Mixed Precision Training
Schneller trainieren mit fp16 und bf16 – halbierter Speicher
Mixed Precision Training nutzt 16-bit statt 32-bit Fließkommazahlen für den Großteil der Berechnungen. Das halbiert den Speicherbedarf und beschleunigt Training auf modernen GPUs um 2–3×.
fp32 vs. fp16 vs. bf16 – der detaillierte Vergleich
| Format | Bits | Exp. Bits | Mantissa | Zahlenbereich | Präzision | Empfehlung |
|---|---|---|---|---|---|---|
| float32 | 32 | 8 | 23 | ±3.4e38 | Sehr hoch | Sicher, aber langsam |
| float16 | 16 | 5 | 10 | ±65.504 | Mittel | ⚠️ Overflow-Risiko |
| bfloat16 | 16 | 8 | 7 | ±3.4e38 | Niedrig-Mittel | ⭐ Beste Wahl |
Warum bf16 besser ist als fp16
BFloat16 hat den gleichen Exponent-Bereich wie fp32 (8 Bits Exponent), aber weniger Mantissa-Bits. fp16 hat nur 5 Exponent-Bits → viel kleinerer Zahlenbereich → Overflow bei großen Aktivierungen. bf16 löst dieses Problem.
fp16 Overflow-Problem: Wenn Aktivierungen > 65.504: → Overflow → NaN → Training bricht ab! Abhilfe: Loss Scaling (automatisch, aber komplex) bf16 kein Overflow: Gleicher Zahlenbereich wie fp32 → Kein Loss Scaling nötig → Einfacher, stabiler GPU-Support für bf16: NVIDIA Ampere (RTX 30xx, A100): bf16 Hardware-Support ✓ NVIDIA Turing (RTX 20xx, T4): Nur fp16 Hardware ✗ NVIDIA Volta (V100): Nur fp16 Hardware ✗ Apple Silicon (M1/M2/M3): bf16 Hardware-Support ✓ AMD RDNA3+: bf16 Hardware-Support ✓
Automatic Mixed Precision (AMP)
Beim Mixed Precision Training werden nicht alle Berechnungen in 16-bit durchgeführt. Einige kritische Operationen bleiben in fp32:
Mixed Precision Training – was in welcher Präzision:
fp16/bf16 (schnell, wenig Speicher):
✓ Forward Pass (Aktivierungen)
✓ Backward Pass (Gradienten)
✓ Modell-Gewichte (Inference-Kopie)
fp32 (sicher, genau):
✓ Master-Kopie der Gewichte (Optimizer States)
✓ Gewichts-Updates
✓ Loss Berechnung
✓ Batch Normalization (Statistiken)
Ergebnis: ~2× weniger VRAM, 2–3× schneller
bei minimalem QualitätsverlustSpeicherersparnis durch Mixed Precision
In FrameTrain
Gradient Checkpointing
VRAM halbieren durch selektives Neuberechnen von Aktivierungen
Gradient Checkpointing (auch Activation Checkpointing) ist eine Technik, die den VRAM-Bedarf auf Kosten von etwas Rechenzeit reduziert. Ideal wenn VRAM der limitierende Faktor ist.
Das Problem: Aktivierungsspeicher
Beim normalen Backpropagation müssen alle Zwischenaktivierungen (Outputs jeder Schicht) im VRAM gespeichert werden, um Gradienten berechnen zu können:
Normales Training (N=32 Schichten, L=7B):
Forward Pass: alle 32 Schichten-Outputs speichern
Aktivierungs-Speicher: ~4–8 GB (bei BS=4, seq=512)
Problem: Bei großen BS oder langen Sequenzen:
BS=16, seq=2048 → ~32 GB NUR für Aktivierungen!
Gradient Checkpointing:
Speichere nur jeden K-ten "Checkpoint" (z.B. jede 4. Schicht)
Beim Backward Pass: Nicht-gespeicherte Aktivierungen
werden NEU BERECHNET
Trade-off:
Speicher: ÷2 bis ÷4 (ca. 30–60% weniger)
Geschwindigkeit: ×0.7–0.8 (20–30% langsamer)Wie viel Speicher Gradient Checkpointing spart
Die ultimative Speicher-Optimierungs-Kombination
Maximale Speicherersparnis – alle Tricks kombiniert:
Basis 7B Modell (fp32): 28 GB VRAM
+ Mixed Precision (bf16): ÷2 14 GB
+ LoRA (nur Adapter trainieren): ÷3 ~5 GB Gradients
+ QLoRA (4-bit Basis): ÷4 ~3.5 GB Basis
+ Gradient Checkpointing: -2GB ~4 GB Aktivierungen
+ Gradient Accumulation (BS=1): -1GB ~3 GB Batches
Total: ~5–6 GB VRAM für 7B Fine-Tuning!
→ Möglich auf RTX 3070 (8 GB) ✓
Ohne irgendeine Optimierung: 60+ GB → unmöglich auf Consumer-GPUGradient Checkpointing in FrameTrain
In FrameTrain kannst du Gradient Checkpointing im Training-Panel aktivieren. Es wird automatisch empfohlen wenn das System erkennt, dass VRAM knapp werden könnte. Als Faustregel: aktiviere es immer wenn VRAM < 12 GB und Modell > 1B Parameter.
Wann Gradient Checkpointing lohnt sich
Early Stopping
Automatisch zum optimalen Zeitpunkt aufhören
Early Stopping überwacht den Validation Loss und stoppt das Training automatisch, wenn keine sinnvolle Verbesserung mehr stattfindet. Es lädt automatisch den besten Checkpoint.
Warum Early Stopping so wichtig ist
Ohne Early Stopping
- Training läuft alle geplanten Epochen
- Modell overfittet nach optimalem Punkt
- Letzter Checkpoint ≠ bester Checkpoint
- Verschwenderisch: Training nach Overfitting-Punkt nutzlos
Mit Early Stopping
- Training stoppt automatisch am optimalen Punkt
- Best Checkpoint wird automatisch geladen
- Kein Overfitting durch zu langes Training
- Spart Rechenzeit wenn Plateau früh erreicht
Early Stopping Parameter erklärt
patience
Typisch: 3–5 EpochenWie viele Epochen ohne Verbesserung toleriert werden, bevor gestoppt wird.
Effekt: Zu niedrig: stoppt zu früh (bei temporären Schwankungen). Zu hoch: Overfitting passiert trotzdem.
💡 patience=3 für kurze Trainings. patience=5 für lange Trainings mit Schwankungen.
min_delta
Typisch: 0.0001–0.001Minimale Verbesserung des Validation Loss um als "besser" zu zählen.
Effekt: Verhindert Stoppen wenn nur minimales Rauschen die Metrik leicht verbessert.
💡 min_delta=0.001 ist ein guter Startwert.
monitor
"val_loss" oder "val_accuracy"Welche Metrik überwacht wird.
Effekt: val_loss ist stabiler und direkter. val_accuracy kann plateauen während val_loss noch sinkt.
💡 Immer val_loss monitoren, nicht val_accuracy.
restore_best_weights
True (immer empfohlen)Ob der beste Checkpoint automatisch geladen wird wenn gestoppt wird.
Effekt: Ohne: letzter Checkpoint (nach Overfitting). Mit: bester Checkpoint geladen.
💡 Immer True. Nur Ausnahme: wenn der letzte Checkpoint explizit gewünscht.
Early Stopping Strategie nach Training-Typ
Kurzes Fine-Tuning (3–5 geplante Epochen): patience = 2 min_delta = 0.001 → Wenig Toleranz für Schwankungen Mittleres Fine-Tuning (5–20 Epochen): patience = 3 min_delta = 0.0005 → Standard-Setup Langes Fine-Tuning (20+ Epochen): patience = 5 min_delta = 0.0001 → Genug Toleranz für Lernkurven-Plateaus Kombination mit LR Scheduler (ReduceLROnPlateau): LR wird reduziert bei Plateau, dann noch 3 Epochen versucht → Early Stopping erst danach → bessere Ausnutzung des Trainings
Best Practices
Monitor IMMER val_loss, nicht train_loss (train_loss sinkt immer weiter)
Aktiviere restore_best_weights=True – sonst lädst du das schlechteste Modell
Speichere den besten Checkpoint separat (save_best_only=True)
Patience von 3 überlebt kurze Spikes, ist aber nicht zu lasch
Kombiniere mit Cosine LR Decay: LR kühlt ab, bevor Early Stopping greift
Bei wenig Daten: Early Stopping nach Validation F1, nicht nur Loss
Model Ensembles
Mehrere Modelle kombinieren für maximale Performance
Ensembles kombinieren die Vorhersagen mehrerer Modelle. Sie sind fast immer besser als ein einzelnes Modell – auf Kosten von mehr Rechenaufwand zur Inferenzzeit.
Ensemble-Methoden im Detail
Majority Voting (Classification)
Ø +1–5% Accuracy typischJedes Modell gibt eine Klassen-Vorhersage. Die häufigste Klasse gewinnt (wie eine Wahl).
# 3 Modell-Vorhersagen kombinieren:
predictions = [model1.predict(x), # "positiv"
model2.predict(x), # "positiv"
model3.predict(x)] # "negativ"
from collections import Counter
final = Counter(predictions).most_common(1)[0][0]
# → "positiv" (2 von 3 Modellen)Einsatz: Wenn Klassen-Label (nicht Wahrscheinlichkeit) verfügbar
Probability Averaging ⭐ (Empfohlen)
Ø +2–8% typisch gegenüber einzelnem ModellSoftmax-Wahrscheinlichkeiten aller Modelle werden gemittelt. Dann höchste Wahrscheinlichkeit als Klasse.
# Wahrscheinlichkeiten mitteln: probs_1 = model1.predict_proba(x) # [0.8, 0.2] probs_2 = model2.predict_proba(x) # [0.6, 0.4] probs_3 = model3.predict_proba(x) # [0.9, 0.1] avg_probs = np.mean([probs_1, probs_2, probs_3], axis=0) # → [0.77, 0.23] final_class = np.argmax(avg_probs) # Klasse 0 = "positiv"
Einsatz: Wenn Softmax-Wahrscheinlichkeiten verfügbar – fast immer besser als Majority Voting
Checkpoint Ensemble
Ø +1–3% typischVerschiedene Checkpoints desselben Trainings werden kombiniert. Kostengünstig – kein separates Training nötig.
# Letzte N Checkpoints aus einem Training:
checkpoints = [
'model_epoch_8.pt',
'model_epoch_9.pt',
'model_epoch_10.pt'
]
# Vorhersagen aller Checkpoints mitteln
ensemble_probs = np.mean([
load_and_predict(ckpt, x)
for ckpt in checkpoints
], axis=0)Einsatz: Wenn mehrmalige Training-Runs zu teuer sind – nutzt bereits vorhandene Checkpoints
Diverse Ensemble (verschiedene Seeds/HPs)
Ø +3–10% typischSelbes Modell, aber verschiedene Random Seeds oder leicht verschiedene Hyperparameter. Mehr Diversität = besser.
# 5 Runs mit verschiedenen Seeds:
models = []
for seed in [42, 123, 456, 789, 1337]:
model = train_with_seed(seed, lr=2e-5)
models.append(model)
# Ensemble der 5 Modelle:
ensemble_pred = np.mean([
m.predict_proba(x) for m in models
], axis=0)Einsatz: Wettbewerbe, wenn maximale Performance nötig
Stacking (Meta-Learning)
Ø +3–15% möglich, hoher AufwandEin Meta-Modell lernt, die Outputs der Basis-Modelle optimal zu kombinieren. Komplexer aber mächtiger.
# Stacking Ablauf:
# 1. Basis-Modelle trainieren (cross-validation)
# 2. Basis-Modell-Predictions als Features verwenden
# 3. Meta-Modell auf diese Features trainieren
# Einfachster Meta-Learner: Logistische Regression
from sklearn.linear_model import LogisticRegression
meta_features = np.column_stack([
model1.predict_proba(X_val),
model2.predict_proba(X_val),
model3.predict_proba(X_val)
])
meta_model = LogisticRegression().fit(meta_features, y_val)Einsatz: Wenn Basis-Modelle sehr verschieden sind (unterschiedliche Architekturen)
Ensemble-Diversität – der Schlüssel zum Erfolg
Ensembles funktionieren am besten, wenn die Einzelmodelle unterschiedliche Fehler machen. Diversität entsteht durch:
Verschiedene Random Seeds
Einfachste Methode, immer empfohlen
Verschiedene Hyperparameter
LR, rank, dropout leicht variieren
Verschiedene Modell-Architekturen
BERT + RoBERTa + DeBERTa kombinieren
Verschiedene Trainings-Splits
Cross-Validation Folds als Ensemble
Verschiedene Daten-Augmentation
Jedes Modell auf leicht verschiedenen Daten
Checkpoint Ensemble
Verschiedene Trainings-Zeitpunkte
Ensembles mit FrameTrain
Geschafft! Du kennst jetzt alle Grundlagen
Von den ML-Grundlagen bis zu fortgeschrittenen Techniken wie Ensembles und Mixed Precision – du hast den kompletten KI-Training Coach durchlaufen. Zeit, das Gelernte in die Praxis umzusetzen.