Das numerische bfloat16-Format

Eine Verwendung von Gleitkommazahlen mit niedriger Genauigkeit ist eine gängige Methode, mit der sich die Zeit bis zur Konvergenz verkürzen kann, ohne dass die Genauigkeit beeinträchtigt wird. TPUs verwenden beim Ausführen von Matrixvorgängen das bfloat16-Zahlenformat. Matrixmultiplikationsvorgänge werden für bfloat16-Werte und Akkumulationen für IEEE-float32-Werte ausgeführt.

bfloat16 ist ein benutzerdefiniertes 16-Bit-Gleitkommaformat für maschinelles Lernen, das aus einem Zeichenbit, acht Exponentenbits und sieben Mantissa-Bits besteht. Das folgende Diagramm zeigt das Innere von drei Gleitkommaformaten: float32: einfache IEEE-Genauigkeit, float16: halbe IEEE-Genauigkeit und bfloat16.

Image

Der dynamische Bereich von bfloat16 und float32 ist äquivalent. bfloat16 belegt jedoch nur die Hälfte des Arbeitsspeichers. Weitere Informationen zur Leistung von bfloat16 finden Sie unter Eine Studie zu BFLOAT16 für Deep Learning-Schulungen.

bfloat16 auswählen

Das Google-Hardwareteam hat bfloat16 für Cloud TPUs gewählt, um die Hardwareeffizienz zu verbessern und gleichzeitig Deep-Learning-Modelle genau zu trainieren – minimalen Wechselkosten von float32. Die physische Größe eines Hardwaremultiplizierers wird mit dem Quadrat der Mantissenbreite skaliert. Mit weniger Mantissenbits als bei FP16 haben bfloat16-Multiplizierer in Silizium etwa die Hälfte der Größe eines typischen FP16-Multiplizierers und sind achtmal kleiner als ein float32-Multiplizierer.

Neuronale Netzwerke sind empfindlicher auf die Größe des Exponenten als auf die Größe der Mantisa. Damit das Verhalten bei Unterläufen, Überläufen und NaNs identisch ist, hat bfloat16 dieselbe Exponentengröße wie float32. bfloat16 verarbeitet Denormalzahlen anders als float32 – es löscht sie auf null. Im Gegensatz zu float16, das in der Regel eine spezielle Behandlung wie die Verlustskalierung erfordert, ist bfloat16 ein Ersatz für float32 beim Trainieren und Ausführen von neuronalen Deep-Learning-Netzwerken.

Training mit gemischter Genauigkeit

Die meisten Berechnungen in einem neuronalen Deep-Learning-Netzwerk können eine Aufgabe mit derselben Genauigkeit mithilfe von Werten mit niedrigerer Genauigkeit ausführen. Einige Modelle können sogar eine höhere Genauigkeit mit Werten mit niedrigerer Genauigkeit erreichen.

Beim Programmieren von Cloud TPUs konvertiert der XLA-Compiler automatisch Werte zwischen float32 und bfloat16.

Modellportabilität

Die Werte von Parametern und Aktivierungen in einem Modell können im 32-Bit-Format gespeichert werden, da die TPU-Hardware diese Werte automatisch in bfloat16 streamen kann. Prüfpunkte, die aus einem auf Cloud TPUs trainierten Modell abgerufen wurden, können ohne umfangreiche manuelle Konvertierungen auf anderen Hardwareplattformen (z. B. Inferenz oder Feinabstimmung auf CPUs oder GPUs) bereitgestellt werden.

Leistung mit bfloat16 verbessern

Während die automatische Formatumwandlung in TPUs erlaubt, dass Sie nicht über die numerische Genauigkeit nachdenken, können Sie durch explizites Umwandeln von Werten in bfloat16 weitere Leistungsverbesserungen erzielen. Es gibt zwei Gründe, explizit Werte in bfloat16 umzuwandeln:

  1. Das Speichern von Werten im Format bfloat16 spart On-Chip-Arbeitsspeicher, sodass Cloud TPUs größere Modelle trainieren oder größere Batches verwenden können.

  2. Einige Operationen sind an die Arbeitsspeicherbandbreite gebunden. Das heißt, dass die Zeit, die zum Laden von Daten aus dem Arbeitsspeicher aufgewendet wird, die für die Berechnung benötigte Zeit verlängern kann. Das Speichern von Operanden und Ausgaben dieser Vorgänge im bfloat16-Format reduziert die zu übertragende Datenmenge, wodurch die Gesamtgeschwindigkeit verbessert wird.

Für den Einstieg empfehlen wir Ihnen, praktische Erfahrungen mit einem der bfloat16-fähigen Referenzmodelle zu sammeln, die für Cloud TPUs optimiert wurden. Danach bieten unser Leitfaden zur Leistungsübersicht, der Leitfaden zu Profiltools und der Leitfaden zur Fehlerbehebung detaillierte technische Informationen zum Erstellen und Optimieren eigener ML-Modelle.