FP32 vs. FP16 vs. BF16 vs. INT8: Zahlenformate im Vergleich
FP32 ist eine 32-Bit-Gleitkommazahl einfacher Genauigkeit und dient als Referenz für Berechnungen. FP16 und BF16 haben beide 16 Bit, teilen die Bits aber unterschiedlich auf. FP16 verwendet mehr Bits für die Mantisse und gewinnt so Genauigkeit, sein Wertebereich ist mit einem Maximum von 65504 jedoch schmal. BF16 hat wie FP32 einen 8-Bit-Exponenten und behält so einen Wertebereich auf FP32-Niveau, büßt dafür aber Genauigkeit ein. INT8 ist eine 8-Bit-Ganzzahl, die bei der Quantisierung reelle Zahlen über einen Skalierungsfaktor annähert und bei der KI-Inferenz Speicher und Energie stark reduziert.
| Merkmal | FP32 | FP16 | BF16 | INT8 |
|---|---|---|---|---|
| Bitbreite | 32 Bit | 16 Bit | 16 Bit | 8 Bit |
| Bits für Vorzeichen/Exponent/Mantisse | 1/8/23 | 1/5/10 | 1/8/7 | Kein Exponent und keine Mantisse. Ganzzahl im Zweierkomplement von −128 bis 127 |
| Größter darstellbarer Wert | Etwa 3,4 × 10³⁸ | 65504 | Etwa 3,4 × 10³⁸ (nahezu wie FP32) | 127 (reelle Zahlen werden mit Skalierungsfaktor dargestellt) |
| Kleinste normalisierte Zahl | Etwa 1,2 × 10⁻³⁸ | Etwa 6,1 × 10⁻⁵ (2⁻¹⁴) | Etwa 1,2 × 10⁻³⁸ | Keine (die Schrittweite der darstellbaren Werte ergibt sich aus dem Skalierungsfaktor) |
| Typische Genauigkeit | Etwa 7 Dezimalstellen (Abstand zwischen 1 und der nächsten Zahl: 2⁻²³ ≈ 1,2 × 10⁻⁷) | Etwa 3 Dezimalstellen (2⁻¹⁰ ≈ 9,8 × 10⁻⁴) | 2–3 Dezimalstellen (2⁻⁷ ≈ 7,8 × 10⁻³) | Skala mit 256 Stufen |
| Umwandlung aus FP32 | Entfällt (Referenz) | Wegen des schmalen Bereichs können große Werte überlaufen und kleine Werte zu 0 werden | Es genügt, die oberen 16 Bit zu übernehmen und zu runden; kein Überlauf des Wertebereichs | Quantisierung mit festgelegtem Skalierungsfaktor (und Nullpunkt). Eine Kalibrierung zur Ermittlung des Wertebereichs ist nötig |
| Speicher pro Wert | 4 Byte | 2 Byte | 2 Byte | 1 Byte |
| Effizienz der Recheneinheiten | Große Multiplizierer, daher wenige Multiply-Accumulate-Einheiten pro Fläche | Kleinere Recheneinheiten als FP32, viele Multiply-Accumulate-Einheiten möglich | Ähnlich wie FP16. Dank kürzerer Mantisse noch kleinere Multiplizierer | Kleinste und sparsamste Multiplizierer. Produkte werden meist als 32-Bit-Ganzzahlen akkumuliert |
| Einsatz im Training | Master-Gewichte, Optimiererzustände, Akkumulation von Produkten | Training mit gemischter Genauigkeit. Loss Scaling verhindert, dass kleine Gradienten zu 0 werden | Weit verbreitet im Training mit gemischter Genauigkeit. Loss Scaling meist nicht nötig | Im Allgemeinen nicht verwendet (beim quantisierungsbewussten Training wird der Quantisierungseffekt nachgebildet) |
| Einsatz in der Inferenz | Genauigkeitsreferenz. Wenn Genauigkeit Vorrang vor Leistung hat | Inferenz auf GPUs u. Ä. | Inferenz auf GPUs und KI-Beschleunigern | Inferenz quantisierter Modelle, besonders auf Edge-NPUs u. Ä. |
Die Zahlenwerte sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.