Modele și platforme AI

PowerInfer: Motor de inferență rapid pentru modele de limbaj mari cu GPU de consum

mm
Adaugă Unite.AI la sursele tale preferate pe Google

Datorită capacităților lor excepționale de creare de conținut, modelele de limbaj mari generative sunt acum în fruntea revoluției inteligenței artificiale, 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ă acestea sunt alcătuite din sute de miliarde de parametri. Mai mult, pentru a funcționa corect, 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 principalele motive 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 mare viteză pentru modele de limbaj mari proiectat pentru calculatoare standard alimentate de un singur GPU de consum. Framework-ul PowerInfer își propune să exploateze localitatea ridicată inerentă inferenței în modelele de limbaj mari, caracterizată printr-o distribuție cu lege de putere în activarea neuronilor. Acest lucru înseamnă că, la un moment dat, un subset mic de neuroni “caldi” sunt activați constant pe parcursul intrărilor, în timp ce restul, denumiți neuroni “reci”, se activează în funcție de intrările sau cerințele specifice. Acest abordare permite framework-ului PowerInfer să reducă puterea de calcul necesară pentru inteligența artificială generativă pentru a produce ieșiri dorite.

Vom explora în detaliu framework-ul PowerInfer, examinând metodologia, pipeline-ul și rezultatele aplicării practice. Să începem.

PowerInfer: Motor de inferență rapid pentru modele de limbaj mari cu GPU de consum

Modelele de limbaj mari generative, cum ar fi ChatGPT și DALL-E, sunt cunoscute pentru sarcinile lor sofisticate de generare și prelucrare a limbajului natural. Din cauza cerințelor lor ridicate de calcul, aceste modele sunt de obicei implementate în centre de date cu GPU avansate. Nevoia unei astfel de puteri de calcul ridicate limitează implementarea lor la centre de date, subliniind necesitatea de a implementa modele de limbaj mari pe platforme locale mai accesibile, cum ar fi calculatoarele personale.

Creșterea accesibilității modelelor de limbaj mari ar putea reduce costurile de inferență și generare de conținut, îmbunătăți confidențialitatea datelor și permite personalizarea modelului. Mai mult, în timp ce implementările în centre de date prioritizează debitul ridicat, implementările locale de modele de limbaj mari pot se concentreze pe latență 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 mari, 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ă în general solicitările individuale în mod secvențial, limitând posibilitatea de procesare paralelă.

Pentru a aborda cerințele complexe de memorie ale framework-ului de inteligență artificială generativă, soluțiile existente utilizează metode precum offloadarea modelului și comprimarea. Tehnici precum distilarea, reducerea și cuantificarea reduc dimensiunea modelului, dar sunt încă prea mari pentru GPU-urile standard de consum de pe calculatoarele personale. Offloadarea modelului, care partitionează modelul la nivelul stratului de transformare între CPU și GPU, permite procesarea distribuită a straturilor pe memorie 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ă de inferență.

Framework-ul PowerInfer susține că discrepanța dintre caracteristicile inferenței modelelor de limbaj mari și structura hardware-ului este cauza principală a problemelor de memorie în inferența modelelor de limbaj mari. Ideal, datele accesate frecvent ar trebui să fie stocate în GPU-uri cu lățime de bandă ridicată și capacitate limitată, în timp ce datele mai puțin accesate ar trebui să fie în CPU-uri cu lățime de bandă scăzută și capacitate ridicată. Cu toate acestea, volumul mare de parametri ai fiecărei iterații de inferență a modelului de limbaj mare face ca setul de lucru să fie prea mare pentru un singur GPU, ceea ce duce la o exploatare ineficientă a localității.

Procesul de inferență în modelele de limbaj mari arată o localitate ridicată, cu fiecare iterație activând un număr limitat de neuroni. Framework-ul PowerInfer își propune să exploateze această localitate prin gestionarea unui număr mic de neuroni “caldi” cu GPU-ul, în timp ce CPU-ul gestionează neuroni “reci”. Acesta preselecționează și preîncarcă neuroni “caldi” în GPU și identifică neuroni activați în timpul rulării. Acest abordare minimizează transferurile costisitoare de date PCIe, permițând GPU-urilor și CPU-urilor să proceseze independent neuroni asignați.

Cu toate acestea, implementarea modelelor de limbaj mari pe dispozitive locale se confruntă cu obstacole. Predictorii online, esențiali pentru identificarea neuronilor activați, consumă o cantitate considerabilă de memorie GPU. Framework-ul 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, framework-urile de modele de limbaj mari necesită operatori sparsă specializați. Framework-ul PowerInfer utilizează operatori sparsă conștienți de neuroni care comunică direct cu neuroni, eliminând nevoia de conversie la format dens în timpul rulării.

În cele din urmă, plasarea optimă a neuronilor activați între CPU și GPU este o provocare. Framework-ul 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 modelelor de limbaj mari și formulându-l ca o problemă liniară de întregi.

Arhitectură și Metodologie

Următoarea figură explică arhitectura framework-ului PowerInfer, care constă în componente offline și online în pipeline. 

Datorită variației observate în proprietățile de localitate între diferite modele de limbaj mari, componenta offline a framework-ului profilează sparsitatea de activare a modelului de limbaj mare, 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 de model de limbaj mare în timpul rulării cu latență scăzută. 

Faza Offline: Rezolvator de Politici și Profiler de Modele de Limbaj Mare

În faza offline, componenta profiler de model de limbaj mare utilizează solicitări derivate dintr-un set de date general pentru a colecta date de activare din procesul de inferență. În primul pas, acesta monitorizează activarea neuronilor în toate straturile framework-ului și procedează să utilizeze un rezolvator de politici pentru a categorisi neuroni ca “caldi” sau “reci”. Obiectivul principal al rezolvatorului de politici este de a aloca neuroni activați mai frecvent în straturile GPU, în timp ce alocați restul în straturile CPU. În a doua etapă, componenta rezolvator de politici utilizează metrice de impact de neuroni și specificații de hardware pentru a echilibra sarcina de lucru între straturi, maximizând metrica de impact a GPU-ului pentru neuroni prin utilizarea programării liniare de întregi. 

Faza Online: Motor de Inferență conștient de Neuroni pentru Modele de Limbaj Mare

Odată ce etapa offline este executată cu succes, framework-ul procedează să execute faza online. În a treia etapă a procesului, motorul online atribuie neuroni “caldi” și “reci” unităților de procesare respective înainte de a procesa solicitările utilizatorului, î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 care rulează pe partea CPU. Motorul procedează să prevadă neuroni activați și să sară peste neuroni neactivați. Neuronii activați sunt apoi preîncărcați în GPU pentru procesare. Între timp, CPU-ul calculează și transferă rezultatele pentru neuroni săi pentru a fi integrate cu GPU-ul. Motorul online poate se concentra pe rânduri și coloane individuale de neuroni în interiorul matricelor, deoarece utilizează operatori sparsă conștienți de neuroni pe CPU și GPU. 

Predictori de Sparsitate Adaptivi

Conceptul principal din spatele reducerii sarcinilor de calcul prin inferența online a motorului PowerInfer este acela că acesta procesează doar neuroni pe care îi prevăd a fi activați. În mod tradițional, în cadrul fiecărui strat de transformare, un framework utilizează doi predictorii diferiți pentru a prevedea activarea neuronilor în blocurile MLP și auto-atentie, ca urmare a cărora computația inferenței este limitată la neuroni previsați a fi activi. Cu toate acestea, este dificil să se proiecteze predictorii eficienți pentru implementarea locală, deoarece cantitatea limitată de resurse face dificilă echilibrarea dimensiunii modelului și acurateței previziunii. Deoarece acești predictorii sunt implementați frecvent de framework pentru a prevedea neuroni activați, aceștia trebuie să fie stocați în GPU pentru a permite accesul rapid. Cu toate acestea, framework-urile implementează în general un număr mare de predictorii care ocupă o cantitate considerabilă de memorie, chiar și cea necesară pentru a stoca parametrii modelului de limbaj mare. 

Mai mult, dimensiunea predictorilor este determinată în general de doi factori: Înclinația internă și Sparsitatea straturilor de modele de limbaj mare. 

Pentru a optimiza acești factori, framework-ul PowerInfer utilizează o metodă de antrenament iterativ pentru fiecare predictor în stratul de transformare, fără o dimensiune fixă. În prima etapă a acestei metode de antrenament, dimensiunea modelului de bază este stabilită pe baza profilului de sparsitate al modelului, iar dimensiunea modelului este ajustată iterativ, ținând cont de înclinația internă de activare pentru a menține acuratețea. 

Plasarea și Managementul Neuronilor

Așa cum s-a menționat anterior, în timp ce componenta rezolvator de politici 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 avea sau nu multiple matrice de greutate, framework-ul PowerInfer atribuie fiecare neuron fie CPU-ului, fie GPU-ului, în funcție de faptul 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, framework-ul PowerInfer generează două tabele de neuroni: una situată în memoria GPU și una situată în memoria CPU, fiecare tabel corelând individuali neuroni cu poziția lor originală în matrice. 

Operator conștient de Neuroni

Având în vedere sparsitatea de activare observată în modelele de limbaj mari, 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 sparsă. În loc să utilizeze operatori sparsă cu limitări, framework-ul 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 la format dens în timpul rulării. Operatorii conștienți de neuroni se diferențiază de operatorii sparsă tradiționali, deoarece se concentrează pe vectori de rând și coloană individuali în interiorul unei singure matrice, în loc să se concentreze pe întreaga matrice. 

Politica de Plasare a Neuronilor

Pentru a exploata capacitățile de calcul ale CPU-urilor și GPU-urilor, componenta offline a framework-ului PowerInfer generează o politică de plasare care ghidă framework-ul atunci când alocă neuroni fie CPU-ului, fie GPU-ului. Rezolvatorul de politici generează această politică și controlează plasarea neuronilor în fiecare strat, ceea ce ajută la determinarea sarcinii de lucru computaționale pentru unitățile de procesare individuale. Atunci când generează politica de plasare, componenta rezolvator de politici ia în considerare diverse factori, 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 framework-ului PowerInfer pe dispozitive cu configurații de hardware diferite, experimentele sunt efectuate pe două calculatoare personale distincte: unul echipat cu procesor Intel (INTC ) i9-13900K, GPU NVIDIA RTX 4090 și 192 GB de memorie host, iar celălalt rulează pe procesor Intel i7-12700K, GPU NVIDIA RTX 2080Ti și 64 GB de memorie host. 

Performanța de la capăt la capăt a framework-ului PowerInfer este comparată cu llama.cpp, cu o dimensiune a lotului de 1 și setări de implementare implicită. Framework-ul sampilează apoi prompturi din seturile de date ChatGPT și Alpaca, date fiind variabilitățile de lungime observate în intrările și ieșirile de dialog din lumea reală. Următoarea figură demonstrează vitezele de generare pentru diferite modele. 

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

Mai mult, așa cum se poate observa în imaginea de mai sus, framework-ul PowerInfer depășește framework-ul llama.cpp pe calculatoare 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 de neuroni între GPU și CPU pentru cele două framework-uri. Așa cum se poate vedea, framework-ul PowerInfer crește semnificativ cota de încărcătură a neuronilor pe GPU, de la 20 la 70%. 

Imaginea de mai sus compară performanța celor două framework-uri pe două calculatoare cu specificații diferite. Așa cum se poate vedea, framework-ul PowerInfer livrează constant o viteză ridicată de generare a tokenilor de ieșire în comparație cu framework-ul llama.cpp. 

Gânduri Finale

În acest articol, am discutat despre PowerInfer, un motor de inferență de mare viteză pentru modele de limbaj mari proiectat pentru calculatoare standard alimentate de un singur GPU de consum. La nucleul său, framework-ul PowerInfer își propune să exploateze localitatea ridicată inerentă inferenței în modelele de limbaj mari, o metodă caracterizată printr-o distribuție cu lege de putere în activarea neuronilor. Framework-ul PowerInfer este un sistem rapid de interferență proiectat pentru modele de limbaj mari, care utilizează predictorii adaptivi și operatorii conștienți de neuroni pentru a activa neuronii și a reduce sarcinile de calcul. 

"Un inginer de profesie, un scriitor din inimă". Kunal este un scriitor tehnic cu o dragoste și o înțelegere profundă a inteligenței artificiale și a învățării automate, dedicat simplificării conceptelor complexe din aceste domenii prin documentația sa captivantă și informativă.