Inteligență artificială
PowerInfer: Servirea rapidă a modelului de limbaj mare cu un GPU de clasă consumator

Din cauza capacităților lor excepționale de creare a conținutului, Modelele Generative de Limbaj Mare sunt acum în fruntea revoluției IA, cu eforturi continue pentru a-și îmbunătăți capacitățile generative. Cu toate acestea, în ciuda progreselor rapide, aceste modele necesită o putere de calcul și resurse substanțiale. Acest lucru se datorează în mare măsură faptului că sunt alcătuite din sute de miliarde de parametri. Mai mult, pentru a funcționa fără întrerupere, modelele de inteligență artificială generativă se bazează pe mii de GPU, ceea ce duce la costuri operaționale semnificative. Cerințele operaționale ridicate sunt unul dintre motivele principale pentru care modelele de inteligență artificială generativă nu sunt încă implementate eficient pe dispozitive personale.
În acest articol, vom discuta despre PowerInfer, un motor de inferență de înaltă viteză pentru modelul de limbaj mare proiectat pentru calculatoare standard alimentate de un singur GPU de clasă consumator. Cadru PowerInfer își propune să exploateze localitatea ridicată inerentă inferenței LLM, caracterizată printr-o distribuție putere-legi în activările neuronilor. Acest lucru înseamnă că, la orice moment dat, un subset mic de neuroni “caldi” sunt în mod constant activi în traversarea intrărilor, în timp ce restul, numiți neuroni “reci”, se activează în funcție de intrări sau cerințe specifice. Acest abordaj permite cadrului PowerInfer să reducă puterea de calcul necesară pentru inteligența artificială generativă pentru a produce ieșiri dorite.
Vom analiza în detaliu cadrul PowerInfer, explorând metodologia, pipeline-ul și rezultatele aplicării practice. Să începem.
PowerInfer: Model de limbaj mare rapid cu GPU de clasă consumator
Modelele Generative de Limbaj Mare, cum ar fi ChatGPT și DALL-E, sunt cunoscute pentru sarcinile lor sofisticate de generare și procesare a limbajului natural. Din cauza cerințelor lor computaționale ridicate, aceste modele sunt de obicei implementate în centre de date cu GPU avansate. Nevoia de o astfel de putere de calcul ridicată limitează implementarea lor la centre de date, subliniind necesitatea de a implementa modele de limbaj mare pe platforme locale mai accesibile, cum ar fi calculatoarele personale.
Creșterea accesibilității modelului de limbaj mare ar putea reduce costurile de inferență și generare a conținutului, îmbunătăți confidențialitatea datelor și permite personalizarea modelului. Mai mult, în timp ce implementările din centrele de date prioritizează debitul ridicat, implementările locale LLM ar putea se concentreze pe latența scăzută din cauza dimensiunilor mai mici ale loturilor.
Cu toate acestea, implementarea acestor modele pe dispozitive locale ridică provocări semnificative din cauza cerințelor lor substanțiale de memorie. Modelele de limbaj mare, care funcționează ca transformatori autoregresivi, generează text token cu token, fiecare token necesitând acces la întregul model, care cuprinde sute de miliarde de parametri. Acest lucru necesită numeroase GPU de înaltă performanță pentru generarea ieșirilor cu latență scăzută. În plus, implementările locale procesează de obicei solicitările individuale în mod secvențial, limitând posibilitatea de procesare paralelă.
Pentru a aborda cerințele complexe de memorie ale cadrului de inteligență artificială generativă, soluțiile existente utilizează metode precum descărcarea modelului și comprimarea. Tehnicile precum distilarea, podarea și cuantificarea reduc dimensiunea modelului, dar sunt încă prea mari pentru GPU-urile standard de clasă consumator din calculatoarele personale. Descărcarea modelului, care partitionează modelul la nivelul stratului Transformer între CPU și GPU, permite procesarea distribuită a straturilor pe memorii CPU și GPU. Cu toate acestea, această metodă este limitată de interconexiunea lentă PCIe și de capacitățile computaționale limitate ale CPU-urilor, ceea ce duce la o latență ridicată a inferenței.
Cadrul PowerInfer susține că discrepanța dintre caracteristicile inferenței LLM și structura hardware-ului este cauza principală a problemelor de memorie în inferența LLM. Ideal, datele accesate frecvent ar trebui stocate în GPU-uri cu lățime de bandă ridicată și capacitate limitată, în timp ce datele accesate mai puțin frecvent ar trebui stocate în CPU-uri cu lățime de bandă scăzută și capacitate ridicată. Cu toate acestea, volumul mare de parametri al fiecărei iterații de inferență LLM face setul de lucru prea mare pentru un singur GPU, ceea ce duce la o exploatare ineficientă a localității.
Procesul de inferență în modelele de limbaj mare demonstrează o localitate ridicată, cu fiecare iterație activând un număr limitat de neuroni. Cadrul PowerInfer își propune să exploateze această localitate, gestionând un număr mic de neuroni “caldi” cu GPU-ul, în timp ce CPU-ul gestionează neuroni “reci”. Acesta preselectează și preîncarcă neuroni “caldi” în GPU și identifică neuroni activați în timpul rulării. Acest abordaj minimizează transferurile costisitoare de date PCIe, permițând GPU-urilor și CPU-urilor să proceseze independent neuroni atribuiți.
Cu toate acestea, implementarea modelului LLM pe dispozitive locale se confruntă cu obstacole. Predictorii online, esențiali pentru identificarea neuronilor activați, consumă o cantitate considerabilă de memorie GPU. Cadrul PowerInfer utilizează o metodă adaptivă pentru a construi predictorii mici pentru straturile cu o distribuție mai mare de activare și sparsitate, menținând acuratețea în timp ce reduce dimensiunea. În plus, cadrurile LLM necesită operatori sparși specializați. Cadrul PowerInfer utilizează operatori sparși conștienți de neuroni care comunică direct cu neuronii, eliminând nevoia de conversie în format dens în timpul rulării.
În cele din urmă, plasarea optimă a neuronilor activați între CPU și GPU este o provocare. Cadrul PowerInfer utilizează o etapă offline pentru a crea o politică de plasare a neuronilor, măsurând impactul fiecărui neuron asupra rezultatelor inferenței LLM și formulând-o ca o problemă liniară întreagă.
Arhitectură și Metodologie
Următoarea figură explică arhitectura cadrului PowerInfer, care constă în componente offline și online în pipeline.

Datorită variației observate în proprietățile de localitate între diferitele modele de limbaj mare, componenta offline profilează sparsitatea de activare a cadrului LLM, permițându-i să diferențieze între neuroni “caldi” și “reci”. Pe de altă parte, în faza offline, două tipuri de neuroni sunt încărcate de motorul de inferență în CPU și GPU, servind astfel solicitărilor LLM în timpul rulării cu latență scăzută.
Faza Offline: Rezolvator de Politici și Profiler LLM
În faza offline, componenta profiler LLM utilizează solicitări derivate dintr-un set de date general pentru a colecta date de activare din procesul de inferență. În primul pas, monitorizează activarea neuronilor în toate straturile cadrului și procedează să utilizeze o componentă de rezolvare a politicii pentru a categorisi neuronii ca fiind “caldi” sau “reci”. Scopul principal al rezolvatorului de politici este de a aloca neuronii activați mai frecvent straturilor GPU, în timp ce alocați restul straturilor CPU. În a doua etapă, componenta de rezolvare a politicii utilizează metrice de impact neuronal și specificații de hardware pentru a echilibra sarcina de lucru între straturi și maximizează metrica de impact a GPU-ului pentru neuroni prin utilizarea programării liniare întregi.
Faza Online: Motor de Inferență LLM Conștient de Neuroni
Odată ce etapa offline este executată cu succes, cadrul procedează să execute faza online. În a treia etapă a procesului, motorul online atribuie neuroni “caldi” și “reci” unităților de procesare respective, în funcție de ieșirea rezolvatorului de politici offline. În timpul rulării, motorul online gestionează calculele GPU-CPU prin crearea de executoare CPU și GPU care sunt fire de execuție pe partea CPU. Motorul prezice apoi neuronii activați și sări peste neuronii neactivați. Neuronii activați sunt apoi preîncărcați în GPU pentru procesare. Între timp, CPU-ul calculează și transferă rezultatele pentru neuronii săi pentru a fi integrate cu GPU-ul. Motorul online se concentrează pe rândurile și coloanele individuale de neuroni din matrice, deoarece utilizează operatori sparși conștienți de neuroni pe CPU și GPU.

Predictori de Sparsitate Adaptivi
Conceptul principal din spatele reducerii sarcinilor computaționale de către motorul de inferență online în cadrul PowerInfer este acela că procesează doar neuronii pe care îi prezice a fi activați. În mod tradițional, în cadrul fiecărui strat Transformer, un cadru utilizează doi predictorii diferiți pentru a prezice activarea neuronilor în blocurile MLP și auto-atentie, ca urmare a faptului că computația de inferență este limitată la neuronii prezisi a fi activi. Cu toate acestea, este dificil să se proiecteze predictorii eficienți pentru implementarea locală, deoarece resursele limitate fac dificilă echilibrarea dimensiunii modelului și a acurateței prezicerii. Deoarece acești predictorii sunt implementați frecvent de cadru pentru a prezice neuronii activi, trebuie stocați în GPU pentru a permite accesul mai rapid. Cu toate acestea, cadrele implementează de obicei un număr mare de predictorii care ocupă o cantitate considerabilă de memorie, chiar și cea necesară pentru a stoca parametrii LLM.
Mai mult, dimensiunea predictorilor este determinată în general de două factori: Înclinația internă și sparsitatea straturilor LLM.

Pentru a optimiza acești factori, cadrul PowerInfer utilizează o metodă de antrenare iterativă pentru fiecare predictor în stratul Transformer fără o dimensiune fixă. În prima etapă a acestei metode de antrenare, dimensiunea modelului de bază este stabilită pe baza profilului de sparsitate al modelului, iar dimensiunea modelului este ajustată iterativ prin luarea în considerare a înclinației interne de activare pentru a menține acuratețea.
Plasarea și Gestionarea Neuronilor
Așa cum s-a menționat anterior, în timp ce componenta de rezolvare a politicii offline determină politica de plasare a neuronilor, componenta motorului de inferență online încarcă modelul în memoria GPU și CPU în conformitate cu politica generată. Pentru fiecare strat care poate sau nu are mai multe matrice de greutate, cadrul PowerInfer atribuie fiecare neuron fie CPU-ului, fie GPU-ului, pe baza faptului că neuronul este activat “cald” sau “rece”. Asigurarea calculului precis al neuronilor segmentați în secvența determinată este esențială pentru rezultate precise. Pentru a aborda acest lucru, cadrul PowerInfer generează două tabele de neuroni: una situată în GPU și una situată în memoria CPU, cu fiecare tabel corelând neuronii individuali cu poziția sa originală în matrice.
Operator Conștient de Neuroni
Având în vedere sparsitatea de activare observată în modelele de limbaj mare, neuronii inactivi și greutățile lor pot fi ocoliți de operațiile de multiplicare a matricelor, ceea ce creează nevoia de a utiliza operatori sparși. În loc să utilizeze operatori sparși care au mai multe limitări, cadrul PowerInfer utilizează operatori conștienți de neuroni care calculează neuronii activați și greutățile lor direct pe GPU și CPU, fără a necesita conversia în format dens în timpul rulării. Operatorii conștienți de neuroni se diferențiază de operatorii sparși tradiționali, deoarece se concentrează pe vectorii de rând și coloană individuali dintr-o singură matrice, în loc să se concentreze pe întreaga matrice.
Politica de Plasare a Neuronilor
Pentru a exploata capacitățile computaționale ale CPU-urilor și GPU-urilor, componenta offline din cadrul PowerInfer generează o politică de plasare care ghidează cadrul atunci când alocă neuroni pentru CPU sau straturile GPU. Componenta de rezolvare a politicii generează această politică și controlează plasarea neuronilor în cadrul fiecărui strat, ceea ce ajută la determinarea sarcinii de lucru computațional pentru unitățile de procesare individuale. Atunci când generează politica de plasare, componenta de rezolvare a politicii ia în considerare factori diferiți, inclusiv frecvența de activare pentru fiecare neuron, suprasarcina de comunicare și capacitățile computaționale, cum ar fi lățimea de bandă și dimensiunea memoriei fiecărei unități de procesare.
Rezultate și Implementare
Pentru a demonstra capacitățile de generalizare ale cadrului PowerInfer pe dispozitive cu configurații hardware diferite, experimentele sunt efectuate pe două calculatoare personale distincte: unul echipat cu procesor Intel i9-13900K, GPU NVIDIA RTX 4090 și 192 GB de memorie gazdă, iar celălalt funcționează pe procesor Intel i7-12700K, GPU NVIDIA RTX 2080Ti și 64 GB de memorie gazdă.
Performanța de la capăt la capăt a cadrului PowerInfer este comparată cu llama.cpp, cu o dimensiune a lotului de 1 și setări de implementare implicită. Cadrul sampilează apoi prompturi din seturile de date ChatGPT și Alpaca, date fiind variabilitatea observată în lungimea intrărilor și ieșirilor de dialog în lumea reală. Următoarea figură demonstrează vitezele de generare pentru diferite modele.

Așa cum se poate observa, cadrul PowerInfer generează 8,32 de tokeni pe secundă și ajunge până la 16 tokeni generați pe secundă, depășind astfel cadrul llama.cpp cu o marjă semnificativă. Mai mult, pe măsură ce numărul de tokeni de ieșire crește, performanța cadrului PowerInfer se îmbunătățește și ea, deoarece faza de generare afectează semnificativ timpul total de inferență.

Mai mult, așa cum se poate observa în imaginea de mai sus, cadrul PowerInfer depășește cadrul llama.cpp pe calculatoarele cu performanță scăzută, cu o rată de generare maximă de 7 tokeni pe secundă și o viteză medie de generare a tokenilor de 5 tokeni pe secundă.

Imaginea de mai sus demonstrează distribuția încărcăturii neuronilor între GPU și CPU pentru cele două cadre. Așa cum se poate vedea, cadrul PowerInfer crește semnificativ cota parte a încărcăturii neuronilor pe GPU, de la 20 la 70%.

Imaginea de mai sus compară performanța celor două cadre pe două calculatoare cu specificații diferite. Așa cum se poate vedea, cadrul PowerInfer oferă în mod constant o viteză ridicată de generare a tokenilor de ieșire în comparație cu cadrul llama.cpp.
Gânduri Finale
În acest articol, am discutat despre PowerInfer, un motor de inferență de înaltă viteză pentru modelul de limbaj mare proiectat pentru calculatoare standard alimentate de un singur GPU de clasă consumator. La nivelul său fundamental, cadrul PowerInfer își propune să exploateze localitatea ridicată inerentă inferenței LLM, o metodă caracterizată prin distribuția putere-legi a activării neuronilor. Cadrul PowerInfer este un sistem de interferență rapid proiectat pentru modele de limbaj mare care utilizează predictorii adaptivi și operatorii conștienți de neuroni pentru a activa neuronii și sparsitatea computațională.












