Leistung des Modells mit bfloat16 verbessern
Standardmäßig führen TPUs Matrixmultiplikationsvorgänge mit bfloat16
-Werten und Akkumulationen mit IEEE-float32
-Werten aus. Durch die Verwendung von Gleitkommazahlen mit reduzierter Genauigkeit wird die Zeit bis zur Konvergenz verkürzt, ohne dass die Genauigkeit beeinträchtigt wird.
Der dynamische Bereich von bfloat16
und float32
ist gleich. bfloat16
belegt jedoch nur die Hälfte des Arbeitsspeichers. Weitere Informationen zur Leistung von bfloat16
finden Sie im Artikel A Study of BFLOAT16 for Deep Learning Training (Eine Studie zu BFLOAT16 für das Deep-Learning-Training).
Bfloat16 explizit verwenden
Die automatische Formatumwandlung in TPUs erlaubt, dass Sie nicht über die numerische Genauigkeit nachdenken. Sie können jedoch Leistungsverbesserungen erzielen, indem Sie Werte explizit in bfloat16
umwandeln. Es gibt zwei Gründe, Werte explizit in bfloat16
umzuwandeln:
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.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.
Als Erstes sollten Sie praktische Erfahrungen mit einem der Cloud TPU-Referenzmodelle sammeln. Anschließend finden Sie im Leitfaden zur Profilerstellungstools und im Leitfaden zur Fehlerbehebung ausführliche technische Informationen zum eigenständigen Erstellen und Optimieren von ML-Modellen.
Details zur Formatkonvertierung
Die Formatkonvertierung von float32
nach bfloat16
wird automatisch vom XLA-Compiler eingefügt. Auf TPU wird bei der Umwandlung auf den nächsten geraden Wert aufgerundet und bei Überlauf auf inf
. Außerdem werden auf Cloud TPU mit bfloat16
keine Subnormalwerte unterstützt. Daher werden alle Subnormalwerte bei der Umwandlung auf Null gesetzt.
Spezielle Werte wie NaN
und inf
bleiben in der Conversion erhalten.
Die Formatkonvertierung von bfloat16
nach float32
wird ebenfalls automatisch vom XLA-Compiler eingefügt. Da float32
alle genauen Werte in bfloat16
darstellen kann, werden bei der Umwandlung 16 Nullen in die Mantissenbits eingefügt. Spezielle Werte bleiben bei der Conversion erhalten.
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.