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.

FormatExponentenbits / NachkommabitsPraktischer Aspekt
BF168 / 7Großer Wertebereich; kommt meist ohne Loss Scaling aus
FP165 / 10Kleine Gradienten können unterlaufen; Loss Scaling verwenden
FP8 E4M34 / 3Höhere Präzision als E5M2, kleinerer Wertebereich
FP8 E5M25 / 2Größ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.