Wie wir die LLMs der nächsten Generation von DeepL mit FP8 für Training und Inferenz entwickelt haben

Inhalt
- Was ist der Unterschied zwischen den Formaten BF16 und FP8?
- Vorab-Training für DeepL-LLMs
- Anwendung des FP8-Formats zum Trainieren mit gemischter Genauigkeit
- FP8 vs. BF16 für die Trainingsleistung
- FP8 vs. BF16 für die Qualität des LLM-Trainings
- FP8 vs. BF16 – Qualität des Downstream-Trainings
- Vom FP8-Training zur Inferenz
- Die Vorteile von FP8 für die Inferenz
- Über die Autoren
Als DeepL unseren aktuellen NVIDIA DGX SuperPOD mit 544 NVIDIA H100 Tensor Core GPUs bereitstellte, erzielten wir nicht nur eine erhebliche Steigerung der Rechenleistung. Der H100 bietet außerdem native Unterstützung für 8-Bit-Gleitkomma-Datentypen (FP8) durch eine neue Generation von Tensor-Kernen, die es der GPU ermöglichen, Matrixmultiplikationen und andere Tensoroperationen mit FP8-Genauigkeit durchzuführen. Durch die Berechnung von Matrixmultiplikationen in FP8 können wir den Durchsatz beim Trainieren und Bereitstellen unserer Large Language Models (LLMs) erhöhen, da der Großteil der Berechnungen in modernen LLMs in Form von Matrixmultiplikationen erfolgt.
Die Umstellung der Berechnungen von 16-Bit- auf 8-Bit-Genauigkeit hatte erhebliche Auswirkungen auf die Entwicklung der LLMs der nächsten Generation von DeepL. Dies ermöglicht es uns, wesentlich umfangreichere KI‑Sprachtechnologie-Modelle mit einer größeren Anzahl von Parametern zu entwickeln, die nach Einschätzung von Sprachexperten eine deutliche Verbesserung der Qualität bieten, jedoch innerhalb desselben Latenzfensters für die Produktionsinferenz bleiben. Dies bedeutet, dass die Übersetzungen unsere bisherigen Modelle um das 1,4-Fache für europäische Sprachen und um das 1,7-Fache für komplexere Sprachkombinationen wie Englisch und Japanisch übertreffen, aber dennoch ebenso schnell Ergebnisse liefern. Dies bedeutet auch, dass unsere Modelle eine größere Anzahl von Anfragen über mehr Funktionen hinweg verarbeiten können, ohne die Benutzerfreundlichkeit zu beeinträchtigen.
Mit anderen Worten: Das FP8-Training und die FP8-Inferenz haben eine zentrale Rolle bei der Skalierung der KI‑Sprachtechnologie von DeepL gespielt.
In diesem Beitrag möchten wir Ihnen den Weg erläutern, den wir zurückgelegt haben, um FP8 für Training und Inferenz anzuwenden. Wir möchten Ihnen einige der Tools und Techniken vorstellen, die diesem Erfolg zugrunde liegen, und Ihnen einen Eindruck von den Ergebnissen vermitteln, die wir in Bezug auf die Trainings- und Inferenzleistung generiert haben.
Was ist der Unterschied zwischen den Formaten BF16 und FP8?
Die einfache Erklärung für den Unterschied zwischen BFloat16 (BF16) und FP8 besteht darin, dass letzteres nur halb so viele Bits zur Darstellung von Werten verwendet. Tatsächlich nutzt BF16 die 16 verfügbaren Positionen in zwei Bytes zu je 8 Bit. FP8 verwendet lediglich ein Byte.
Die Anzahl der verfügbaren Bits bestimmt die Genauigkeit, mit der die Mantisse und der Exponent von Fließkommazahlen in wissenschaftlicher Notation bereitgestellt werden können. BF16 verfügt über 1 Vorzeichenbit, 8 Bits für den Exponenten und 7 Bits für die Mantisse. FP8 verfügt über die Hälfte der Bits, mit einem Vorzeichenbit und sieben Bits, die zwischen Exponent und Mantisse aufgeteilt sind. Aus diesem Grund verfügt es über einen geringeren Bereich und eine geringere Genauigkeit als BF16. Es kann einen engeren Bereich und weniger Zahlen innerhalb dieses Bereichs darstellen.
Nehmen wir beispielsweise an, wir möchten das Alter der Erde in Milliarden Jahren darstellen (ungefähr 4,543). In BF16 können wir dies genau als 0100000010010001 darstellen.
Wie wäre es, diese Zahl in FP8 darzustellen? Es stehen tatsächlich zwei FP8-Formate zur Auswahl: E4M3 und E5M2. Die Buchstaben und Zahlen hier geben an, wie die Bits zwischen dem Exponenten (E) und der Mantisse (M) verteilt sind. Je mehr Bits Sie für den Exponenten verwenden, desto größer ist der Bereich, in dem Sie Zahlen beschreiben können, und je mehr Bits Sie für die Mantisse verwenden, desto mehr Zahlen können Sie innerhalb dieses Bereichs beschreiben.
Unabhängig davon, welches FP8-Format Sie wählen, ist es nicht möglich, 4,543 präzise darzustellen. Wenn Sie sich für E4M3 mit seiner relativ höheren Genauigkeit entscheiden, können Sie den nächstgelegenen Wert (4,5) erhalten. In E5M2 ist die nächstgelegene Position 5.
Im Gegensatz zu dieser eingeschränkten Reichweite und Präzision ermöglicht FP8 schnellere Berechnungen und benötigt im Vergleich zu BF16 deutlich weniger Speicherplatz. Dies ist äußerst wertvoll für die Inferenz und kann mit dem richtigen Ansatz auch für die Beschleunigung des Trainings von großem Nutzen sein. Es stellt sich die Frage, wie groß der Umfang und wie hoch die Präzision des LLM-Trainings tatsächlich sein müssen. Ist es erforderlich, das Alter der Erde genau darzustellen? Oder ist eine Annäherung von 43 Millionen Jahren ausreichend? Wenn Sie sich für das Universum als Ganzes interessieren, dürfte Ihnen diese zweite Genauigkeitsstufe ausreichen. Der Rundungsfehler macht schließlich nur etwa 0,3 % des Alters des Universums aus.
Die Entwicklung von DeepL belegt, dass FP8 die Anforderungen für ein hochwertiges LLM-Training erfüllt. Dies eröffnet neue Möglichkeiten hinsichtlich der Aufgaben, für die wir unsere Modelle trainieren, und wie wir sie praktisch bereitstellen.
Vorab-Training für DeepL-LLMs
Die Reise, die wir mit FP8-Training und -Inferenz unternehmen, beginnt mit dem Vortraining unserer LLMs. Nach dem Vortraining optimieren wir unsere Modelle für bestimmte Aufgaben, destillieren große Modelle zu kleineren Modellen, führen Reinforcement Learning durch und stellen eine Reihe von Parallelisierungsstrategien bereit, um die große Anzahl unserer GPUs optimal zu nutzen.
Anwendung des FP8-Formats zum Trainieren mit gemischter Genauigkeit
Wir haben unseren bestehenden Trainingscode von BF16 auf FP8 umgestellt und dabei die NVIDIA Transformer Engine verwendet: eine von NVIDIA bereitgestellte Trainingsbibliothek, die Transformer-Modelle beschleunigt und FP8 unterstützt. Transformer Engine stellt wichtige Komponenten bereit, die das Trainieren mit gemischter Genauigkeit erleichtern, indem sie die Konvertierung zwischen den Formaten FP8 und BF16 nahtlos verwalten und Skalierungsfaktoren handhaben.
Wir verwenden die von NVIDIA empfohlene Standardeinstellung der Transformer Engine, wobei wir E4M3 im Vorwärtsdurchlauf für das Trainieren und anschließend E5M2 im Rückwärtsdurchlauf einsetzen. Dies bedeutet im Wesentlichen, dass wir das Format mit höherer Genauigkeit für die Vorhersage der Wahrscheinlichkeitsverteilung des nächsten Tokens verwenden und anschließend das Format mit geringerer Genauigkeit, aber größerem Bereich, um die für die Aktualisierung des Modells erforderlichen Gradienten zu berechnen, wenn die Genauigkeit weniger wichtig ist. Wir verwenden jedes der beiden Formate für die Aufgabe, für die es am besten geeignet ist.
In der folgenden Tabelle haben wir alle Zahlen aufgeführt, die mit dem Format E4M3 dargestellt werden können. Wie Sie feststellen werden, konzentrieren sich diese Zahlen um den Wert Null, mit einem Maximalwert von weniger als 500. Tatsächlich kann die Anzahl der darstellbaren Werte für FP8-Formate in einer sehr kurzen Tabelle aufgeführt werden. Der Schlüssel zum Erfolg dieses Formats zum Trainieren liegt darin, sich der Verteilung dieser Werte bewusst zu sein und entsprechend damit zu arbeiten.
Dies beinhaltet die Speicherung zusätzlicher Skalierungsfaktoren neben den FP8-Gewichtstensoren, um den begrenzten Bereich zu überwinden und Über- und Unterläufe zu verhindern. Bei der Durchführung von Berechnungen mit Ihren Tensoren mit geringer Genauigkeit müssen Sie auch die Skalierungsfaktoren berücksichtigen. Wenn Sie beispielsweise zwei Tensoren multiplizieren, verwenden Sie die folgende Formel: (A_fp8 * A_scale) x (B_fp8 * B_scale), wobei A_fp8 und B_fp8 8-Bit-Tensoren sind und die Skalen 32-Bit-Skalarwerte darstellen. Für diese Vorgänge wird spezielle Hardware unterstützt.

FP8 vs. BF16 für die Trainingsleistung
Wenn wir über Trainingsleistung sprechen, beziehen wir uns darauf, wie schnell ein Modell mit der ihm zur Verfügung stehenden Rechenleistung trainiert werden kann. Um die Trainingsleistung zwischen FP8 und BF16 zu vergleichen, betrachten wir die Model FLOPS Utilization (MFU), d. h. die Anzahl der Fließkommaoperationen pro Sekunde (FLOPS), die das Modell ausführt, als Prozentsatz der FLOPS, die mit der verfügbaren Hardware technisch möglich sind.
Für unseren Vergleich haben wir die mit dem BF16-Format möglichen FLOPS als gemeinsamen Nenner verwendet, obwohl technisch gesehen mehr FLOPS möglich sind, wenn man zu FP8 wechselt. Dadurch konnten wir den inkrementellen Gewinn bei der Nutzung der verfügbaren Rechenleistung messen, der durch den Wechsel von BF16 zu FP8 erzielt werden kann.
Wie in der folgenden Grafik dargestellt, stieg die Effizienz, mit der unser Modelltraining die verfügbare Rechenleistung nutzt, von 44,6 % MFU auf 67 % MFU mit FP8, wodurch unser Modelltraining effektiv um 50 % beschleunigt wurde.

Das ist an sich schon eine beeindruckende Leistungssteigerung. Um dies zu erreichen, haben wir in Zusammenarbeit mit NVIDIA die Nutzung der Transformer Engine-Funktionen optimiert. Basierend auf einem anderen Trainingsaufbau konnten wir die Trainingsleistung über einen Zeitraum von 15 Monaten schrittweise um 25 % steigern, wodurch wir eine MFU von 80 % erreichten.

FP8 vs. BF16 für die Qualität des LLM-Trainings
Die Verbesserungen des FP8 hinsichtlich der Trainingsleistung sind daher in der Tat sehr beeindruckend. Das Ergebnis, das uns bei DeepL jedoch wirklich wichtig ist, ist die Trainingsqualität. Wie würde dies im Vergleich zum Trainieren mit hoher Qualität und BF16-Präzision ausfallen?
Um die Qualität von FP8 zu überprüfen, haben wir eines unserer Modelle in beiden Formaten trainiert. Dadurch konnten wir die Verluste des Trainings und die nachgelagerte Qualität vergleichen.
Wir haben ein 1,5-Milliarden-Modell mit drei Billionen Tokens trainiert und anschließend die Qualität des FP8-Trainings mit der des BF16-Trainings verglichen. Die entscheidende Kennzahl war hier der Trainingsverlust, der sich auf die Fähigkeit des Modells bezieht, das nächste Token vorherzusagen.
Wie Sie der folgenden Grafik entnehmen können, konnten wir eine leichte Überlegenheit von BF16 gegenüber FP8 feststellen, was daran zu erkennen ist, dass unsere FP8-Linie knapp über der von BF16 liegt. Dieser Unterschied wird jedoch durch die wesentlich größeren Schwankungen des Trainingsverlusts von einem Schritt zum nächsten überlagert, die bei beiden Formaten auftreten. In beiden Fällen verbessern wir den Trainingsverlust im Laufe der Zeit auf dieselbe deutliche Weise.

FP8 vs. BF16 – Qualität des Downstream-Trainings
Anschließend haben wir die Qualität getestet, die das Trainieren in FP8 im Vergleich zu BF16 in einer praktischen Downstream-Anwendung lieferte.
In diesem Fall haben wir untersucht, wie sich das Modell bei der Arbeit mit Englisch und Deutsch bewährt hat. Wir haben die Validierungsperplexität verglichen, die die Unsicherheit quantifiziert, die ein Modell bei der Vorhersage des nächsten Tokens in einer Sequenz erlebt. Es wird erneut davon ausgegangen, dass die Verwirrung mit der Zeit abnimmt. In diesem praktischen Szenario konnten wir tatsächlich keine Qualitätsminderung beim FP8-Training im Vergleich zu BF16 feststellen.

Das Nettoergebnis der Umstellung von BF16 auf FP8 besteht darin, dass wir unsere Modelle schneller trainieren können, wobei der Speicherbedarf reduziert wird, und dass wir die gleiche Trainingsqualität mit nur minimaler Verschlechterung hinsichtlich des Trainingsverlusts und vergleichbarer Validierungsperplexität erzielen. Dies bedeutet im Wesentlichen, dass DeepL in der Lage ist, durch die maximale Ausnutzung der Rechenleistung komplexere Modelle zu erstellen und anspruchsvollere Aufgaben zu bewältigen. Dies erweitert den Umfang dessen, was wir mit LLM-Training erreichen können, erheblich.
Vom FP8-Training zur Inferenz
Der nächste Schritt in diesem Prozess umfasst die Vorbereitung von LLMs für die Produktionsinferenz. Die Hauptlast der Unterstützung wird hier von NVIDIA TensorRT-LLM übernommen, der Lösung von NVIDIA für skalierbare LLM-Inferenz, die FP8 unterstützt. Es übernimmt die Gewichte Ihres Modells aus dem Trainieren und erstellt eine Engine, um die Operationen des Modells so recheneffizient wie möglich zu optimieren. Dabei werden Optimierungstechniken wie Kernel-Fusion, optimierter C++/CUDA-Code, KV-Caching und kontinuierliches In-Flight-Batching eingesetzt.
Die Vorteile von FP8 für die Inferenz
Bei der Inferenz für LLMs geht es immer um das Zusammenspiel von Durchsatz (die Anzahl der Token, die in einem bestimmten Zeitraum verarbeitet werden können) und Latenz. Es versteht sich von selbst, dass die Bereitstellung eines optimalen Erlebnisses für den Kunden die Kontrolle der Latenz erfordert. Der Durchsatz ist für DeepL jedoch ebenfalls von großer Bedeutung, da er die Anzahl der Anfragen bestimmt, die wir zu einem bestimmten Zeitpunkt bearbeiten können, und somit den Umfang dessen, was unser Modell in der Praxis leisten kann.
Es ist unvermeidlich, dass mit steigendem Durchsatz auch die Latenz tendenziell zunimmt. Das Bündeln mehrerer Anfragen ermöglicht einen höheren Durchsatz, jedoch auf Kosten einer erhöhten Latenz für jede einzelne Anfrage. Dies kann sich auf das Erlebnis des Kunden auswirken. Die Inferenzleistung von FP8 im Vergleich zu BF16 ändert diesen Kompromiss jedoch erheblich zu unseren Gunsten.
Wie die folgende Grafik zeigt, kann FP8 bei den meisten Batchgrößen den doppelten Durchsatz bei gleicher Latenz wie BF16 verarbeiten. Wenn wir ein bestimmtes Latenzbudget festlegen, das dem optimalen Erlebnis für unsere Nutzer entspricht, können wir dies in der Praxis beobachten. Tatsächlich hat FP8 die effektive Kapazität unserer LLMs in Bezug auf den Durchsatz effektiv verdoppelt.

Mit anderen Worten: Der Übergang von BF16 zu FP8 hat es uns nicht nur ermöglicht, leistungsfähigere und ausgefeiltere LLMs für DeepL zu entwickeln. Es wird auch sichergestellt, dass wir diese LLMs effektiv einsetzen können, um ein optimales Kundenerlebnis zu bieten und die Wirkung unserer KI‑Sprachtechnologie in der Praxis zu skalieren. Wir erzielen ein schnelleres Trainieren größerer Modelle, die dann innerhalb derselben Latenzparameter arbeiten können, während sie gleichzeitig die doppelte Anzahl an Anfragen verarbeiten.
Ausblick Wir haben kürzlich den neuen NVIDIA DGX SuperPOD mit NVIDIA DGX GB200-Systemen bereitgestellt, der eine nahezu exponentielle Steigerung der Rechenleistung ermöglicht. Für uns ist besonders interessant, dass diese Maschine eine neue Generation von Tensor-Kernen einführt, die FP4-Tensoroperationen wie Matrixmultiplikationen nativ unterstützen können. Dann beginnt unsere Reise erneut. Es ist beeindruckend zu beobachten, welche Möglichkeiten ein einzelnes Byte im Bereich Trainieren und Inferenz bietet. Bitte beachten Sie diesen Bereich, um zu erfahren, was mit einem halben Byte möglich ist.
Über die Autoren
Markus Schnös, Staff Research HPC Engineer
Markus Schnös ist als leitender HPC-Ingenieur bei DeepL tätig, wo er sich auf die Skalierung des LLM-Trainings und der Inferenz konzentriert. Er hat ein besonderes Interesse an verteiltem Trainieren und Fließkomma-Berechnungen mit geringer Genauigkeit.
www.linkedin.com/in/markus-schnoes-349300185
Fabian Joswig, wissenschaftlicher Mitarbeiter und HPC-Ingenieur
Herr Fabian Joswig ist leitender Forschungsingenieur bei DeepL und verfügt über einen Hintergrund in den Bereichen maschinelles Lernen, Hochleistungsrechnen und theoretische Teilchenphysik. Er konzentriert sich auf die Skalierung von KI-Modellen und Infrastruktur für den weltweit genauesten Übersetzer.