Modellleistung mit bfloat16 verbessern
TPUs führen standardmäßig Matrixmultiplikationsvorgänge mit bfloat16
-Werten und Akkumulationen mit IEEE-float32
-Werten aus. Gleitkommazahlen mit reduzierter Genauigkeit werden verwendet, um die Zeit bis zur Konvergenz zu verringern, ohne dass die Genauigkeit beeinträchtigt wird.
Der dynamische Bereich von bfloat16
und float32
ist identisch. bfloat16
benötigt jedoch nur halb so viel Arbeitsspeicherplatz. Weitere Informationen zur Leistung von bfloat16
finden Sie unter A Study of BFLOAT16 for Deep Learning Training.
bfloat16 explizit verwenden
Aufgrund der automatischen Formatumwandlung in TPUs müssen Sie sich keine Sorgen über die numerische Genauigkeit machen. Sie können jedoch durch explizites Umwandeln von Werten in das bfloat16
-Format gewisse Leistungsverbesserungen erzielen. 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 bzw. größere Batches verwenden können.Einige Vorgänge 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 zu 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
zu bfloat16
wird automatisch vom XLA-Compiler eingefügt. Auf der TPU wird beim Konvertieren das Rundungsschema „auf die nächste gerade Zahl runden“ verwendet und bei einem Überlauf wird inf
ausgegeben. Außerdem unterstützt bfloat16
auf Cloud TPU keine subnormalen Zahlen. Sie werden also während der Konvertierung alle auf null gesetzt.
Sonderwerte wie NaN
und inf
werden bei der Konvertierung jedoch beibehalten.
Die Formatkonvertierung von bfloat16
zu float32
wird ebenfalls automatisch vom XLA-Compiler eingefügt. Da float32
alle exakten Werte in bfloat16
darstellen kann, werden bei der Konvertierung 16 Nullen in die Mantissenbits eingefügt. Sonderwerte bleiben bei der Konvertierung 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.