BF16 vs. FP16 vs. FP8: In welchem Format sollte ich trainieren?
Automatische Übersetzung
Dieser Artikel wurde automatisch aus der englischen Originalversion übersetzt.
Beginne mit BF16, wenn die GPU und der Training-Stack es unterstützen. Nutze FP16 mit Loss Scaling, wenn BF16 nicht verfügbar ist oder die gemessene Arbeitslast mit FP16 besser läuft. Teste FP8 mit einer unterstützten Mixed-Precision-Implementierung, wenn der Training-Throughput die zusätzlichen numerischen Prüfungen rechtfertigt.
Mixed Precision verwendet unterschiedliche Formate für verschiedene Operationen und Zustände. Die Wahl von BF16 oder FP8 bedeutet nicht, dass jeder Tensor dieses Format verwendet.
Wertebereich und Präzision lösen unterschiedliche Probleme
Der Exponent bestimmt den Wertebereich. Die Anzahl der Nachkommabits bestimmt, wie eng benachbarte Werte dargestellt werden können. BF16 behält die Exponentenbreite von FP32 bei, hat aber weniger Nachkommabits. FP16 bietet innerhalb seines kleineren Wertebereichs eine feinere Präzision als BF16.
| Format | Exponentenbits / Nachkommabits | Praktischer Aspekt |
|---|---|---|
| BF16 | 8 / 7 | Großer Wertebereich; kommt meist ohne Loss Scaling aus |
| FP16 | 5 / 10 | Kleine Gradienten können unterlaufen; Loss Scaling verwenden |
| FP8 E4M3 | 4 / 3 | Höhere Präzision als E5M2, kleinerer Wertebereich |
| FP8 E5M2 | 5 / 2 | Größerer Wertebereich für Tensoren wie Gradienten |
Bei FP16 multipliziert Loss Scaling den Loss vor der Rückwärtsrechnung und skaliert die Gradienten vor dem Optimizer-Update zurück. So bleiben kleine Gradienten besser darstellbar. Überläufe müssen weiterhin behandelt werden.
Die Dokumentation von NVIDIAs Transformer Engine beschreibt ein übliches hybrides FP8-Verfahren: E4M3 für Tensoren im Vorwärtsdurchlauf und E5M2 für Tensoren im Rückwärtsdurchlauf, mit einer auf die Tensoren abgestimmten Skalierung. Blackwells blockweise skalierte Formate bieten weitere Verfahren; die Hardware-Unterstützung allein legt keines für dein Model fest.
Eine numerische Referenz erstellen
Führe einen repräsentativen Trainingsabschnitt mit derselben Datenreihenfolge und denselben Optimizer-Einstellungen aus. Vergleiche den maximalen Speicherbedarf, die Zeit pro Schritt, den Loss-Verlauf, nicht endliche Werte und die Qualität auf zurückgehaltenen Daten. Nutze für numerisch empfindliche Operationen und Optimizer-Zustände die Präzision, die die Implementierung erfordert.
Ein schnellerer Lauf, der divergiert oder die Qualitätsanforderung verfehlt, spart keine Trainingskosten. Umgekehrt kann eine stabile BF16-Referenz ausreichen, ohne zusätzliche Arbeit für FP8.
Der Abschnitt zu Mixed-Precision-Training im LLM Engineering Guide enthält die Wertebereiche der Formate und veröffentlichte Trainingsergebnisse.