Povećanje performansi modela Llama 2 70B uz NVIDIA H100
Putovanje ubrzane LLM inferencije

Potraga za performansama u Perplexityjevom stroju za odgovore potiče nas na usvajanje najnovije tehnologije koju NVIDIA i AWS nude. U ovom blogu s uzbuđenjem dijelimo rezultate naših najnovijih eksperimenata: usporedbu inferencije modela Llama 2 70B na različitim sklopovskim i programskim postavkama.
Naša platforma za LLM inferenciju, pplx-api, izgrađena je na vrhunskom stogu koji pokreću biblioteke otvorenog koda. U vrijeme od početka javne beta verzije pplx-api-ja u listopadu, hvatali smo se u koštac s izazovima skaliranja i učili kako najbolje prilagoditi našu konfiguraciju kako bismo postigli masovno skaliranje. To nas je navelo da provedemo eksperimente sa sljedećim vodećim pitanjima:
Koliko se sirovih performansi dobiva prebacivanjem naših grafičkih procesora s NVIDIA A100 na NVIDIA H100, uz sve ostale postavke nepromijenjene?
Koliko se učinkovitosti dobiva 8-bitnom kvantizacijom s pomičnim zarezom (fp8), za koju H100 dodaje izvornu podršku? Kolika je cijena točnosti ove kvantizacije?
Kako paralelizam tenzora i veličina serije utječu na latenciju i propusnost tokena?
Uzimajući u obzir gore navedeno, koja konfiguracija rezultira najskalabilnijom ravnotežom performansi i isplativosti?
Eksperimentalna postavka
Proveli smo sljedeći eksperiment kao niz lokalnih računalnih testova (benchmarka) kako bismo izbjegli mrežnu latenciju.
Ključne metrike:
Latencija: Ukupno vrijeme potrebno poslužitelju za inferenciju da generira svoj cijeli odgovor.
Propusnost: Broj izlaznih tokena u sekundi po grafičkom procesoru koje poslužitelj za inferenciju može generirati za sve korisnike i zahtjeve.
Konstante:
Sljedeći čimbenici utjecali bi na ključne metrike, stoga smo ih održali dosljednima u različitim pokusima eksperimenta.
AI model
Performanse se skaliraju s veličinom LLM-a. Više parametara zahtijeva više izračuna što rezultira sporijom inferencijom. Na primjer, Llama 2 13B brža je od Llama 2 70B kada su ostale postavke jednake. U ovom se eksperimentu držimo modela Llama 2 70B jer se želimo optimizirati za posluživanje modela otvorenog koda s najvišim mogućnostima.
Skup podataka ulaznih/izlaznih tokena
Količina ulaznih i izlaznih tokena u svakom paru uzorka zahtjeva/odgovora može utjecati na mjerenja performansi. Općenito, generiranje izlaznih tokena dominira ukupnim vremenom odgovora. Kada uzorkovanje podataka potiče samo odgovore „da/ne” iz LLM-a, tada je odgovor brži u usporedbi s uzorcima koji traže od LLM-a pisanje eseja. Naš skup podataka sastoji se od sintetičkih zahtjeva s 1024 ulazna tokena koji potiču 512 izlaznih tokena. Ova je distribucija odabrana kako bi odgovarala promatranoj distribuciji prometa na našoj javnoj primjeni modela Llama2 70B.
Verzija softvera
NVIDIA TensorRT-LLM (izdanje v0.5.0) je biblioteka otvorenog koda za optimizaciju LLM inferencije. Izdana krajem 2023. godine, ona sintetizira brojne NVIDIA-ine optimizacije inferencije i pruža fleksibilan sloj prilagodbe za ključne parametre ovog eksperimenta: veličinu serije, kvantizaciju i paralelizam tenzora.
Varijable
Eksperimentirali smo kroz 4 osi konfiguracije: paralelizam tenzora, arhitekturu grafičkog procesora, kvantizaciju i najveću veličinu serije. Ove su osi međusobno povezane jer svaka predstavlja kompromis u odnosu na kritični resurs uskog grla: memoriju grafičkog procesora.
Arhitektura grafičkog procesora
Deveta generacija Hopper (H100-HBM3-80GB / p5.48xlarge) arhitekture grafičkog procesora donosi ogroman popis značajki u odnosu na svog prethodnika, Ampere (A100-SXM4-80GB / p4de.24xlarge), uključujući 2x do 6x veće brzine izračuna i gotovo dvostruko veću propusnost memorije grafičkog procesora. Propusnost memorije grafičkog procesora kritična je metrika za inferenciju jer primarno usko grlo latencije matričnih množenja u inferenciji dolazi iz učitavanja gigabajta podatka modela iz memorije grafičkog procesora u registre za izračun. Na temelju ovih statističkih podataka, postavili smo hipotezu da će usporedba modela NVIDIA H100 i A100 pod jednakim uvjetima pokazati dvostruko poboljšanje u latenciji i propusnosti.
Još jedna ključna razlika između NVIDIA H100 i A100 je ta što tenzorska jegra H100 izvorno dodaje podršku za 8-bitne instrukcije s pomičnim zarezom (fp8), što otvara vrata daljnjim optimizacijama detaljno opisanim u nastavku. Zbog toga koristimo fp8 i fp16 posebno za H100.
Kako bismo u ovom eksperimentu održali memoriju po grafičkom procesoru dosljednom, držali smo se čvorova s 8x80GB memorije grafičkog procesora i za naše NVIDIA A100 i za H100 grafičke procesore. Osim što omogućuje veće veličine serija, memorija grafičkog procesora važna je jer se parametri modela učitavaju u memoriju grafičkog procesora tijekom pokretanja poslužitelja radi brzog pristupa. Na primjer, ako je svaki od 70 milijardi parametara u našem modelu 16-bitni broj s pomičnim zarezom, tada je model veličine oko 140 GB, što ne stane na jedan grafički procesor. Odatle potreba za paralelizmom tenzora, što objašnjavamo u nastavku.
Paralelizam tenzora
Paralelizam tenzora odnosi se na broj uređaja s grafičkim procesorom koji se troše za pokretanje poslužitelja za inferenciju. Kada dodijelimo određeni broj grafičkih procesora, TensorRT-LLM udružuje njihove resurse kako bi nam pomogao dostignuti minimalni potrebni memorijski proračun za pokretanje modela Llama2 70B. Naša je hipoteza da će niži paralelizam tenzora rezultirati većom latencijom (zbog manjeg broja resursa utrošenih za zadovoljenje svake serije), ali većom propusnošću po grafičkom procesoru (zbog bolje iskorištenosti) u usporedbi s višim paralelizmom tenzora.
Kvantizacija
Kvantizacija je smanjenje preciznosti u težinama i aktivacijama koje koriste nevronske mreže. Koristimo ovu tehniku za prepolovljavanje potrošnje memorije grafičkog procesora kada prelazimo s fp16 na fp8. To omogućuje pokretanje istog modela s manjom ukupnom upotrebom memorije grafičkog procesora, omogućujući niži paralelizam tenzora, što povećava propusnost.
Implementacije kvantizacije imaju potencijal smanjiti točnost. Stoga smo procijenili točnost za različite preciznosti usporedbom njihove statistike perplexity, mjere koliko dobro LLM predviđa svaki sljedeći token u rečenici, na korpusu WikiText. Za 8-bitni pomični zarez i 8-bitnu težinu s 8-bitnom aktivacijom i SmoothQuantom (w8a8 SQ), nije bilo značajne promjene u perplexityju (< 1%) u usporedbi s fp16 na WikiTextu, pa smo se osjećali samouvjereno za nastavak. Međutim, w4a16 je pokazao znatnu 7%-tnu promjenu u perplexityju, što se potencijalno može pripisati još nižoj preciznosti i nužnim dinamičkim pretvorbama između int4 i fp16.
Veličina serije
Paralelizam putem stvaranja serija (batching) klasična je strategija za izvlačenje performansi iz sustava ograničenih resursima. Obradom višestrukih zahtjeva u svakom prolazu prema naprijed kroz neuronsku mrežu, stvaranje serija poznato je po povećanju propusnosti po cijenu određene latencije. Stvaranje serija također uzrokuje veću potrošnju memorije grafičkog procesora jer veličina KV predmemorije koja upravlja mehanizmom pažnje raste linearno s veličinom serije.
U slučaju modela Llama 2 70B (koji ima 80 slojeva), fp16 s veličinom serije 32 za veličinu konteksta 4096, veličina KV predmemorije doseže znatnih 40 GB. To na kraju sprječava da Llama 2 70B fp16, čije samo težine zauzimaju 140 GB, udobno stane u 160 GB memorije grafičkog procesora dostupne pri paralelizmu tenzora 2 (TP-2).
Rezultati
Pregledali smo kompatibilne kombinacije 4 varijable eksperimenta i u nastavku prikazujemo najdublje trendove.
Poboljšanje latencije kvantizacije je oko 10% kada se uspoređuju H100 fp16 → fp8 i A100 fp16 → w8a8 sa SmoothQuantom. Međutim, mješovita preciznost w4a16 zapravo radi bolje pri malim veličinama serija, a lošije pri većim veličinama serija u usporedbi s fp16. To može biti zbog brojnih čimbenika, uključujući manje optimizirane jezgre izračuna, vrijeme pretvorbe između int4 i fp16 te činjenicu da w4a16 i dalje koristi 16-bitne pomične zareze za aktivacije, što ne rezultira uštedama u dimenzijama KV predmemorije. Budući da je w4a16 također pokazao manju točnost, zaključujemo da bismo se trebali držati w8a8 SQ za A100 i fp8 za H100.
U naše prve dvije slike prikazujemo samo konfiguracije TP-8. H100 postiže 54% latencije i 184% propusnosti u usporedbi s A100 kada oba koriste fp16 / BS-128 / TP-8, što se poboljšava na 49% latencije i 202% propusnosti kada se koristi fp8 na H100. Ovo poboljšanje performansi može se pripisati povećanju računalne snage i propusnosti memorije između H100 i A100. Valja primijetiti da je razlika manje izražena pri manjim veličinama serija gdje iskorištenost može biti niža.
Dok gradimo našu platformu, želimo poštivati određene zahtjeve latencije za naše korisnike uz maksimiziranje propusnosti. Stoga, umjesto usporedbe A100 naspram H100 pri istoj veličini serije, zapravo ima više smisla uspoređivati njihovu propusnost samo u konfiguracijama u kojima zadovoljavaju zahtjev latencije. Postavili smo granicu na 25600ms latencije za dovršetak 512 izlaznih tokena i otkrili da H100 / TP-8 / fp8 / BS-128 daje 251% propusnosti u usporedbi s A100 / TP-8 / fp16 / BS-64, budući da može obraditi dvostruku veličinu serije pri manjoj latenciji. S obzirom na to da kvantizacija pruža uštedu memorije grafičkog procesora, sada moramo procijeniti kako paralelizam tenzora može dodati sljedeći sloj optimizacije.
Što se tiče kvantizacije i arhitekture, postoje jasni pobjednici: H100 dominira nad A100, a kvantizacija smanjene preciznosti poboljšava iskorištenost memorije, latenciju i propusnost. Međutim, veličina serije i paralelizam tenzora predstavljaju kompromis u našim ključnim metrikama. Veća veličina serije optimizira propusnost po cijenu povećane latencije i potrošnje memorije. S druge strane, viši paralelizam tenzora povećava ukupni skup dostupne memorije i optimizira latenciju, ali ide nauštrb propusnosti zbog troškova sinkronizacije distribuiranog matričnog množenja i zbog toga što zauzima više resursa grafičkog procesora.
Konfiguracija našeg eksperimenta koja maksimizira propusnost jest H100 / fp8 / TP-2 / BS-128, s 767 izlaznih tokena u sekundi po grafičkom procesoru. To je poboljšanje od 460% u odnosu na A100 / fp16 / TP-8 / BS-64. Međutim, to dolazi po cijenu udvostručene latencije – bliže 42000ms za 512 izlaznih tokena – stoga možda nije prikladna kao proizvodna konfiguracija. Rezultati za TP-4 BS-128 (626 tok/s/gpu pri vremenu odgovora od 26188ms) i TP-2 BS-32 (435 tok/s/gpu pri vremenu odgovora od 18821ms) možda predstavljaju bolje kompromise u našim ključnim metrikama.
Zaključak
Naši rezultati pokazuju da:
Dostižemo 54% latencije i 184% propusnosti koristeći H100 u usporedbi s A100 uz istu konfiguraciju, što se poboljšava na 49% odnosno 202% kada H100 iskoristi svoju izvornu podršku za fp8.
Prilikom maksimiziranja propusnosti uz ograničenje latencije, H100 / fp8 / TP-8 / BS-128 daje 251% propusnosti u usporedbi s A100 / fp16 / TP-8 / BS-64, budući da može obraditi dvostruku seriju pri većoj brzini.
Iskorištavanjem prednosti modela H100 s TP-2 uz fp8, možemo postići 373% propusnosti modela A100 / fp16 / TP-8 / BS-128, uz manje od 10%-tnog povećanja latencije.
Veličina serije i paralelizam tenzora predstavljaju kompromis između propusnosti i latencije za operatera sustava LLM inferencije.
Zbog ovih se rezultata osjećamo sigurno u potpunu tranziciju na H100 grafičke procesore u našem sklopovskom stogu koji se prethodno napajao A100 procesorima. Uzbuđeni smo što možemo potvrditi performanse koje reklamira NVIDIA i radujemo se njihovim sljedećim otkrićima u ubrzanom sklopovlju.
Što je sljedeće
Naša sljedeća granica za optimizaciju jest ispitivanje točnosti i utjecaja performansi strukturirane rijetkosti i int4 preciznosti, što bi moglo značajno smanjiti otisak memorije grafičkog procesora modela Llama 2 70B i donijeti do dvostruko veća poboljšanja u latenciji. Uzbuđeni smo što nastavljamo putovanje ultrabrze inferencije i nadamo se da ćemo osnažiti naše korisnike da grade moćne aplikacije na vrhu naše platforme.
U skoroj budućnosti, pplx-api će ukinuti ograničenja stope i ponuditi više prilagođenih Perplexity LLM-ova, uključujući LLM s internetskim napajanjem i 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. Otkrijte više o pplx-api-ju na našem blogu.
Zanima vas oblikovanje budućnosti AI-ja? Zapošljavamo! Budite dio tima koji pokreće generativnu LLM infrastrukturu masovnih razmjera. Istražite prilike na stranici Perplexity Careers.
Autori:
Aarash Heydari, Grigorii Alekseev, Kevin Hu, Denis Yarats