Potenciant Llama 2 70B amb NVIDIA H100
El viatge de la inferència LLM accelerada

La cerca del rendiment en el motor de respostes de Perplexity ens impulsa a adoptar l'última tecnologia que NVIDIA i AWS tenen per oferir. En aquest blog, ens complau compartir els resultats dels nostres últims experiments: una comparació de la inferència de Llama 2 70B en diversos paràmetres de maquinari i programari.
La nostra plataforma d'inferència LLM, pplx-api, està construïda sobre una pila d'avantguarda impulsada per biblioteques de codi obert. Des que va començar la beta pública de pplx-api a l'octubre, hem estat abordant reptes d'escalat i aprenent a ajustar de la millor manera la nostra configuració per aconseguir una escala massiva. Això ens va portar a realitzar experiments amb les següents preguntes orientadores:
Quin és el guany de rendiment brut en canviar les nostres GPU de NVIDIA A100 a NVIDIA H100, mantenint la resta de paràmetres iguals?
Quin és el guany d'eficiència de la quantificació de punt flotant de 8 bits (fp8), per a la qual H100 afegeix suport natiu? Quin és el cost de precisió d'aquesta quantificació?
Com afecten el paral·lelisme de tensors i la mida de lot a la latència i al rendiment de tokens?
Tenint en compte l'anterior, quina configuració resulta en l'equilibri més escalable de rendiment i eficiència de costos?
Configuració experimental
Hem dut a terme el següent experiment com una sèrie de benchmarks locals per evitar la latència de xarxa.
Mètriques clau:
Latència: El temps total que triga el servidor d'inferència a generar la seva resposta completa.
Rendiment: El nombre de tokens de sortida, per segon, per GPU, que el servidor d'inferència pot generar entre tots els usuaris i sol·licituds.
Constants:
Els factors següents influirien en les mètriques clau, així que els hem mantingut consistents en diferents proves de l'experiment.
Model d'IA
El rendiment escala amb la mida del LLM. Més paràmetres requereixen més càlculs, la qual cosa resulta en una inferència més lenta. Per exemple, Llama 2 13B és més ràpid que Llama 2 70B quan la resta de paràmetres són iguals. Ens mantenim en Llama 2 70B en aquest experiment perquè volem optimitzar per servir els models de codi obert més capaços.
Conjunt de dades de tokens d'entrada/sortida
La quantitat de tokens d'entrada i sortida en cada parell de sol·licitud/resposta de mostra pot influir en les mesures de rendiment. En general, la generació de tokens de sortida domina el temps de resposta global. Quan les dades de mostreig només indueixen respostes "sí/no" del LLM, la resposta és més ràpida en comparació amb les mostres que demanen al LLM escriure redaccions. El nostre conjunt de dades es compon de sol·licituds sintètiques amb 1024 tokens d'entrada que indueixen 512 tokens de sortida. Aquesta distribució es va triar per coincidir amb la distribució observada de trànsit en el nostre desplegament públic de Llama 2 70B.
Versió de programari
NVIDIA TensorRT-LLM (llançament v0.5.0) és una biblioteca de codi obert per optimitzar la inferència de LLM. Llançada a finals de 2023, sintetitza les moltes optimitzacions d'inferència de NVIDIA i proporciona una capa flexible de personalització per als paràmetres clau d'aquest experiment: mida de lot, quantificació i paral·lelisme de tensors.
Variables
Hem experimentat a través de 4 eixos de configuració: paral·lelisme de tensors, arquitectura de GPU, quantificació i mida màxima de lot. Aquests eixos estan interconnectats perquè cadascun representa un compromís pel que fa al recurs coll d'ampolla crític de la memòria de la GPU.
Arquitectura de GPU
L'arquitectura de GPU Hopper de novena generació (H100-HBM3-80GB / p5.48xlarge) inclou una gran llista de característiques respecte al seu predecessor, Ampere (A100-SXM4-80GB / p4de.24xlarge), incloent taxes de càlcul de 2x-6x i gairebé el doble d'amplada de banda de memòria de GPU. L'amplada de banda de la memòria de la GPU és una mètrica crítica per a la inferència perquè un coll d'ampolla principal de latència de les multiplicacions de matrius de la inferència prové de carregar gigabytes de dades del model des de la memòria de la GPU als registres de càlcul. Basant-nos en aquestes estadístiques, vam formular la hipòtesi que una comparació directa entre NVIDIA H100 i A100 mostrarà una millora de 2x tant en latència com en rendiment.
Una altra diferència clau entre NVIDIA H100 i A100 és que el nucli de tensors de la H100 afegeix de manera nativa suport per a instruccions de punt flotant de 8 bits (fp8), la qual cosa obre la porta a més optimitzacions detallades a continuació. Per això fem servir fp8 i fp16 específicament per a la H100.
Per mantenir la memòria per GPU consistent en aquest experiment, ens hem limitat a nodes amb 8x80GB de memòria de GPU tant per a les nostres NVIDIA A100 com H100. A més d'activar mides de lot més altes, la memòria de la GPU és important perquè els paràmetres del model es carreguen a la memòria de la GPU durant l'inici del servidor per a un accés ràpid. Per exemple, si cadascun dels 70 milions de paràmetres del nostre model és un nombre de punt flotant de 16 bits, el model té una mida d'aproximadament 140 GB, la qual cosa no cap en una sola GPU. D'aquí la necessitat de paral·lelisme de tensors, que expliquem a continuació.
Paral·lelisme de tensors
El paral·lelisme de tensors fa referència al nombre de dispositius de GPU consumits per executar el servidor d'inferència. Quan assignem un nombre de GPU, TensorRT-LLM agrupa els seus recursos per ajudar-nos a assolir el pressupost de memòria mínim requerit per executar Llama 2 70B. La nostra hipòtesi és que un paral·lelisme de tensors menor resultarà en una latència més alta (a causa de menys recursos consumits per satisfer cada lot), però un rendiment més alt per GPU (a causa d'una millor utilització) en comparar-ho amb un paral·lelisme de tensors més alt.
Quantificació
La quantificació és la reducció de la precisió en els pesos i les activacions utilitzades per les xarxes neuronals. Fem servir aquesta tècnica per reduir a la mitad el consum de memòria de la GPU quan passem de fp16 a fp8. Això fa possible executar el mateix model amb un ús total de memòria de GPU inferior, permetent un paral·lelisme de tensors menor, la qual cosa impulsa el rendiment.
Les implementacions de la quantificació tenen el potencial de degradar la precisió. Per tant, vam avaluar la precisió per a diferents precisions comparant la seva estadística de perplexitat, una mesura de com de bé prediu el LLM cada següent token en una frase, al corpus WikiText. Per a punt flotant de 8 bits i pes de 8 bits amb activació de 8 bits i SmoothQuant (w8a8 SQ), no hi va haber cap canvi significatiu en la perplexitat (< 1%) en comparació amb fp16 a WikiText, així que ens vam sentir segurs per continuar. No obstant això, w4a16 va mostrar un canvi substancial del 7% en la perplexitat, potencialment atribuïble a la precisió encara menor i a les conversions dinàmiques necessàries entre int4 i fp16.
Mida del lot
El paral·lelisme mitjançant lots és una estratègia clàssica per extreure rendiment d'un sistema amb recursos limitats. En processar múltiples sol·licituds en cada passada endavant a través de la xarxa neuronal, se sap que l'agrupació en lots augmenta el rendiment a costa d'una certa latència. L'agrupació en lots també comporta un major consum de memòria de la GPU perquè la mida de la memòria cau KV que gestiona el mecanisme d'atenció creix linealment amb la mida del lot.
En el cas de Llama 2 70B (que té 80 capes), fp16 amb mida de lot 32 per a una mida de context de 4096, la mida de la memòria cau KV resulta ser d'uns substancials 40 GB. Això acaba evitant que Llama 2 70B fp16, els pesos del qual per si sols ocupen 140 GB, caigui còmodament en els 160 GB de memòria de GPU disponibles amb un paral·lelisme de tensors 2 (TP-2).
Resultats
Hem explorat combinacions compatibles de les 4 variables de l'experiment i presentem les tendències més reveladores a continuació.
La millora de la latència de la quantificació és al voltant del 10% en comparar H100 fp16 → fp8 i A100 fp16 → w8a8 amb SmoothQuant. No obstant això, la precisió mixta w4a16 realment funciona millor a mides de lot baixes i pitjor a mides de lot més altes en comparació amb fp16. Això pot ser degut a diversos factors, inclosos nuclis de càlcul menys optimitzats, temps de conversió entre int4 i fp16, i el fet que w4a16 encara utilitza punts flotants de 16 bits per a les activacions, el que resulta en cap estalvi en les dimensions de la memòria cau KV. Com que w4a16 també va demostrar una precisió inferior, concloem que hauríem de mantenir-nos en w8a8 SQ per a A100 i fp8 per a H100.
En les nostres dues primeres figures, només presentem configuracions de TP-8. H100 aconsegueix un 54% de latència i un 184% de rendiment en comparació amb A100 quan ambdues utilitzen fp16 / BS-128 / TP-8, la qual cosa millora fins al 49% de latència i el 202% de rendiment en utilitzar fp8 a H100. Aquesta millora en el rendiment es pot atribuir als augments de la potència de càlcul i de l'amplada de banda de la memòria entre H100 i A100. Cal destacar que la diferència és menys pronunciada sota mides de lot més baixes on la utilització pot ser menor.
A mesura que construïm la nostra plataforma, volem complir certs requisits de latència per als nostres usuaris alhora que maximitzem el rendiment. Per tant, en lloc de comparar A100 amb H100 a la mateixa mida de lot, realment té més sentit per a nosaltres comparar el seu rendiment només sota configuracions on satisfan un requisit de latència. Establim un límit de 25600 ms de latència per a la finalització dels 512 tokens de sortida i vam trobar que H100 / TP-8 / fp8 / BS-128 produeix un 251% de rendiment en comparació amb A100 / TP-8 / fp16 / BS-64, ja que és capaç de processar el doble de la mida de lot a una latència inferior. Donat que la quantificació proporciona estalvis de memòria de GPU, ara necessitem avaluar com el paral·lelisme de tensors pot afegir una següent capa d'optimització.
Pel que fa a la quantificació i l'arquitectura, hi ha guanyadors clars: H100 domina A100 i la quantificació de precisió reduïda millora la utilització de la memòria, la latència i el rendiment. No obstant això, la mida del lot i el paral·lelisme de tensors presenten un compromís en les nostres mètriques clau. Una mida de lot més gran optimitza el rendiment a costa d'una latència i un consum de memòria augmentats. D'altra banda, un paral·lelisme de tensors més alt augmenta el grup general de memòria disponible i optimitza la latència, però es compensa amb el rendiment a causa dels costos de sincronització de la multiplicació de matrius distribuïda i en virtut de bloquejar més recursos de GPU.
La configuració que maximitza el rendiment del nostre experiment és H100 / fp8 / TP-2 / BS-128, amb 767 tokens de sortida per segon per GPU. Aquesta és una millora del 460% respecte a A100 / fp16 / TP-8 / BS-64. No obstant això, té el cost de duplicar la latència —propera als 42000 ms per a 512 tokens de sortida—, per la qual cosa pot ser inadequada com a configuració de producció. Els resultats de TP-4 BS-128 (626 tok/seg/gpu a 26188 ms de temps de resposta) i TP-2 BS-32 (435 tok/seg/gpu a 18821 ms de temps de resposta) poden representar millors compromisos en les nostres mètriques clau.
Conclusió
Els nostres resultats demostren que:
Arribem al 54% de latència i a un 184% de rendiment utilitzant H100 en comparació amb A100 donada la mateixa configuració, la qual cosa millora al 49% i al 202% respectivament quan H100 aprofita el seu suport natiu per a fp8.
Quan es maximitza el rendiment subjecte a una restricció de latència, H100 / fp8 / TP-8 / BS-128 produeix un 251% de rendiment en comparació amb A100 / fp16 / TP-8 / BS-64, ja que pot processar el doble del lot a una velocitat més ràpida.
Aprofitant H100 amb TP-2 amb fp8, podem aconseguir un 373% del rendiment d'A100 / fp16 / TP-8 / BS-128, amb un augment de la latència inferior al 10%.
La mida del lot i el paral·lelisme de tensors presenten un compromís entre el rendiment i la latència per a l'operador d'un sistema d'inferència LLM.
Aquests resultats ens fan sentir segurs sobre una transició completa a les GPU H100 en la nostra pila de maquinari prèviament potenciada per A100. Ens complau poder confirmar els guanys de rendiment anunciats per NVIDIA i esperem amb interès els seus propers avenços en maquinari accelerat.
Què és el següent
La nostra propera frontera per a l'optimització és examinar l'impacte en la precisió i el rendiment de la dispersió estructurada i la precisió int4, la qual cosa podria reduir significativament la petjada de memòria de GPU de Llama 2 70B i proporcionar fins a 2x de millora en la latència. Ens emociona continuar el viatge d'una inferència increïblement ràpida i esperem potenciar els nostres usuaris per construir aplicacions potents sobre la nostra plataforma.
A curt termini, pplx-api aixecarà límits de velocitat i oferirà més LLM de Perplexity personalitzats, incloent un LLM impulsat per internet amb connexió a terra per a fets.
Inscriu-te a Perplexity Pro a perplexity.ai/pro. Aconsegueix accés al nostre pplx-api d'avantguarda i aprofita aquestes capacitats avançades en els teus projectes. Descobreix més sobre pplx-api al nostre blog.
T'interessa modelar el futur de la IA? Estem contractant! Forma part d'un equip que impulsa infraestructura LLM generativa a escala massiva. Explora oportunitats a Perplexity Careers.
Autors:
Aarash Heydari, Grigorii Alekseev, Kevin Hu, Denis Yarats