FP16- & bfloat16-Bitmuster-Visualisierer

Visualisieren Sie die Bitmuster von Gleitkommazahlen halber Genauigkeit (FP16, IEEE 754 binary16) und bfloat16. Konvertieren Sie Dezimalzahlen in Bits und zurück, mit farblich markiertem Vorzeichen, Exponent und Mantisse. Nützlich zum Lernen über ML-Quantisierung und Inferenzbeschleunigung.

Struktur von FP16 vs. bfloat16

Beide Formate haben insgesamt 16 Bit, verteilen diese aber sehr unterschiedlich auf Exponent und Mantisse — mit jeweils sehr unterschiedlichem darstellbarem Bereich und Genauigkeit.

Element FP16 (IEEE 754 halbe Genauigkeit) bfloat16
Bits gesamt 16 16
Exponent-Bits 5 8
Mantissen-Bits 10 7
Darstellbarer Bereich Etwa ±6,1×10⁻⁵ bis ±65504 (engerer Bereich, aber mehr Mantissen-Bits für Genauigkeit) Etwa ±1,2×10⁻³⁸ bis ±3,4×10³⁸ (gleich weiter Bereich wie float32, aber geringere Genauigkeit)
Haupteinsatzgebiet Bildverarbeitung, Grafik und speichereffiziente Inferenz (Training mit halber Genauigkeit) Deep-Learning-Training (TPUs und moderne GPUs) — kein Sorgen über Exponenten-Überlauf bei der Konvertierung von float32

bfloat16 teilt sich die 8-Bit-Exponentenbreite und den Bias (127) mit float32 — es kann daher einfach durch Abschneiden der Mantisse aus einem float32-Wert erzeugt werden, ein praktischer Implementierungsvorteil.

Sehen, wie die Bits bei FP16 und bfloat16 angeordnet sind

Obwohl beide sechzehn Bit belegen, verteilen FP16, also IEEE 754 binary16, und bfloat16 diese Bits auf recht verschiedene Weise. Dieses Werkzeug rechnet zwischen Dezimalwerten und Bitmustern um und färbt Vorzeichen, Exponent und Mantisse getrennt ein, damit der Unterschied sichtbar wird und nicht bloß nachzulesen ist.

**Der Kern liegt in der Verteilung. FP16 gibt dem Exponenten fünf Bit und der Mantisse zehn, bfloat16 dagegen dem Exponenten acht und der Mantisse sieben.** Acht Exponentenbits sind genau das, was die einfache Genauigkeit verwendet, und daraus folgen zwei Eigenschaften. Die erste: **bfloat16 umspannt denselben Wertebereich wie FP32.** Die zweite: **die Umrechnung aus FP32 läuft auf das Abschneiden auf die oberen sechzehn Bit hinaus.** Deshalb bevorzugt das maschinelle Lernen bfloat16 — die Gefahr, dass ein Wert aus dem Bereich fliegt und einen Trainingslauf verdirbt, ist weit geringer. Der Preis ist eine Mantisse von nur sieben Bit, sodass **die Genauigkeit gröber ausfällt als bei FP16.** Wählen Sie FP16, wo es auf Genauigkeit ankommt, und bfloat16, wo es auf den Bereich ankommt.

So gehen Sie vor

  1. Wählen Sie die Richtung der Umrechnung Von Dezimal zu Bits und von Bits zu Dezimal stehen beide bereit.
  2. Geben Sie einen Wert ein Eine Dezimalzahl oder eine Folge aus Einsen und Nullen tut es gleichermaßen.
  3. Lesen Sie die gefärbten Bits **Vorzeichen, Exponent und Mantisse erscheinen jeweils in eigener Farbe.**
  4. Stellen Sie FP16 und bfloat16 gegenüber **Denselben Wert in beiden Formaten darzustellen zeigt genau, wo sie sich trennen.**

Tipps für die Nutzung

  • Selbst bei demselben Wert wie 0.1 runden FP16 und bfloat16 sehr unterschiedlich. Wechseln Sie das Format und vergleichen Sie die Mantissen-Bitmuster.
  • Da bfloat16 die Exponentenbreite und den Bias von float32 teilt, widersteht es Überläufen selbst bei großen Werten über 65504. FP16 dagegen läuft schon oberhalb von 65504 zu Unendlich über.
  • Die Umwandlung von "70000" in FP16 läuft zu Unendlich über, während bfloat16 den Wert (mit reduzierter Genauigkeit) korrekt darstellt.
  • Bei der Quantisierung von Modellen in Frameworks wie PyTorch oder TensorFlow lässt sich bfloat16 leicht aus float32 konvertieren, während der engere Bereich von FP16 manchmal eine vorherige Skalierung erfordert.
  • Um Bits zurück in Dezimalzahlen umzuwandeln, geben Sie einen 4-stelligen Hexadezimalwert mit `0x`-Präfix oder einen 16-stelligen Binärwert ein (das `0b`-Präfix ist optional).

Wofür Sie es nutzen können

Um zu verstehen, was Quantisierung kostet

**Sie können konkret feststellen, wie weit ein Wert gerundet wird, wenn ein Modell auf sechzehn Bit gesenkt wird.**

Um zwischen den Formaten zu entscheiden

Es liefert die Grundlage, um abzuwägen, ob Ihr Fall Bereich oder Genauigkeit verlangt.

Um zu finden, wo der Überlauf beginnt

**Sie können mit echten Werten ausprobieren, was geschieht, sobald die größte in FP16 darstellbare Zahl überschritten wird.**

Um die Arbeitsweise der Gleitkommazahl zu erlernen

Sie können Bit für Bit verfolgen, wie Exponent und Mantisse zusammen eine einzige Zahl ausdrücken.

Begriffe zur Gleitkommazahl

Vorzeichenbit
Das einzelne höchste Bit, das das Vorzeichen angibt: 0 für positiv, 1 für negativ.
Exponent
Der Teil, der die Größenordnung des Wertes ausdrückt. **FP16 weist ihm fünf Bit zu, bfloat16 acht.**
Mantisse
Der Teil, der den geltenden Ziffern entspricht. **FP16 hat zehn Bit, bfloat16 sieben, und eben dieser Abstand ist der Unterschied in der Genauigkeit.**
Bfloat16
**Ein Sechzehn-Bit-Format, das den Exponenten bei den acht Bit von FP32 belässt.** Es halbiert den Speicher, ohne den Bereich preiszugeben.
Subnormale Zahl
Die Darstellung, die bei kleinstem Exponenten verwendet wird und Werte äußerst nahe bei null erlaubt.
Quantisierung
Das Verfahren, die Gewichte eines Modells mit weniger Bit auszudrücken. **Speicher und Rechenaufwand sinken, und mit ihnen die Genauigkeit.**

Häufig gestellte Fragen

Beide haben insgesamt 16 Bit, aber FP16 (IEEE 754 halbe Genauigkeit) verwendet 5 Exponenten-Bits und 10 Mantissen-Bits, während bfloat16 8 Exponenten-Bits und 7 Mantissen-Bits verwendet. Die zusätzlichen Mantissen-Bits von FP16 geben ihm höhere Genauigkeit, aber einen engeren Bereich; bfloat16 tauscht Genauigkeit gegen den weiten Bereich von float32.

Beim Deep-Learning-Training können Gradienten und Parameter zwischen extrem großen und kleinen Werten schwanken. bfloat16 behält den weiten darstellbaren Bereich von float32 bei (widersteht Über-/Unterlauf) und halbiert dabei Speicher und Rechenaufwand. Der engere Bereich von FP16 kann leichter überlaufen, was manchmal zusätzliches Loss-Scaling beim Training erfordert.

Etwa 65504. Die Umwandlung eines größeren Werts in FP16 läuft zu Unendlich über. bfloat16 kann dank gleicher Exponentenbreite wie float32 Werte bis etwa 3,4×10³⁸ darstellen.

Ein Bitmuster, bei dem der Exponent null ist, die Mantisse aber nicht. Reguläre (normale) Gleitkommazahlen haben eine implizite führende 1 in der Mantisse; subnormale Zahlen lassen diese weg und ermöglichen so Werte, die noch näher an null liegen als die kleinste normale Zahl — auf Kosten der Genauigkeit.

bfloat16 entspricht exakt der Exponentenbreite (8 Bit) und dem Bias (127) von float32, sodass die Umwandlung lediglich darin besteht, die oberen 7 Mantissen-Bits des float32-Musters zu behalten (mit Rundung) — ohne Neuberechnung des Exponenten oder Bereichsprüfung, was die Implementierung vereinfacht.
Tool-kun

Übrigens – Warum das maschinelle Lernen eine "weniger genaue" Zahlendarstellung wollte

Um 2018 entwickelte Google für seine Tensor Processing Units (TPUs) ein neues 16-Bit-Gleitkommaformat namens bfloat16. FP16 (IEEE 754 halbe Genauigkeit) existierte bereits und wurde in Bildverarbeitung und Grafik praktisch eingesetzt, doch seine mageren 5 Exponenten-Bits gaben ihm einen engen darstellbaren Bereich — schlecht geeignet für die verschwindenden und explodierenden Gradienten, die beim Deep-Learning-Training auftreten.

Die Designidee von bfloat16 ist einfach: Mantissen-Genauigkeit opfern, aber den Exponenten exakt so breit wie die 8 Bit von float32 halten, um die extrem großen und kleinen Werte, die beim Training auftreten, sicher zu handhaben. Der Name "Brain Floating Point" stammt von Google Brain, dem Forschungsteam für maschinelles Lernen, das es entwickelt hat.

In der konventionellen Informatik galt eine Reduzierung der Gleitkomma-Genauigkeit lange als Nährboden für Fehler. Doch Deep-Learning-Modelle haben eine ungewöhnliche Eigenschaft: Ein bescheidener numerischer Fehler beeinträchtigt die endgültige Vorhersagegenauigkeit selten stark. Diese Eigenschaft — "etwas ungenau, funktioniert aber insgesamt" — zu nutzen und dabei mit einem 16-Bit-Format Speicher- und Rechenkosten zu halbieren, stellt eine Optimierung dar, die ganz eigen für das maschinelle Lernen ist und weit von der traditionellen Informatik-Weisheit abweicht.