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.

MerkmalFP32FP16BF16INT8
Bitbreite32 Bit16 Bit16 Bit8 Bit
Bits für Vorzeichen/Exponent/Mantisse1/8/231/5/101/8/7Kein Exponent und keine Mantisse. Ganzzahl im Zweierkomplement von −128 bis 127
Größter darstellbarer WertEtwa 3,4 × 10³⁸65504Etwa 3,4 × 10³⁸ (nahezu wie FP32)127 (reelle Zahlen werden mit Skalierungsfaktor dargestellt)
Kleinste normalisierte ZahlEtwa 1,2 × 10⁻³⁸Etwa 6,1 × 10⁻⁵ (2⁻¹⁴)Etwa 1,2 × 10⁻³⁸Keine (die Schrittweite der darstellbaren Werte ergibt sich aus dem Skalierungsfaktor)
Typische GenauigkeitEtwa 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 FP32Entfällt (Referenz)Wegen des schmalen Bereichs können große Werte überlaufen und kleine Werte zu 0 werdenEs genügt, die oberen 16 Bit zu übernehmen und zu runden; kein Überlauf des WertebereichsQuantisierung mit festgelegtem Skalierungsfaktor (und Nullpunkt). Eine Kalibrierung zur Ermittlung des Wertebereichs ist nötig
Speicher pro Wert4 Byte2 Byte2 Byte1 Byte
Effizienz der RecheneinheitenGroße Multiplizierer, daher wenige Multiply-Accumulate-Einheiten pro FlächeKleinere Recheneinheiten als FP32, viele Multiply-Accumulate-Einheiten möglichÄhnlich wie FP16. Dank kürzerer Mantisse noch kleinere MultipliziererKleinste und sparsamste Multiplizierer. Produkte werden meist als 32-Bit-Ganzzahlen akkumuliert
Einsatz im TrainingMaster-Gewichte, Optimiererzustände, Akkumulation von ProduktenTraining mit gemischter Genauigkeit. Loss Scaling verhindert, dass kleine Gradienten zu 0 werdenWeit verbreitet im Training mit gemischter Genauigkeit. Loss Scaling meist nicht nötigIm Allgemeinen nicht verwendet (beim quantisierungsbewussten Training wird der Quantisierungseffekt nachgebildet)
Einsatz in der InferenzGenauigkeitsreferenz. Wenn Genauigkeit Vorrang vor Leistung hatInferenz auf GPUs u. Ä.Inferenz auf GPUs und KI-BeschleunigernInferenz quantisierter Modelle, besonders auf Edge-NPUs u. Ä.

Die Zahlenwerte sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.

Wann welche Variante?

FP32
Für Berechnungen, die Genauigkeit erfordern, für Master-Gewichte und Akkumulation im Training sowie als Referenz zur Prüfung von Ergebnissen niedrigerer Genauigkeit.
FP16/BF16
Wenn bei KI-Training und -Inferenz Speicher und Rechenaufwand halbiert werden sollen. BF16 für Training, bei dem der Wertebereich wichtig ist; FP16, wenn die Werte in den Bereich passen und Genauigkeit Vorrang hat.
INT8
Wenn ein trainiertes Modell quantisiert werden soll, um die Inferenz schneller und sparsamer zu machen; für Inferenz auf Edge-Geräten mit begrenztem Speicher und begrenzter Energie.

Häufige Fragen

Warum wird beim KI-Training oft BF16 gegenüber FP16 bevorzugt?

BF16 hat wie FP32 einen 8-Bit-Exponenten und damit nahezu denselben Wertebereich wie FP32. Bei FP16 ist Loss Scaling nötig, um zu verhindern, dass kleine Gradienten zu 0 werden oder große Werte überlaufen; bei BF16 ist es meist nicht nötig, und auch die Umwandlung aus FP32 ist einfach. Die Genauigkeit ist geringer, doch beim Training neuronaler Netze ist das selten ein Problem.

Warum ist der größte Wert von FP16 genau 65504?

FP16 hat einen 5-Bit-Exponenten (Bias 15), und Werte mit lauter Einsen im Exponenten sind für Unendlich und NaN reserviert, daher ist der größte Exponent 2 hoch 15. Mit allen 10 Mantissenbits auf 1 ergibt (2 − 2⁻¹⁰) × 2¹⁵ den größten endlichen Wert, nämlich 65504.

Wie stellt INT8 Werte mit Nachkommastellen dar?

Durch die Näherung reelle Zahl ≈ Skalierungsfaktor × (Ganzzahl − Nullpunkt). Bei symmetrischer Quantisierung um 0 ist der Nullpunkt 0, und der Skalierungsfaktor wird z. B. als „größter Absolutwert ÷ 127“ festgelegt. Skalierungsfaktoren werden pro Tensor oder pro Kanal geführt.

Kann man auch in INT8 trainieren?

Im Allgemeinen wird für das Training ein Gleitkommaformat verwendet, weil Gradienten einen großen Wertebereich haben und auch kleine Aktualisierungen der Gewichte verarbeitet werden müssen. INT8 wird hauptsächlich für die Inferenz quantisierter, bereits trainierter Modelle eingesetzt; auch beim quantisierungsbewussten Training erfolgen die Gewichtsaktualisierungen in Gleitkomma.

Verständnis prüfen

Welche Kombination der Bitzahlen für Vorzeichen, Exponent und Mantisse gilt bei IEEE-754-Gleitkommazahlen einfacher Genauigkeit (32 Bit)?

  1. A1 · 11 · 20
  2. B1 · 8 · 23
  3. C1 · 5 · 26
Antwort und Erläuterung anzeigen

Antwort: B. 1 · 8 · 23

Einfache Genauigkeit (FP32) besteht aus 1 Vorzeichenbit, 8 Exponentenbits und 23 Mantissenbits, zusammen 32 Bit. Da bei normalisierten Zahlen die führende 1 der Mantisse weggelassen wird, beträgt die Genauigkeit 24 Bit, dezimal etwa 7 Stellen. Doppelte Genauigkeit (FP64) hat 1 · 11 · 52 Bit, mit größerem Exponentenbereich und höherer Genauigkeit. 1 · 11 · 20 verwechselt die Exponentenbreite mit der von doppelter Genauigkeit, 1 · 5 · 26 mit der von halber Genauigkeit.

Wie groß ist der größte endliche Wert, der in FP16 (1 Vorzeichenbit, 5 Exponentenbits (Bias 15), 10 Mantissenbits) darstellbar ist?

  1. A32768
  2. B65536
  3. C65504
Antwort und Erläuterung anzeigen

Antwort: C. 65504

Der Exponentenwert mit lauter Einsen (31) ist für Unendlich und NaN reserviert, der größte Exponent ist also 30 und der tatsächliche Exponent 30 − 15 = 15. Sind alle Mantissenbits 1, beträgt der Wert (1 + 1 − 2⁻¹⁰) × 2¹⁵ = (2 − 2⁻¹⁰) × 32768 = 65536 − 32 = 65504. Ergebnisse darüber werden zu Unendlich, weshalb beim Training in FP16 auch auf Überlauf zu achten ist. 32768 ist 2¹⁵ bei Mantisse 0, 65536 ist 2¹⁶; beides ist nicht der Höchstwert.

Was ist der Hauptgrund, warum bfloat16 beim KI-Training verwendet wird?

  1. ADer Exponent hat wie FP32 8 Bit, daher ist der darstellbare Bereich weit
  2. BDie Mantisse ist länger als bei FP32 und die Genauigkeit höher
  3. CEs kann mit Ganzzahlarithmetik gerechnet werden
Antwort und Erläuterung anzeigen

Antwort: A. Der Exponent hat wie FP32 8 Bit, daher ist der darstellbare Bereich weit

bfloat16 ist ein 16-Bit-Format mit 1 Vorzeichenbit, 8 Exponentenbits und 7 Mantissenbits. Da der Exponent wie bei FP32 ist, ist der darstellbare Bereich nahezu gleich; auch sehr kleine oder große Werte wie Gradienten beim Training führen kaum zu Überlauf oder Unterlauf, und der Wechsel von FP32-Modellen ist einfach. Die Genauigkeit ist zwar geringer, doch Training ist gegenüber kleinen Fehlern robust, sodass dies kaum stört, und Datenmenge und Fläche der Rechenwerke lassen sich halbieren. Die Mantisse ist kürzer als bei FP32, und gerechnet wird nicht mit Ganzzahlen, sondern mit Gleitkomma.

  1. Welches bei FP16 (halbe Genauigkeit: 1 · 5 · 10 Bit) beim Training neuronaler Netze leicht auftretende Problem wird durch die Vergrößerung des Verlustwerts um einen Faktor (Loss Scaling) behoben?
  2. Was ist der Hauptvorteil der Umwandlung (Quantisierung) der Gewichte von FP32 in INT8 bei der KI-Inferenz?
  3. Was ist der Hauptgrund, beim gemischtpräzisen KI-Training die meisten Berechnungen in FP16 oder bfloat16 auszuführen, die ursprünglichen Gewichtswerte (Master-Gewichte) aber in FP32 zu halten?

Übungsfragen zu Computerarithmetik

Wichtige Begriffe erklärt

IEEE 754
Internationaler Standard, der die Darstellung von Gleitkommazahlen und die Rechenregeln festlegt. Er definiert Formate wie einfache (32 Bit) und doppelte Genauigkeit (64 Bit), Rundungsverfahren sowie Sonderwerte wie Unendlich und NaN, sodass Rechenergebnisse unabhängig vom Computer übereinstimmen.
bfloat16
16-Bit-Gleitkommaformat mit 1 Vorzeichenbit, 8 Exponentenbits und 7 Mantissenbits. Da der Exponent dem von FP32 entspricht, ist der Wertebereich groß; die Genauigkeit ist gering, aber es wird für KI-Training genutzt. FP16 hat 5 Exponenten- und 10 Mantissenbits, ist genauer, aber im Bereich enger.
INT8
8-Bit-Ganzzahl mit Vorzeichen (−128 bis 127). Bei der KI-Inferenz werden Gewichte und Aktivierungswerte mit einem Skalierungsfaktor in INT8 umgewandelt (Quantisierung); dadurch sinken Rechen- und Speicheraufwand stark, und die Verarbeitung ist mit kleinen Ganzzahlschaltungen schnell.
Gemischte Genauigkeit (Mixed Precision)
Verwendung von Zahlen unterschiedlicher Genauigkeit in verschiedenen Teilen der Berechnung. Multiplikationen z. B. in FP16, Akkumulation in FP32, um Geschwindigkeit und Genauigkeit zu vereinen.
Post-Training-Quantisierung (PTQ)
Verfahren, bei dem Gewichte und Aktivierungen eines fertig trainierten Modells auf niedrigere Genauigkeit umgestellt werden, nachdem anhand repräsentativer Daten der Wertebereich bestimmt wurde. PTQ.

Verwandte Vergleiche