Jak jsme vyvinuli novou generaci LLM DeepL s FP8 pro trénování a inferenci

In this post
Když společnost DeepL nasadila náš současný systém NVIDIA DGX SuperPOD s 544 grafickými procesory NVIDIA H100 Tensor Core, nezískali jsme jen výrazné zvýšení výpočetního výkonu. H100 také zavádí nativní podporu pro 8bitové datové typy s plovoucí desetinnou čárkou (FP8) prostřednictvím nové generace jader Tensor Core, která umožňují GPU provádět maticové násobení a další tenzorové operace s přesností FP8. Výpočtem maticových násobení v FP8 můžeme zvýšit propustnost při trénování a nasazování našich velkých jazykových modelů (LLM), protože většina výpočtů v moderních LLM má formu maticových násobení.
Přechod z 16bitové na 8bitovou přesnost výpočtů měl zásadní vliv na vývoj nové generace LLM DeepL. To nám umožňuje vytvářet mnohem větší jazykové modely AI s mnohem více parametry, které podle hodnocení jazykových odborníků zlepšují kvalitu výrazným způsobem, ale v rámci stejného okna latence pro produkční inferenci. To znamená, že překlady překonávají naše předchozí modely 1,4krát u evropských jazyků a 1,7krát u složitějších jazykových kombinací, jako je angličtina a japonština, ale výsledky dodávají stejně rychle. To také znamená, že naše modely mohou zpracovat větší počet požadavků napříč více funkcemi a funkcemi, aniž by tím byla ohrožena uživatelská přívětivost.
Jinými slovy, trénování a inference FP8 hrály ústřední roli při škálování Jazykové AI DeepL.
V tomto příspěvku chceme vysvětlit cestu, kterou jsme ušli, abychom mohli použít FP8 pro trénování a inferenci, podělit se o některé nástroje a techniky, které jsou základem tohoto úspěchu, a představit vám výsledky, které generujeme v pojmech výkonu trénování a inference.
Jaký je rozdíl mezi formáty BF16 a FP8?
Jednoduché vysvětlení rozdílu mezi BFloat16 (BF16) a FP8 spočívá v tom, že FP8 používá k vyjádření hodnot poloviční počet bitů. BF16 efektivně využívá 16 dostupných pozic ve dvou bajtech po 8 bitech. FP8 používá pouze jeden bajt.
Počet dostupných bitů určuje přesnost, s jakou lze nasadit mantisu a exponentní prvky čísel s plovoucí desetinnou čárkou ve vědeckém zápisu. BF16 má 1 znaménkový bit, 8 bitů pro exponent a 7 bitů pro mantisu. FP8 má k dispozici polovinu bitů, s 1 znaménkovým bitem a 7 bity rozdělenými mezi exponent a mantisu. Z tohoto důvodu má menší rozsah a nižší přesnost než BF16. Může představovat užší rozsah a méně čísel v tomto rozsahu.
Jako příklad si vezměme, že chceme znázornit stáří Země v miliardách let (přibližně 4,543). V BF16 můžeme toto přesně vyjádřit jako 0100000010010001.
A co takhle vyjádřit toto číslo v FP8? Ve skutečnosti si můžete vybrat ze dvou formátů FP8: E4M3 a E5M2. Písmena a číslice zde představují způsob, jakým jsou bity rozděleny mezi exponent (E) a mantisu (M). Čím více bitů věnujete exponentu, tím větší rozsah čísel můžete popsat, a čím více bitů věnujete mantise, tím více čísel můžete popsat v tomto rozsahu.
Ať už zvolíte jakýkoli formát FP8, není možné přesně vyjádřit hodnotu 4,543. Pokud zvolíte E4M3 s relativně větší přesností, můžete dosáhnout nejbližšího výsledku (4,5). V E5M2 se nejblíže dostanete k hodnotě 5.
Na druhou stranu, navzdory tomuto nedostatku rozsahu a přesnosti, FP8 umožňuje rychlejší výpočty a vyžaduje výrazně méně paměti ve srovnání s BF16. To je velmi cenné pro inferenci a při správném přístupu může být velmi cenné i pro urychlení trénování. Jde o to, jak velký rozsah a přesnost trénování LLM skutečně potřebuje. Potřebujete přesně vyjádřit stáří Země? Nebo je 43 milionů let dostatečně blízko? Pokud vás zajímá vesmír jako celek, pravděpodobně vám bude stačit druhá úroveň přesnosti. Chyba zaokrouhlování představuje koneckonců pouze asi 0,3 % věku vesmíru.
Cesta společnosti DeepL dokazuje, že FP8 dokáže poskytnout vše, co je potřebné pro vysoce kvalitní trénink LLM, a to otevřelo nové možnosti pro to, k čemu naše modely trénujeme a jak je nasazujeme v praxi.
Předběžné trénování pro DeepL LLMs
Cesta, kterou podnikáme s trénováním a inferencí FP8, začíná předběžným trénováním našich LLM. Po předběžném tréninku doladíme naše modely pro určité úkoly, rozložíme velké modely na menší, provedeme posilovací učení a nasadíme sadu paralelizačních strategií, abychom mohli využít obrovský počet GPU, které máme k dispozici.
Použití formátu FP8 pro trénování se smíšenou přesností
Naše stávající trénovací kód jsme převedli z BF16 na FP8 pomocí NVIDIA Transformer Engine: trénovací knihovny poskytované společností NVIDIA, která urychluje transformátorové modely a podporuje FP8. Transformer Engine poskytuje základní komponenty, které usnadňují trénování se smíšenou přesností, plynule manažeruje převod mezi formáty FP8 a BF16 a zpracovává škálovací faktory.
Používáme výchozí nastavení Transformer Engine, jak doporučuje NVIDIA, s použitím E4M3 v předním průchodu pro trénování a poté s použitím E5M2 v zadním průchodu. To v praxi znamená, že používáme formát s vyšší přesností pro předpovídání pravděpodobnostního rozložení dalšího tokenu a poté formát s nižší přesností, ale vyšším rozsahem, pro výpočet gradientů potřebných pro aktualizaci modelu, kdy přesnost není tak důležitá. Každý z těchto dvou formátů používáme pro úkol, pro který je nejvhodnější.
V níže uvedeném grafu jsme zaznamenali všechna čísla, která lze vyjádřit formátem E4M3. Jak uvidíte, tato čísla se soustřeďují kolem nuly, přičemž maximální hodnota je nižší než 500. Ve skutečnosti lze počet reprezentovatelných hodnot pro formáty FP8 vytisknout ve velmi krátké tabulce. Trik, jak tento formát využít pro trénování, spočívá v tom, že si uvědomíte rozložení těchto hodnot a budete s ním pracovat.
To zahrnuje ukládání dalších škálovacích faktorů vedle váhových tenzorů FP8, aby se překonal omezený rozsah a zabránilo se přetečení a podtečení. Při provádění výpočtů s tenzory s nízkou přesností musíte také zohlednit škálovací faktory. Například při násobení dvou tenzorů použijete vzorec: (A_fp8 * A_scale) x (B_fp8 * B_scale), kde A_fp8 a B_fp8 jsou 8bitové tenzory a měřítka jsou 32bitové skaláry. Pro tyto operace je hardwaru specificky podporován.

FP8 vs BF16 pro výkonnost tréninku
Když mluvíme o výkonu tréninku, máme na mysli to, jak rychle lze model trénovat s ohledem na výpočetní výkon, který má k dispozici. Pro porovnání výkonu tréninku mezi FP8 a BF16 se podíváme na využití Model FLOPS (MFU), což je počet operací s plovoucí desetinnou čárkou za sekundu (FLOPS), které model provádí, vyjádřený jako procento FLOPS, které jsou technicky možné s hardwarem, který máte k dispozici.
Pro naše srovnání jsme jako společný jmenovatel použili počet FLOPS možných s formátem BF16, a to i přesto, že z technického hlediska je po přechodu na FP8 možné dosáhnout vyššího počtu FLOPS. To nám umožnilo změřit přírůstek výkonu dostupného výpočetního výkonu, který je možný při přechodu z BF16 na FP8.
Jak ukazuje níže uvedený graf, efektivita využití výpočetního výkonu při trénování našich modelů se zvýšila z 44,6 % MFU na 67 % MFU s FP8, což vedlo k 50% zrychlení trénování našich modelů.

To je samo o sobě působivý nárůst výkonu. Abychom toho dosáhli, spolupracovali jsme se společností NVIDIA na optimalizaci využití funkcí Transformer Engine. Na základě jiného tréninkového nastavení se nám podařilo postupně zvýšit tréninkový výkon o 25 % v průběhu 15 měsíců, čímž jsme dosáhli 80 % MFU.

FP8 vs BF16 pro kvalitu trénování LLM
Zisky FP8 v pojmech výkonu tréninku jsou proto skutečně velmi působivé. Nicméně výstup, který nás jako DeepL opravdu zajímá, je kvalita tréninku. Jak by se to dalo porovnat s kvalitou tréninku s přesností BF16?
Abychom ověřili kvalitu, kterou FP8 poskytuje, otestovali jsme, jak se trénuje jeden z našich modelů v obou formátech. To nám umožnilo porovnat ztráty při trénování a kvalitu následných procesů.
Trenovali jsme model 1,5B na třech bilionech tokenů a poté jsme porovnali kvalitu tréninku FP8 s BF16. Klíčovým měřítkem zde byla ztráta při trénování, která se vztahuje ke schopnosti modelu předpovědět další token.
Jak je patrné z níže uvedeného grafu, mohli jsme zaznamenat mírnou převahu BF16 nad FP8, což dokládá skutečnost, že naše křivka FP8 se pohybuje těsně nad křivkou BF16. Tento rozdíl je však přehlušen mnohem většími výkyvy ve ztrátách při tréninku mezi jednotlivými kroky, které se vyskytují u obou formátů, a v obou případech vidíme, že se ztráty při tréninku zlepšují v průběhu času.

Kvalita tréninku FP8 vs BF16 downstream
Poté jsme přistoupili k testování kvality, kterou trénink v FP8 vs BF16 poskytuje v praktické downstream aplikaci.
V tomto případě jsme testovali, jak si model vedl při práci s angličtinou a němčinou. Porovnali jsme validační perplexitu, která kvantifikuje nejistotu, kterou model zažívá při předpovídání dalšího tokenu v sekvenci. Opět se očekává, že zmatenost bude s časem ubývat. V tomto praktickém scénáři jsme ve skutečnosti nezaznamenali žádné zhoršení kvality při trénování FP8 ve srovnání s BF16.

Výsledkem přechodu z BF16 na FP8 je, že jsme schopni trénovat naše modely rychleji, s nižšími nároky na paměť, a dosáhnout stejné kvality tréninku, s pouze minimálním zhoršením v pojmech ztráty tréninku a srovnatelné validace perplexity. To v praxi znamená, že DeepL je schopen vytvářet sofistikovanější modely a řešit složitější úkoly díky maximálnímu využití výpočetního výkonu. Výrazně rozšiřuje možnosti využití tréninku LLM.
Od tréninku FP8 k inferenci
Další fáze cesty zahrnuje přípravu LLM pro produkční inferenci. Zde je náročná práce v oblasti podpory prováděna technologií NVIDIA TensorRT-LLM, což je řešení společnosti NVIDIA pro škálovatelné inferenci LLM, které je schopno podpořit FP8. Vezme váhy vašeho modelu z tréninku a vytvoří engine, který optimalizuje operace modelu tak, aby byl co nejvýkonnější, a to pomocí optimalizačních technik, jako je fúze jader, optimalizovaný kód C++/CUDA, KV caching a kontinuální dávkování za běhu.
Výhody FP8 pro inferenci
Inference pro LLM vždy zahrnuje interakci mezi propustností (počtem tokenů, které lze zpracovat v daném časovém rámci) a latencí. Je samozřejmé, že poskytování co nejlepšího zážitku pro zákazníka zahrnuje kontrolu latence. Pro DeepL je však velmi důležitá také propustnost, protože určuje počet požadavků, které můžeme v daném okamžiku zpracovat, a tedy i rozsah toho, co náš model dokáže v praxi.
Je nevyhnutelné, že s rostoucím průchodem se zvyšuje i latence. Seskupování více požadavků umožňuje vyšší propustnost, ale za cenu zvýšené latence u každého osobního požadavku. To může mít dopad na zákaznickou zkušenost. Výkon FP8 ve srovnání s BF16 však výrazně mění tuto rovnováhu v náš prospěch.
Jak ukazuje níže uvedený graf, u většiny velikostí dávek dokáže FP8 zpracovat dvojnásobný průchod při stejné latenci jako BF16. Pokud nastavíme konkrétní rozpočet latence, který odpovídá optimálnímu zážitku pro naše uživatele, můžeme to vidět v praxi. Ve skutečnosti FP8 účinně zdvojnásobil efektivní kapacitu našich LLM v pojmech propustnosti.

Jinými slovy, přechod z BF16 na FP8 nám nejen umožnil vytvořit výkonnější a sofistikovanější LLM pro DeepL. Zajišťuje také, že jsme schopni tyto LLM efektivně aplikovat, poskytovat optimální zkušenosti pro zákazníky a škálovat dopad naší Jazykové AI v praxi. Získáváme rychlejší trénování větších modelů, které pak mohou pracovat se stejnými parametry latence, ale zpracovávají dvojnásobný počet požadavků.
Co bude dál? Nedávno jsme nasadili nový systém NVIDIA DGX SuperPOD se systémy NVIDIA DGX GB200, který přináší další téměř exponenciální nárůst výpočetního výkonu. Pro nás je opravdu zajímavé, že tento stroj představí novou generaci jader Tensor Core, která budou nativně podporovat operace FP4 tensor, jako jsou maticové násobení. V tu chvíli začíná naše cesta znovu. Bylo vzrušující sledovat, co všechno můžeme s jediným bajtem dokázat, pokud jde o trénování a inferenci. Sledujte tento prostor a uvidíte, co všechno je možné s půl bajtem.
O autorech
Markus Schnös, Staff Research HPC Engineer
Markus Schnös je výzkumný inženýr HPC ve společnosti DeepL, kde se zaměřuje na škálování trénování a inference LLM. Zajímá se zejména o distribuované trénování a výpočty s nízkou přesností plovoucí desetinné čárky.
www.linkedin.com/in/markus-schnoes-349300185
Fabian Joswig, výzkumný inženýr HPC
Fabian Joswig je výzkumný inženýr ve společnosti DeepL se zkušenostmi v oblasti strojového učení, vysoce výkonného výpočetního zpracování dat a teoretické fyziky částic. Zaměřuje se na škálování modelů AI a infrastruktury pro nejpřesnější překladač na světě.