Turbo punjenje modela Llama 2 70B sa NVIDIA H100

Putovanje ubrzane LLM inferencije

The journey of accelerated LLM inference

Težnja ka performansama u Perplexity-jevom mašinskom pokretaču odgovora navodi nas da usvojimo najnoviju tehnologiju koju NVIDIA i AWS nude. U ovom blogu sa zadovoljstvom delimo rezultate naših najnovijih eksperimenata: poređenje Llama 2 70B inferencije u različitim hardverskim i softverskim postavkama.

Naša platforma za LLM inferenciju, pplx-api, izgrađena je na vrhunskom tehnološkom steku koji pokreću biblioteke otvorenog koda. Od početka javne beta verzije pplx-api-ja u oktobru, rešavamo izazove skaliranja i učimo kako da najbolje prilagodimo našu konfiguraciju kako bismo postigli masovno skaliranje. To nas je navelo da sprovedemo eksperimente sa sledećim vodećim pitanjima:

Koliko se sirovih performansi dobija prebacivanjem naših GPU-ova sa NVIDIA A100 na NVIDIA H100, uz neizmijenjene sve ostale postavke?

Koliko se efikasnosti dobija 8-bitnom kvantizacijom u pokretnom zarezu (fp8), za koju H100 dodaje izvornu podršku? Kakva je cijena ove kvantizacije po pitanju tačnosti?

Kako paralelizam tenzora i veličina serije utiču na latenciju i propusni opseg tokena?

Uzevši u obzir gore navedeno, koja konfiguracija pruža najskalabilniji balans između performansi i ekonomske efikasnosti?

Eksperimentalna postavka

Sproveli smo sledeći eksperiment kao niz lokalnih testiranja performansi (benchmark) kako bismo izbegli mrežnu latenciju.

Ključne metričke vrednosti:

Latencija: Ukupno vreme potrebno serveru za inferenciju da generiše svoj potpuni odgovor.

Propusni opseg: Broj izlaznih tokena u sekundi po GPU-u koje server za inferenciju može da generiše za sve korisnike i zahteve.

Konstante:

Sledeći faktori bi uticali na ključne metričke vrednosti, pa smo ih održali doslednim u različitim ciklusima eksperimenta.

AI model

Performanse se skaliraju sa veličinom LLM-a. Veći broj parametara zahteva više računanja, što dovodi do sporije inferencije. Na primer, Llama 2 13B je brža od Llama 2 70B kada su druge postavke jednake. U ovom eksperimentu se držimo Llama 2 70B jer želimo da optimizujemo opsluživanje modela sa najvišim mogućnostima u otvorenom kodu.

Skup podataka ulaznih/izlaznih tokena

Količina ulaznih i izlaznih tokena u svakom paru zahtev/odgovor uzorka može uticati na merenja performansi. Generalno, generisanje izlaznih tokena dominira u ukupnom vremenu odgovora. Kada uzorkovanje podataka izaziva samo „da/ne“ odgovore od LLM-a, odgovor je brži u poređenju sa uzorcima koji traže od LLM-a da piše eseje. Naš skup podataka se sastoji od sintetičkih zahteva sa 1024 ulazna tokena koji izazivaju 512 izlaznih tokena. Ova distribucija je izabrana da odgovara uočenoj distribuciji saobraćaja na našoj javnoj primeni modela Llama2 70B.

Verzija softvera

NVIDIA TensorRT-LLM (izdanje v0.5.0) je biblioteka otvorenog koda za optimizaciju LLM inferencije. Objavljena krajem 2023. godine, ona sintetiše brojne NVIDIA optimizacije inferencije i obezbeđuje fleksibilan sloj prilagođavanja za ključne parametre ovog eksperimenta: veličinu serije, kvantizaciju i paralelizam tenzora.

Varijable

Eksperimentisali smo u 4 osi konfiguracije: paralelizam tenzora, GPU arhitektura, kvantizacija i maksimalna veličina serije. Ove ose su međusobno povezane jer svaka predstavlja kompromis u odnosu na kritičan uski grlo resurs – GPU memoriju.

GPU arhitektura

Arhitektura grafičkog procesora (GPU) Hopper devete generacije (H100-HBM3-80GB / p5.48xlarge) donosi ogroman niz funkcija u odnosu na svog prethodnika, Ampere (A100-SXM4-80GB / p4de.24xlarge), uključujući 2x do 6x veće stope izračunavanja i skoro dvostruko veću propusnost GPU memorije. Propusnost GPU memorije je ključna metrika za inferenciju jer primarno usko grlo latencije kod mnoštva matrica tokom inferencije potiče od učitavanja gigabajta podataka modela iz GPU memorije u računske registre. Na osnovu ove statistike, postavili smo hipotezu da će direktno poređenje modela NVIDIA H100 i A100 pokazati dvostruko poboljšanje i u pogledu latencije i u pogledu propusnog opsega.

Još jedna ključna razlika između modela NVIDIA H100 i A100 jeste ta što tenzorsko jezgro H100 nativno dodaje podršku za 8-bitne instrukcije u pokretnom zarezu (fp8), što otvara vrata daljim optimizacijama detaljno opisanim u nastavku. Zbog toga koristimo fp8 i fp16 specifično za H100.

Da bismo održali memoriju po GPU-u doslednom u ovom eksperimentu, držali smo se čvorova sa 8x80GB GPU memorije i za naše NVIDIA A100 i za H100 procesore. Pored omogućavanja većih veličina serija, GPU memorija je važna jer se parametri modela učitavaju u GPU memoriju tokom pokretanja servera radi brzog pristupa. Na primer, ako je svaki od 70 milijardi parametara u našem modelu 16-bitni broj u pokretnom zarezu, veličina modela je oko 140 GB, što ne može da stane na jedan GPU. Odatle potiče potreba za paralelizmom tenzora, koji objašnjavamo u nastavku.

Paralelizam tenzora

Paralelizam tenzora se odnosi na broj GPU uređaja koji se troše za pokretanje servera za inferenciju. Kada dodelimo određeni broj GPU-ova, TensorRT-LLM udružuje njihove resurse kako bi nam pomogao da dostignemo minimalni zahtevani budžet memorije za pokretanje modela Llama2 70B. Naša hipoteza je da će manji paralelizam tenzora rezultirati većom latencijom (zbog manje resursa utrošenih na ispunjenje svake serije), ali većim propusnim opsegom po GPU-u (zbog bolje iskorišćenosti) u poređenju sa većim paralelizmom tenzora.

Kvantizacija

Kvantizacija je smanjenje preciznosti u težinama i aktivacijama koje koriste neuronske mreže. Ovu tehniku koristimo da prepolovimo potrošnju GPU memorije kada prelazimo sa fp16 na fp8. To omogućava pokretanje istog modela uz manju ukupnu upotrebu GPU memorije, što omogućava manji paralelizam tenzora, čime se povećava propusni opseg.

Implementacije kvantizacije imaju potencijal da naruše tačnost. Stoga smo procenili tačnost za različite preciznosti upoređujući njihovu statistiku perplexity, koja predstavlja meru koliko dobro LLM predviđa svaki naredni token u rečenici, na WikiText korpusu. Za 8-bitni pokretni zarez i 8-bitnu težinu sa 8-bitnom aktivacijom i SmoothQuant-om (w8a8 SQ), nije došlo do značajne promene u perplexity vrednosti (< 1%) u poređenju sa fp16 na WikiText-u, pa smo se osećali samouvereno da nastavimo. Međutim, w4a16 je pokazao značajnu promenu perplexity vrednosti od 7%, što se potencijalno može pripisati još manjoj preciznosti i neophodnim dinamičkim konverzijama između int4 i fp16.

Veličina serije

Paralelizam putem grupisanja u serije (batching) je klasična strategija za ceđenje performansi iz sistema sa ograničenim resursima. Obradom više zahteva u svakom prolazu unapred kroz neuronsku mrežu, poznato je da grupisanje u serije povećava propusni opseg po cenu određene latencije. Grupisanje takođe izaziva veću potrošnju GPU memorije jer veličina KV keša, koji upravlja mehanizmom pažnje, raste linearno sa veličinom serije.

U slučaju modela Llama 2 70B (koji ima 80 slojeva), fp16 sa veličinom serije 32 za veličinu konteksta od 4096, veličina KV keša iznosi značajnih 40 GB. To na kraju sprečava Llama 2 70B fp16, čije same težine zauzimaju 140 GB, da komotno stane u 160 GB GPU memorije dostupne pri paralelizmu tenzora 2 (TP-2).

Rezultati

Prošli smo kroz kompatibilne kombinacije 4 varijable eksperimenta i u nastavku predstavljamo najupečatljivije trendove.

Slika 1 - Latencija zahteva sa različitim veličinama serija kroz pet različitih konfiguracija, sve sa paralelizmom tenzora 8, što daje najbolju latenciju sa 8 dostupnih GPU-ova. Unutar svake konfiguracije, latencija se generalno udvostručuje pri povećanju veličine serije sa 1 → 32, i ponovo se udvostručuje sa 32 → 128. Pri dovoljno velikim veličinama serija, H100 približno prepolovljava latenciju u poređenju sa A100. A100 koristi mešanu preciznost jer arhitektura nema izvornu podršku za fp8. w8a8 sa SmoothQuant-om (SQ) treba da oponaša fp8.

Poboljšanje latencije usled kvantizacije je oko 10% kada se uporede H100 fp16 → fp8 i A100 fp16 → w8a8 sa SmoothQuant-om. Međutim, mešana preciznost w4a16 zapravo ima bolje performanse pri malim veličinama serija, a lošije pri većim veličinama serija u poređenju sa fp16. Ovo može biti posledica brojnih faktora, uključujući manje optimizovana računska jezgra, vreme pretvaranja između int4 i fp16, kao i činjenicu da w4a16 i dalje koristi 16-bitne pokretne zareze za aktivacije, što ne rezultira uštedama u dimenzijama KV keša. Pošto je w4a16 takođe pokazao manju tačnost, zaključujemo da treba da se držimo w8a8 SQ za A100 i fp8 za H100.

Slika 2 - Propusni opseg kroz TP-8 konfiguracije sa različitom arhitekturom, kvantizacijom i veličinom serije. Za svaku arhitekturu i kvantizaciju, veličina serije je izabrana kao najveća koja je ispunjavala zahteve za latencijom od 25600ms (20 tokena u sekundi za 512 tokena), kako bismo uporedili konfiguracije sa sličnom latencijom. Pod ovim zahtevom, H100 sa BS-128 dostiže 228% propusnog opsega u poređenju sa A100 BS-64 koristeći istu kvantizaciju (fp16) i čak ima manju latenciju odgovora uprkos udvostručenoj veličini serije. Kvantizacija sa fp8 poboljšava ovaj faktor na 251%.

U naše prve dve slike predstavljamo samo konfiguracije sa TP-8. H100 ostvaruje 54% latencije i 184% propusnog opsega u poređenju sa A100 kada oba koriste fp16 / BS-128 / TP-8, što se poboljšava na 49% latencije i 202% propusnog opsega kada se koristi fp8 na H100. Ovo poboljšanje performansi može se pripisati porastu računarske snage i propusnog opsega memorije između H100 i A100. Značajno je da je razlika manje izražena pri manjim veličinama serija gde iskorišćenost može biti niža.

Dok gradimo našu platformu, želimo da ispoštujemo određene zahteve za latencijom za naše korisnike uz maksimiziranje propusnog opsega. Stoga, umesto da upoređujemo A100 i H100 pri istoj veličini serije, zapravo ima više smisla da uporedimo njihov propusni opseg samo u okviru konfiguracija u kojima ispunjavaju uslov latencije. Postavili smo granicu na 25600ms latencije za završetak 512 izlaznih tokena i otkrili da H100 / TP-8 / fp8 / BS-128 daje 251% propusnog opsega u poređenju sa A100 / TP-8 / fp16 / BS-64, pošto je u stanju da obradi dvostruko veću veličinu serije pri manjoj latenciji. S obzirom na to da kvantizacija obezbeđuje uštedu GPU memorije, sada moramo da procenimo kako paralelizam tenzora može dodati sledeći sloj optimizacije.

Slika 3 - Latencija kroz različite veličine serija i paralelizam tenzora za H100 fp8. Latencija se generalno udvostručuje pri povećanju veličine serije sa 1 → 32, i ponovo se udvostručuje sa 32 → 128. TP-2 je dosledno otprilike duplo sporiji od TP-8 kada su veličine serija jednake. Udvostručavanje paralelizma tenzora uz udvostručavanje veličine serije održava latenciju relativno stabilnom pošto broj obrađenih serija po GPU-u ostaje ujednačen.

Kada je reč o kvantizaciji i arhitekturi, postoje jasni pobednici: H100 dominira nad A100, a kvantizacija sa smanjenom preciznošću poboljšava iskorišćenost memorije, latenciju i propusni opseg. Međutim, veličina serije i paralelizam tenzora predstavljaju kompromis u našim ključnim metrikama. Veća veličina serije optimizuje propusni opseg po cenu povećane latencije i potrošnje memorije. Sa druge strane, veći paralelizam tenzora povećava ukupni fond raspoložive memorije i optimizuje latenciju, ali pravi kompromis u pogledu propusnog opsega zbog troškova sinhronizacije distribuiranog mnoštva matrica i usled zauzimanja većeg broja GPU resursa.

Slika 4 - Propusni opseg kroz različite veličine serija i paralelizam tenzora za H100 fp8. Najveći propusni opseg dolazi od TP-2 BS-128, sa 460% u poređenju sa osnovnom vrednošću za A100/TP-8/fp16/BS-64. Međutim, TP-2 BS-128 je takođe najsporiji rezultat na slici 3.

Konfiguracija našeg eksperimenta koja maksimizuje propusni opseg je H100 / fp8 / TP-2 / BS-128, sa 767 izlaznih tokena u sekundi po GPU-u. Ovo predstavlja poboljšanje od 460% u odnosu na A100 / fp16 / TP-8 / BS-64. Međutim, to dolazi po cenu udvostručene latencije – bliže 42000ms za 512 izlaznih tokena – tako da možda nije pogodna kao produkcijska konfiguracija. Rezultati za TP-4 BS-128 (626 tok/sec/gpu uz vreme odgovora od 26188ms) i TP-2 BS-32 (435 tok/sec/gpu uz vreme odgovora od 18821ms) mogu predstavljati bolje kompromise u pogledu naših ključnih metrika.

Zaključak

Naši rezultati pokazuju da:

Dostižemo 54% latencije i 184% propusnog opsega koristeći H100 u poređenju sa A100 uz istu konfiguraciju, što se poboljšava na 49% odnosno 202% kada H100 iskoristi svoju izvornu podršku za fp8.

Kada se maksimizuje propusni opseg uz ograničenje latencije, H100 / fp8 / TP-8 / BS-128 daje 251% propusnog opsega u poređenju sa A100 / fp16 / TP-8 / BS-64, jer može da obradi dvostruko veću seriju većom brzinom.

Iskorišćavanjem modela H100 sa TP-2 i fp8, možemo postići 373% propusnog opsega u poređenju sa A100 / fp16 / TP-8 / BS-128, uz manje od 10% povećanja latencije.

Veličina serije i paralelizam tenzora predstavljaju kompromis između propusnog opsega i latencije za operatera LLM sistema za inferenciju.

Ovi rezultati nam daju samouverenost u potpunu tranziciju na H100 GPU-ove u našem hardverskom steku koji je ranije pokretao A100. Uzbuđeni smo što možemo da potvrdimo performanse koje je reklamirala kompanija NVIDIA i radujemo se njihovim sledećim probojima u ubrzanom hardveru.

Šta je sledeće

Naša sledeća granica za optimizaciju jeste ispitivanje uticaja strukturne retkosti (sparsity) i int4 preciznosti na tačnost i performanse, što bi moglo značajno da smanji otisak GPU memorije modela Llama 2 70B i donese do 2x poboljšanja u latenciji. Uzbuđeni smo što nastavljamo putovanje ultrabrze inferencije i nadamo se da ćemo omogućiti našim korisnicima da grade moćne aplikacije na vrhu naše platforme.

U bliskoj budućnosti, pplx-api će ukinuti ograničenja stope (rate limits) i ponuditi više prilagođenih Perplexity LLM modela, uključujući LLM sa pristupom internetu sa uzemljenjem za činjenice.

Prijavite se za Perplexity Pro na perplexity.ai/pro. Ostvarite pristup našem vrhunskom pplx-api-ju i iskoristite ove napredne mogućnosti u svojim projektima. Saznajte više o pplx-api-ju na našem blogu.

Zainteresovani ste za oblikovanje budućnosti veštačke inteligencije? Zapošljavamo! Budite deo tima koji pokreće generativnu LLM infrastrukturu masivnih razmera. Istražite prilike na stranici Perplexity Careers.

Autori:

Aarash Heydari, Grigorii Alekseev, Kevin Hu, Denis Yarats