Llama 2 70B jaudas palielināšana ar NVIDIA H100
Paātrinātās LLM secināšanas ceļojums

Tiešanās pēc veiktspējas Perplexity atbilžu dzinējā mudina mūs izmantot jaunākās tehnoloģijas, ko piedāvā NVIDIA un AWS. Šajā emuārā mēs ar prieku dalāmies ar mūsu jaunāko eksperimentu rezultātiem: Llama 2 70B secināšanas salīdzinājumu dažādos aparatūras un programmatūras iestatījumos.
Mūsu LLM secināšanas platforma pplx-api ir veidota uz modernākā steka, ko nodrošina atvērtā koda bibliotēkas. Kopš pplx-api publiskā beta versijas sākuma oktobrī mēs esam risinājuši mērogošanas izaicinājumus un mācījušies, kā vislabāk pielāgot mūsu konfigurāciju, lai sasniegtu masīvu mērogu. Tas mūs pamudināja veikt eksperimentus ar šādiem vadošajiem jautājumiem:
Kāds ir tiešais veiktspējas ieguvums, nomainot mūsu GPU no NVIDIA A100 uz NVIDIA H100, visiem pārējiem iestatījumiem paliekot nemainīgiem?
Kāds ir efektivitātes ieguvums no 8 bitu peldošā komata (fp8) kvantēšanas, kurai H100 nodrošina vietējo atbalstu? Kādas ir šīs kvantēšanas izmaksas precizitātes ziņā?
Kā tensora paralēlisms un pakešu lielums ietekmē latentumu un tokenu caurlaidību?
Ņemot vērā iepriekš minēto, kura konfigurācija nodrošina visvairāk mērogojamu veiktspējas un izmaksu efektivitātes līdzsvaru?
Eksperimentālā iestatīšana
Mēs veicām šo eksperimentu kā vietējo etalonu sēriju, lai izvairītos no tīkla latentuma.
Galvenie rādītāji:
Latents: Kopējais laiks, kas nepieciešams, lai secināšanas serveris ģenerētu pilnu atbildi.
Caurlaidība: Izvades tokenu skaits sekundē uz vienu GPU, ko secināšanas serveris var ģenerēt visiem lietotājiem un pieprasījumiem.
Konstantes:
Šie faktori ietekmētu galvenos rādītājus, tāpēc mēs tos saglabājām konsekventus dažādos eksperimenta mēģinājumos.
AI modelis
Veiktspēja mērogojas līdz ar LLM lielumu. Lielākam parametru skaitam ir nepieciešams vairāk aprēķinu, kā rezultātā secināšana ir lēnāka. Piemēram, Llama 2 13B ir ātrāka nekā Llama 2 70B, ja citi iestatījumi ir vienādi. Šajā eksperimentā mēs pieturamies pie Llama 2 70B, jo vēlamies optimizēt visspējīgāko atvērtā koda modeļu apkalpošanu.
Ievades/izvades tokenu datu kopums
Ievades un izvades tokenu daudzums katrā parauga pieprasījuma/atbildes pārī var ietekmēt veiktspējas mērījumus. Parasti izvades tokenu ģenerēšana dominē kopējā atbildes laikā. Kad datu paraugu ņemšana izraisa tikai "jā/nē" atbildes no LLM, atbilde ir ātrāka salīdzinājumā ar paraugiem, kuros LLM tiek lūgts rakstīt esejas. Mūsu datu kopums sastāv no sintētiskiem pieprasījumiem ar 1024 ievades tokeniem, kas izraisa 512 izvades tokenus. Šis sadalījums tika izvēlēts, lai tas atbilstu novērotajam datu plūsmas sadalījumam mūsu publiskajā Llama2 70B izvietojumā.
Programmatūras versija
NVIDIA TensorRT-LLM (v0.5.0 laidiens) ir atvērtā koda bibliotēka LLM secināšanas optimizēšanai. Tā tika izlaista 2023. gada beigās, tā apkopo daudzas NVIDIA secināšanas optimizācijas un nodrošina elastīgu pielāgošanas slāni šī eksperimenta galvenajiem parametriem: pakešu lielumam, kvantēšanai un tensora paralēlismam.
Mainīgie
Mēs veicām eksperimentus ar 4 konfigurācijas asīm: tensora paralēlismu, GPU arhitektūru, kvantēšanu un maksimālo pakešu lielumu. Šīs asis ir savstarpēji saistītas, jo katra no tām atspoguļo kompromisu attiecībā uz kritisko GPU atmiņas ierobežoto resursu.
GPU arhitektūra
Devītās paaudzes Hopper (H100-HBM3-80GB / p5.48xlarge) GPU arhitektūra ietver milzīgu sarakstu ar funkcijām salīdzinājumā ar tās priekšteci Ampere (A100-SXM4-80GB / p4de.24xlarge), tostarp 2x-6x lielāku skaitļošanas ātrumu un gandrīz 2x lielāku GPU atmiņas joslas platumu. GPU atmiņas joslas platums ir kritisks rādītājs secināšanai, jo galvenais secināšanas matricas reizināšanas latentuma sašaurinājums rodas, ielādējot modeļa datus gigabaitu apmērā no GPU atmiņas skaitļošanas reģistros. Pamatojoties uz šiem statistikas datiem, mēs izvirzījām hipotēzi, ka tiešs NVIDIA H100 un A100 salīdzinājums uzrādīs 2x uzlabojumu gan latentumā, gan caurlaidībā.
Vēl viena galvenā atšķirība starp NVIDIA H100 un A100 ir tā, ka H100 tensora kodols vietējā līmenī pievieno atbalstu 8 bitu peldošā komata (fp8) instrukcijām, kas paver ceļu turpmākām optimizācijām, kas aprakstītas tālāk. Tāpēc mēs izmantojam fp8 un fp16 tieši H100.
Lai šajā eksperimentā atmiņa uz vienu GPU saglabātos nemainīga, mēs pieturējāmies pie mezgliem ar 8x80GB GPU atmiņu gan mūsu NVIDIA A100, gan H100. Papildus lielāku pakešu lielumu iespējošanai GPU atmiņa ir svarīga, jo servera sāknēšanas laikā modeļa parametri tiek ielādēti GPU atmiņā ātrai piekļuvei. Piemēram, ja katrs no mūsu modeļa 70 miljardiem parametru ir 16 bitu peldošā komata skaitlis, tad modelis ir apmēram 140 GB liels, kas neietilpst vienā GPU. Tāpēc ir nepieciešams tensora paralēlisms, ko mēs izskaidrojam tālāk.
Tensora paralēlisms
Tensora paralēlisms attiecas uz izmantoto GPU ierīču skaitu secināšanas servera darbināšanai. Kad mēs piešķiram noteiktu skaitu GPU, TensorRT-LLM apvieno to resursus, lai palīdzētu mums sasniegt minimālo nepieciešamo atmiņas budžetu Llama2 70B darbināšanai. Mūsu hipotēze ir tāda, ka mazāks tensora paralēlisms radīs lielāku latentumu (mazāku izmantoto resursu dēļ katras paketes apmierināšanai), bet lielāku caurlaidību uz vienu GPU (labākas izmantošanas dēļ), salīdzinot ar lielāku tensora paralēlismu.
Kvantēšana
Kvantēšana ir neironu tīklu izmantoto svaru un aktivāciju precizitātes samazināšana. Mēs izmantojam šo paņēmienu, lai uz pusi samazinātu GPU atmiņas patēriņu, kad pārejam no fp16 uz fp8. Tas ļauj darbināt to pašu modeli ar mazāku kopējo GPU atmiņas lietojumu, iespējojot mazāku tensora paralēlismu, kas palielina caurlaidību.
Kvantēšanas ieviešana var mazināt precizitāti. Tādējādi mēs novērtējām precizitāti dažādām precizitātēm, salīdzinot to perpleksitātes statistiku (mēru tam, cik labi LLM paredz katru nākamo tokenu teikumā) WikiText korpusā. 8 bitu peldošajam komatam un 8 bitu svaram ar 8 bitu aktivāciju un SmoothQuant (w8a8 SQ) nebija būtiskas perpleksitātes izmaiņas (< 1%) salīdzinājumā ar fp16 WikiText, tāpēc mēs bijām pārliecināti, ka varam turpināt. Tomēr w4a16 uzrādīja ievērojamas 7% perpleksitātes izmaiņas, ko potenciāli varētu skaidrot ar vēl zemāku precizitāti un nepieciešamajiem dinamiskajiem konvertējumiem starp int4 un fp16.
Pakešu lielums
Paralēlisms, izmantojot pakešu apstrādi, ir klasiska stratēģija, lai izspiestu veiktspēju no resursu ierobežotas sistēmas. Apstrādājot vairākus pieprasījumus katrā pārejā uz priekšu caur neironu tīklu, pakešu apstrāde palielina caurlaidību uz zināmu latentuma rēķinu. Pakešu apstrāde rada arī lielāku GPU atmiņas patēriņu, jo KV kešatmiņas lielums, kas pārvalda uzmanības mehānismu, aug lineāri līdz ar pakešu lielumu.
Llama 2 70B (kurai ir 80 slāņi) gadījumā, izmantojot fp16 ar pakešu lielumu 32 un 4096 konteksta lielumu, KV kešatmiņas lielums sasniedz ievērojamus 40 GB. Tas neļauj Llama 2 70B fp16, kuras svars vien aizņem 140 GB, ērti ietilpt 160 GB GPU atmiņā, kas pieejama pie tensora paralēlisma 2 (TP-2).
Rezultāti
Mēs izgājām cauri saderīgajām eksperimenta 4 mainīgo kombinācijām un tālāk piedāvājam vispārskatāmākās tendences.
Kvantēšanas latentuma uzlabojums ir aptuveni 10%, salīdzinot H100 fp16 → fp8 un A100 fp16 → w8a8 ar SmoothQuant. Tomēr jauktās precizitātes w4a16 patiesībā darbojas labāk pie zemiem pakešu lielumiem un sliktāk pie lielākiem pakešu lielumiem salīdzinājumā ar fp16. To var izraisīt vairāki faktori, tostarp mazāk optimizēti skaitļošanas kodoli, apstrādes laiks starp int4 un fp16, kā arī fakts, ka w4a16 joprojām izmanto 16 bitu peldošos komatus aktivācijām, kā rezultātā nav ietaupījumu KV kešatmiņas dimensijās. Tā kā w4a16 uzrādīja arī zemāku precizitāti, mēs secinām, ka mums vajadzētu pieturēties pie w8a8 SQ A100 un fp8 H100.
Savos pirmajos divos attēlos mēs piedāvājam tikai TP-8 konfigurācijas. H100 sasniedz 54% latentumu un 184% caurlaidību salīdzinājumā ar A100, ja abas izmanto fp16 / BS-128 / TP-8, kas uzlabojas līdz 49% latentumam un 202% caurlaidībai, lietojot fp8 uz H100. Šo veiktspējas uzlabojumu var saistīt ar skaitļošanas jaudas un atmiņas joslas platuma pieaugumu starp H100 un A100. Jāatzīmē, ka atšķirība ir mazāk izteikta zemākos pakešu lielumos, kur izmantošana var būt zemāka.
Veidojot savu platformu, mēs vēlamies ievērot noteiktas latentuma prasības saviem lietotājiem, vienlaikus maksimāli palielinot caurlaidību. Tā vietā, lai salīdzinātu A100 pret H100 ar vienādu pakešu lielumu, mums ir daudz lielāka jēga salīdzināt to caurlaidību tikai konfigurācijās, kurās tās atbilst latentuma prasībai. Mēs noteicām robežvērtību 25600ms latentumam 512 izvades tokenu pabeigšanai un atklājām, ka H100 / TP-8 / fp8 / BS-128 nodrošina 251% caurlaidību salīdzinājumā ar A100 / TP-8 / fp16 / BS-64, jo tas spēj apstrādāt divreiz lielāku paketi ar zemāku latentumu. Ņemot vērā to, ka kvantēšana nodrošina GPU atmiņas ietaupījumu, mums tagad ir jānovērtē, kā tensora paralēlisms var pievienot nākamo optimizācijas slāni.
Runājot par kvantēšanu un arhitektūru, ir skaidri uzvarētāji: H100 dominē pār A100, un samazinātas precizitātes kvantēšana uzlabo atmiņas izmantošanu, latentumu un caurlaidību. Tomēr pakešu lielums un tensora paralēlisms rada kompromisu mūsu galvenajos rādītājos. Lielāks pakešu lielums optimizē caurlaidību uz paaugstināta latentuma un atmiņas patēriņa rēķina. No otras puses, lielāks tensora paralēlisms palielina kopējo pieejamās atmiņas apjomu un optimizē latentumu, taču rada kompromisu ar caurlaidību izplatītās matricas reizināšanas sinhronizācijas izmaksu un lielāku GPU resursu bloķēšanas dēļ.
Mūsu eksperimenta caurlaidību maksimizējošā konfigurācija ir H100 / fp8 / TP-2 / BS-128, ar 767 izvades tokeniem sekundē uz vienu GPU. Tas ir 460% uzlabojums salīdzinājumā ar A100 / fp16 / TP-8 / BS-64. Tomēr tas notiek uz dubultota latentuma rēķina – tuvāk 42000 ms 512 izvades tokeniem –, tāpēc tas var nebūt piemērots kā produkcijas konfigurācija. TP-4 BS-128 (626 tok/s/gpu pie 26188 ms atbildes laika) un TP-2 BS-32 (435 tok/s/gpu pie 18821 ms atbildes laika) rezultāti var reprezentēt labākus kompromidus mūsu galvenajos rādītājos.
Secinājums
Mūsu rezultāti parāda, ka:
Mēs sasniedzam 54% latentumu un 184% caurlaidību, izmantojot H100 salīdzinājumā ar A100 pie vienas un tās pašas konfigurācijas, kas attiecīgi uzlabojas līdz 49% un 202%, kad H100 izmanto savu vietējo atbalstu fp8.
Maksimāli palielinot caurlaidību saskaņā ar latentuma ierobežojumu, H100 / fp8 / TP-8 / BS-128 nodrošina 251% caurlaidību salīdzinājumā ar A100 / fp16 / TP-8 / BS-64, jo tas var apstrādāt divreiz lielāku paketi ar lielāku ātrumu.
Izmantojot H100 ar TP-2 un fp8, mēs varam sasniegt 373% no A100 / fp16 / TP-8 / BS-128 caurlaidības ar mazāku par 10% latentuma pieaugumu.
Pakešu lielums un tensora paralēlisms rada kompromisu starp caurlaidību un latentumu LLM secināšanas sistēmas operatoram.
Šie rezultāti liek mums justies pārliecinātiem par pilnīgu pāreju uz H100 GPU mūsu iepriekš ar A100 darbinātajā aparatūras stekā. Mēs esam priecīgi varēt apstiprināt NVIDIA reklamētos veiktspējas ieguvumus un ceram uz viņu nākamajiem sasniegumiem paātrinātajā aparatūrā.
Kas tālāk?
Mūsu nākamā robeža optimizācijai ir strukturētās retuma un int4 precizitātes precizitātes un veiktspējas ietekmes izpēte, kas varētu būtiski samazināt Llama 2 70B GPU atmiņas nospiedumu un dot līdz pat 2x uzlabojumu latentumā. Mēs ar nepacietību gaidām iespēju turpināt neticami ātras secināšanas ceļojumu un ceram dot saviem lietotājiem iespēju veidot jaudīgas lietojumprogrammas uz mūsu platformas bāzes.
Tuvākajā laikā pplx-api atcels ierobežojumus un piedāvās vairāk pielāgotu Perplexity LLM, tostarp interneta LLM ar faktu pamatojumu.
Reģistrējieties Perplexity Pro vietnē perplexity.ai/pro. Iegūstiet piekļuvi mūsu modernajai pplx-api un izmantojiet šīs uzlabotās iespējas savos projektos. Uzziniet vairāk par pplx-api mūsu emuārā.
Vai vēlaties veidot AI nākotni? Mēs meklējam darbiniekus! Esiet daļa no komandas, kas virza uz priekšu masīva mēroga ģeneratīvā LLM infrastruktūru. Izpētiet iespējas vietnē Perplexity Careers.
Autori:
Aarash Heydari, Grigorii Alekseev, Kevin Hu, Denis Yarats