Navýšení výkonu Llama 2 70B pomocí NVIDIA H100
Cesta akcelerované inference LLM

Snaha o maximální výkon v odpovědním systému Perplexity nás vede k využívání nejnovějších technologií, které NVIDIA a AWS nabízejí. V tomto blogu s radostí sdílíme výsledky našich nejnovějších experimentů: srovnání inference modelu Llama 2 70B napříč různými hardwarovými a softwarovými nastaveními.
Naše platforma pro inferenci LLM, pplx-api, je postavena na špičkovém technologickém stacku poháněném open-source knihovnami. Od spuštění veřejné betaverze pplx-api v říjnu řešíme výzvy spojené škálováním a učíme se, jak nejlépe vyladit naši konfiguraci pro dosažení masivního měřítka. To nás vedlo k provedení experimentů s následujícími hlavními otázkami:
Jaké je přímé zvýšení výkonu při přechodu našich GPU z NVIDIA A100 na NVIDIA H100, přičemž všechna ostatní nastavení zůstanou stejná?
Jaká je efektivita kvantování v 8bitové plovoucí řádové čárce (fp8), pro kterou H100 přidává nativní podporu? Jaká je přesnostní daň za toto kvantování?
Jak tenzorový paralelismus a velikost dávky ovlivňují latenci a propustnost tokenů?
S ohledem na výše uvedené, která konfigurace přináší nejlépe škálovatelnou rovnováhu mezi výkonem a nákladovou efektivitou?
Experimentální nastavení
Následující experiment jsme provedli jako sérii lokálních benchmarků, abychom se vyhnuli síťové latenci.
Klíčové metriky:
Latence: Celková doba, kterou inferenční server potřebuje k vygenerování úplné odpovědi.
Propustnost: Počet výstupních tokenů za sekundu na jedno GPU, které dokáže inferenční server vygenerovat napříč všemi uživateli a požadavky.
Konstanty:
Následující faktory by ovlivnily klíčové metriky, proto jsme je zachovali konzistentní napříč různými pokusy experimentu.
Model AI
Výkon roste s velikostí LLM. Více parametrů vyžaduje více výpočtů, což vede k pomalejší inferenci. Například Llama 2 13B je rychlejší než Llama 2 70B, pokud jsou ostatní nastavení stejná. V tomto experimentu se držíme modelu Llama 2 70B, protože chceme optimalizovat obsluhu těch nejschopnějších open-source modelů.
Datová sada vstupních a výstupních tokenů
Množství vstupních a výstupních tokenů v každém páru požadavku a odpovědi může ovlivnit měření výkonu. Generování výstupních tokenů obecně dominuje celkové době odpovědi. Když vzorkování dat vyvolává u LLM pouze odpovědi typu „ano/ne“, odpověď je rychlejší ve srovnání se vzorky, které po LLM vyžadují psaní esejů. Naše datová sada se skládá ze syntetických požadavků s 1024 vstupními tokeny a 512 výstupními tokeny. Tato distribuce byla zvolena tak, aby odpovídala pozorované distribuci provozu na našem veřejném nasazení modelu Llama 2 70B.
Verze softwaru
NVIDIA TensorRT-LLM (verze v0.5.0) je open-source knihovna pro optimalizaci inference LLM. Byla vydána koncem roku 2023, kombinuje četné optimalizace inference od společnosti NVIDIA a poskytuje flexibilní vrstvu přizpůsobení pro klíčové parametry tohoto experimentu: velikost dávky, kvantování a tenzorový paralelismus.
Proměnné
Experimentovali jsme ve 4 oblastech konfigurace: tenzorový paralelismus, architektura GPU, kvantování a maximální velikost dávky. Tyto oblasti jsou vzájemně propojené, protože každá z nich představuje kompromis ohledně kritického úzkého hrdla – paměti GPU.
Architektura GPU
Devátá generace architektury GPU Hopper (H100-HBM3-80GB / p5.48xlarge) přináší oproti svému předchůdci Ampere (A100-SXM4-80GB / p4de.24xlarge) obrovské množství funkcí, včetně 2× až 6× vyšší výpočetní rychlosti a téměř dvojnásobné šířky pásma paměti GPU. Šířka pásma paměti GPU je pro inferenci klíčovou metrikou, protože jedním z hlavních úzkých hrdel latence u maticového násobení při inferenci je načítání gigabytů dat modelu z paměti GPU do výpočetních registrů. Na základě těchto statistik jsme předpokládali, že přímé srovnání NVIDIA H100 a A100 vykáže dvojnásobné zlepšení v latenci i propustnosti.
Dalším klíčovým rozdílem mezi NVIDIA H100 a A100 je, že jádra tensor core v H100 nativně podporují instrukce v 8bitové plovoucí řádové čárce (fp8), což otevírá dveře k dalším optimalizacím popsaným níže. Proto pro H100 používáme specificky fp8 a fp16.
Abychom v tomto experimentu udrželi paměť na jedno GPU konzistentní, drželi jsme se pro naše NVIDIA A100 a H100 uzlů s 8× 80GB pamětí GPU. Kromě umožnění větších velikostí dávek je paměť GPU důležitá proto, že parametry modelu se během spouštění serveru načítají do paměti GPU pro rychlý přístup. Pokud je například každý ze 70 miliard parametrů v našem modelu 16bitové číslo s plovoucí řádovou čárkou, velikost modelu je přibližně 140 GB, což se na jediné GPU nevejde. Odtud plyne potřeba tenzorového paralelismu, který vysvětlujeme níže.
Tenzorový paralelismus
Tenzorový paralelismus označuje počet zařízení GPU využitých ke spuštění inferenčního serveru. Když alokujeme určitý počet GPU, TensorRT-LLM sdruží jejich prostředky, což nám pomáhá dosáhnout minimálního požadovaného rozpočtu paměti pro spuštění modelu Llama 2 70B. Naše hypotéza je taková, že nižší tenzorový paralelismus povede k vyšší latenci (kvůli menšímu množství prostředků spotřebovaných na vyřízení každé dávky), ale k vyšší propustnosti na jedno GPU (kvůli lepšímu využití) ve srovnání s vyšším tenzorovým paralelismem.
Kvantování
Kvantování je snížení přesnosti vah a aktivačních funkcí používaných v neuronech sítích. Tuto techniku používáme k polovičnímu snížení spotřeby paměti GPU při přechodu z fp16 na fp8. Díky tomu je možné spustit stejný model s nižší celkovou spotřebou paměti GPU, což umožňuje nižší tenzorový paralelismus, který zvyšuje propustnost.
Implementace kvantování mohou snížit přesnost. Proto jsme vyhodnotili přesnost pro různé úrovně přesnosti porovnáním jejich statistiky perplexity (míry toho, jak dobře LLM předpovídá každý další token ve větě) na korpusu WikiText. V případě 8bitové plovoucí řádové čárky a 8bitové váhy s 8bitovou aktivací a SmoothQuant (w8a8 SQ) nedošlo k žádné významné změně perplexity (< 1 %) ve srovnání s fp16 na WikiTextu, takže jsme mohli s důvěrou pokračovat. Nicméně w4a16 vykazovalo podstatnou změnu perplexity o 7 %, což lze potenciálně přičíst ještě nižší přesnosti a nutným dynamickým převodům mezi int4 a fp16.
Velikost dávky
Paralelismus prostřednictvím dávkování je klasická strategie pro získání maximálního výkonu ze systému omezeného zdroji. Zpracováním více požadavků v každém dopředném průchodu neuronovou sítí dávkování prokazatelně zvyšuje propustnost za cenu určité latence. Dávkování s sebou nese také vyšší spotřebu paměti GPU, protože velikost mezipaměti KV, která spravuje mechanismus pozornosti, roste lineárně s velikostí dávky.
V případě Llama 2 70B (která má 80 vrstev), fp16 s velikostí dávky 32 pro kontext o velikosti 4096, dosahuje velikost mezipaměti KV úctyhodných 40 GB. To nakonec brání tomu, aby se Llama 2 70B fp16, jejíž samotné váhy zabírají 140 GB, pohodlně vešla do 160 GB paměti GPU dostupné při tenzorovém paralelismu 2 (TP-2).
Výsledky
Prošli jsme kompatibilní kombinace 4 proměnných experimentu a níže prezentujeme ty nejzajímavější trendy.
Zlepšení latence díky kvantování se pohybuje kolem 10 % při srovnání H100 fp16 → fp8 a A100 fp16 → w8a8 se SmoothQuant. Nicméně smíšená přesnost w4a16 ve skutečnosti funguje lépe při nízkých velikostech dávek a hůře při vyšších velikostech dávek ve srovnání s fp16. To může být způsobeno řadou faktorů, včetně méně optimalizovaných výpočetních jader, času potřebného na převod mezi int4 a fp16 a tím faktorem, že w4a16 stále používá 16bitové plovoucí řádové čárky pro aktivační funkce, což nevede k žádným úsporám v rozměrech mezipaměti KV. Protože w4a16 rovněž prokázala nižší přesnost, dospěli jsme k závěru, že bychom se měli držet w8a8 SQ pro A100 a fp8 pro H100.
V našich prvních dvou obrázcích uvádíme pouze konfigurace TP-8. H100 dosahuje 54% latence a 184% propustnosti ve srovnání s A100, když oba používají fp16 / BS-128 / TP-8, což se zlepší na 49% latenci a 202% propustnost při použití fp8 na H100. Toto zlepšení výkonu lze přičíst nárůstu výpočetního výkonu a šířky pásma paměti mezi H100 a A100. Pozoruhodné je, že rozdíl je méně výrazný při nižších velikostech dávek, kde může být využití nižší.
Při budování naší platformy chceme pro naše uživatele dodržovat určité požadavky na latenci a zároveň maximalizovat propustnost. Proto namísto porovnávání A100 vs. H100 při stejné velikosti dávky dává pro nás větší smysl porovnávat jejich propustnost pouze v konfiguracích, kde splňují požadavek na latenci. Nastavili jsme hranici na latenci 25600 ms pro dokončení 512 výstupních tokenů a zjistili jsme, že H100 / TP-8 / fp8 / BS-128 poskytuje 251% propustnost ve srovnání s A100 / TP-8 / fp16 / BS-64, protože dokáže zpracovat dvojnásobnou velikost dávky při nižší latenci. Vzhledem k tomu, že kvantování přináší úsporu paměti GPU, musíme nyní vyhodnotit, jak může tenzorový paralelismus přidat další vrstvu optimalizace.
Co se týče kvantování a architektury, existují jasní vítězové: H100 dominuje nad A100 a kvantování s nižší přesností zlepšuje využití paměti, latenci i propustnost. Velikost dávky a tenzorový paralelismus však v našich klíčových metrikách představují kompromis. Větší velikost dávky optimalizuje propustnost za cenu zvýšené latence a spotřeby paměti. Na druhou stranu vyšší tenzorový paralelismus zvětšuje celkový fond dostupné paměti a optimalizuje latenci, ale představuje kompromis vůči propustnosti kvůli nákladům na synchronizaci při distribuovaném násobení matic a z důvodu vytížení většího množství prostředků GPU.
Konfigurace našeho experimentu maximalizující propustnost je H100 / fp8 / TP-2 / BS-128 s 767 výstupními tokeny za sekundu na jedno GPU. To představuje 460% zlepšení oproti A100 / fp16 / TP-8 / BS-64. To však je vykoupeno zdvojnásobením latence – blíže k 42000 ms pro 512 výstupních tokenů –, takže nemusí být vhodná jako produkční konfigurace. Výsledky TP-4 BS-128 (626 tok/s/gpu při době odezvy 26188 ms) a TP-2 BS-32 (435 tok/s/gpu při době odezvy 18821 ms) mohou představovat lepší kompromisy pro naše klíčové metriky.
Závěr
Naše výsledky ukazují, že:
Dosahujeme 54% latence a 184% propustnosti při použití H100 oproti A100 při stejné konfiguraci, což se zlepší na 49 %, respektive 202 %, když H100 využije svou nativní podporu pro fp8.
Při maximalizaci propustnosti za podmínky omezení latence dosahuje H100 / fp8 / TP-8 / BS-128 251% propustnosti ve srovnání s A100 / fp16 / TP-8 / BS-64, protože dokáže zpracovat dvojnásobnou dávku vyšší rychlostí.
Využitím H100 s TP-2 a fp8 můžeme dosáhnout 373% propustnosti A100 / fp16 / TP-8 / BS-128 s nárůstem latence menším než 10 %.
Velikost dávky a tenzorový paralelismus představují pro provozovatele inferenčního systému LLM kompromis mezi propustností a latencí.
Tyto výsledky nám dávají jistotu ohledně úplného přechodu na GPU H100 v našem hardwarovém stacku, který byl dříve poháněn A100. Jsme nadšeni, že můžeme potvrdit nárůst výkonu inzerovaný společností NVIDIA, a těšíme se na jejich další průlomy v oblasti akcelerovaného hardwaru.
Co bude následovat
Naší další hranicí pro optimalizaci je prozkoumat dopad strukturované řídkosti (structured sparsity) a přesnosti int4 na přesnost a výkon, což by mohlo výrazně snížit nároky modelu Llama 2 70B na paměť GPU a přinést až dvojnásobné zlepšení latence. Jsme nadšeni, že můžeme pokračovat na cestě bleskově rychlé inference a doufáme, že umožníme našim uživatelům vytvářet výkonné aplikace nad naší platformou.
V blízké budoucnosti bude pplx-api zvyšovat limity sazeb a nabízet více vlastních modelů Perplexity LLM, včetně LLM poháněného internetem s uzemněním pro fakta.
Zaregistrujte se k odběru Perplexity Pro na adrese perplexity.ai/pro. Získejte přístup k našemu špičkovému rozhraní pplx-api a využijte tyto pokročilé funkce ve svých projektech. Objevte více o pplx-api na našem blogu.
Máte zájem utvářet budoucnost AI? Hledáme nové posily! Staňte se součástí týmu, který pohání generativní infrastrukturu LLM v masivním měřítku. Prozkoumejte pracovní příležitosti na stránce Perplexity Careers.
Autoři:
Aarash Heydari, Grigorij Alekseev, Kevin Hu, Denis Yarats