AI-modeller och plattformar

PowerInfer: Snabb Stor Språkmodell med Konsumentklassens GPU

mm
Lägg till Unite.AI bland dina föredragna källor på Google

På grund av deras exceptionella innehållsskapande förmågor är generativa stora språkmodeller nu i framkant av AI-revolutionen, med pågående ansträngningar för att förbättra deras generativa förmågor. Men trots snabba framsteg kräver dessa modeller betydande beräkningskraft och resurser. Detta beror till stor del på att de består av hundratals miljarder parametrar. Dessutom kräver generativa AI-modeller tusentals GPU:er för att fungera smidigt, vilket leder till betydande driftskostnader. De höga driftskraven är en viktig anledning till varför generativa AI-modeller ännu inte är effektivt distribuerade på personliga enheter.

I den här artikeln kommer vi att diskutera PowerInfer, en höghastighets-LLM-inferensmotor som är utformad för standarddatorer med en enda konsumentklassens GPU. PowerInfer-ramverket syftar till att utnyttja den höga lokaliteten som är inneboende i LLM-inferens, som kännetecknas av en power-lag-distribution i neuronnaktivitet. Detta innebär att vid varje given tidpunkt är en liten uppsättning “heta” neuroner konsekvent aktiva över ingångar, medan resten, som kallas “kalla” neuroner, aktiveras baserat på specifika ingångar eller krav. Detta tillvägagångssätt möjliggör för PowerInfer-ramverket att minska den beräkningskraft som behövs för generativ AI för att producera önskade utdata.

Vi kommer att gå in på djupet i PowerInfer-ramverket, undersöka dess metodik, pipeline och praktiska tillämpningsresultat. Låt oss börja.

PowerInfer: Snabb Stor Språkmodell med Konsumentklassens GPU

Generativa stora språkmodeller, som ChatGPT och DALL-E, är kända för sina sofistikerade generativa och naturliga språkbehandlingsuppgifter. På grund av deras höga beräkningskrav distribueras dessa modeller vanligtvis i datacenter med avancerade GPU:er. Behovet av sådan hög beräkningskraft begränsar deras distribution till datacenter, vilket betonar behovet av att distribuera stora språkmodeller på mer tillgängliga lokala plattformar som persondatorer.

Att öka tillgängligheten för stora språkmodeller kunde minska inferens- och innehållsgenereringskostnader, förbättra dataskydd och tillåta modellanpassning. Dessutom, medan datacenterdistributioner prioriterar hög genomströmning, kunde lokala LLM-distributioner fokusera på låg latens på grund av mindre batchstorlekar.

Men att distribuera dessa modeller på lokala enheter utgör betydande utmaningar på grund av deras omfattande minneskrav. Stora språkmodeller, som fungerar som autoregressiva transformer, genererar text token för token, med varje token som kräver åtkomst till hela modellen, som består av hundratals miljarder parametrar. Detta kräver många högkvalitativa GPU:er för låglatensutdata. Dessutom bearbetar lokala distributioner vanligtvis enskilda förfrågningar sekventiellt, vilket begränsar möjligheterna till parallellbearbetning.

För att hantera de komplexa minneskraven för det generativa AI-ramverket använder befintliga lösningar metoder som modellavlastning och komprimering. Tekniker som destillering, beskärning och kvantifiering minskar modellstorleken men är fortfarande för stora för standard-GPU:er i persondatorer. Modellavlastning, som partitionerar modellen vid transformerlagret mellan CPU och GPU, möjliggör distribuerad lagerbearbetning över CPU- och GPU-minne. Men denna metod är begränsad av den långsamma PCIe-anslutningen och CPU:ernas begränsade beräkningsförmåga, vilket leder till hög inferenslatens.

PowerInfer-ramverket hävdar att missmatchningen mellan LLM-inferensegenskaper och maskinvaruarkitektur är den primära orsaken till minnesproblem i LLM-inferens. Idealiskt bör data som åtkomms ofta lagras i höghastighets-, begränsad-kapacitets-GPU:er, medan mindre ofta åtkommda data bör lagras i låghastighets-, högkapacitets-CPU:er. Men den stora parametrervolymen för varje LLM-inferensiteration gör arbetsuppsättningen för stor för en enda GPU, vilket resulterar i ineffektiv exploatering av lokalitet.

Inferensprocessen i stora språkmodeller visar hög lokalitet, med varje iteration som aktiverar ett begränsat antal neuroner. PowerInfer-ramverket syftar till att utnyttja denna lokalitet genom att hantera ett litet antal heta neuroner med GPU:n, medan CPU:n hanterar kalla neuroner. Det förvalar och förinläser heta neuroner i GPU:n och identifierar aktiverade neuroner under körning. Detta tillvägagångssätt minskar dyra PCIe-dataöverföringar, vilket möjliggör för GPU:er och CPU:er att oberoende bearbeta sina tilldelade neuroner.

Men att distribuera LLM:er på lokala enheter möter hinder. Online-prediktorer, som är avgörande för att identifiera aktiva neuroner, konsumerar betydande GPU-minne. PowerInfer-ramverket använder en adaptiv metod för att konstruera små prediktorer för lager med högre aktiveringslutning och sparsitet, samtidigt som noggrannheten upprätthålls och storleken minskas. Dessutom LLM-ramverk kräver specialiserade sparse-operators. PowerInfer-ramverket använder neuronnmedvetna sparse-operators som kommunicerar direkt med neuroner, vilket eliminerar behovet av specifika sparse-formatkonverteringar under körning.

Till sist är det en utmaning att placera aktiverade neuroner optimalt mellan CPU och GPU. PowerInfer-ramverket använder en offline-fas för att skapa en neuronnplaceringpolicy, som mäter varje neurons inverkan på LLM-inferensresultat och ramverket som ett heltalslinjärt problem.

Arkitektur och Metodik

Följande figur förklarar arkitekturen för PowerInfer-ramverket, som består av offline- och onlinekomponenter i pipelinen. 

Tack vare variationen i lokalitetsegenskaper bland olika stora språkmodeller, profilerar den offline-komponenten aktiveringsparsiteten för LLM-ramverket, vilket möjliggör differentiering mellan heta och kalla neuroner. Å andra sidan, i offline-fasen, laddar inferensmotorn två typer av neuroner i både CPU och GPU, vilket möjliggör LLM-förfrågningar under körning med låg latens. 

Offline-fas: Policy-lösare och LLM-profilerare

I offline-fasen använder en LLM-profileringskomponent förfrågningar som hämtats från en allmän dataset för att samla in aktiveringsdata från inferensprocessen. I det första steget övervakar den aktiveringen av neuroner över alla lager i ramverket och använder sedan en policy-lösarkomponent för att kategorisera neuronerna som antingen heta eller kalla. Det primära syftet med policy-lösaren är att allokera neuroner som aktiveras oftare till GPU-lagren, medan resten allokeras till CPU-lagren. I det andra steget använder policy-lösarkomponenten neuronpåverkansmått och maskinvaruspecifikationer för att balansera arbetsbelastningen mellan lagren och maximera GPU:ns påverkansmått för neuroner med hjälp av heltalslinjär programmering. 

Online-fas: Neuronnmedveten LLM-inferensmotor

När offline-fasen har utförts framgångsrikt fortsätter ramverket med att utföra online-fasen. I det tredje steget i processen tilldelar online-motorn heta och kalla neuroner till sina respektive bearbetningsenheter innan den bearbetar användarförfrågningar, beroende på utdata från offline-policy-lösaren. Under körning och i det fjärde steget hanterar online-motorn GPU-CPU-beräkningar genom att skapa CPU- och GPU-exekverare som är trådar som körs på CPU-sidan. Motorn förutsäger sedan aktiverade neuroner och hoppar över icke-aktiverade neuroner. De aktiverade neuronerna förinläses sedan i GPU:n för bearbetning. Samtidigt beräknar CPU:n och överför resultaten för sina neuroner för att integreras med GPU:n. Online-motorn kan fokusera på enskilda neurons rader och kolumner inom matriser eftersom den använder sparse neuronnmedvetna operatorer på både CPU och GPU. 

Adaptiva Sparsitetsprediktorer

Den primära konceptet bakom att minska beräkningsbelastningar med online-inferensmotorn i PowerInfer-ramverket är att den endast bearbetar neuroner som den förutsäger kommer att aktiveras. Traditionellt använder varje transformerlager två olika prediktorer för att förutsäga aktiveringen av neuroner i MLP- och självuppmärksamhetsblocken, vilket begränsar inferensberäkningen till de neuroner som förutsägs vara aktiva. Men det är svårt att utforma effektiva prediktorer för lokal distribution eftersom de begränsade resurserna gör det svårt att balansera modellstorleken och förutsägelseexaktheten. Eftersom dessa prediktorer deployeras av ramverket ofta för att förutsäga aktiva neuroner måste de lagras i GPU:n för att möjliggöra snabb åtkomst. Men ramverk deployerar vanligtvis ett stort antal prediktorer som upptar betydande minne, även det som behövs för att lagra LLM-parametrar. 

Dessutom bestäms storleken på prediktorerna vanligtvis av två faktorer: Intern lutning och sparsitet hos LLM-lagren. 

För att optimera för dessa faktorer använder PowerInfer-ramverket en iterativ träningsmetod för varje prediktor i transformerlagret utan fast storlek. I det första steget i denna träningsmetod etableras storleken på baseline-modellen baserat på sparsitetsprofilen för modellen, och modellens storlek justeras iterativt genom att ta hänsyn till intern aktiveringslutning för att upprätthålla exakthet. 

Neuronnplacering och Hantering

Som nämnts tidigare, medan den offline-policy-lösarkomponenten bestämmer neuronnplaceringen, laddar online-inferensmotorn modellen i GPU- och CPU-minnet enligt den genererade policyn. För varje lager som kan ha flera viktmatriker tilldelar PowerInfer-ramverket varje neuron antingen till CPU eller GPU baserat på om neuron är het-aktiverad. Att säkerställa exakt beräkning av segmenterade neuroner i den bestämda sekvensen är avgörande för precisa resultat. För att hantera detta genererar PowerInfer-ramverket två neurontabeller: en i GPU-minnet och en i CPU-minnet, med varje tabell som korrelerar enskilda neuroner till deras ursprungliga position i matrisen. 

Neuronnmedveten Operator

Med tanke på aktiveringsparsiteten som observeras i stora språkmodeller kan inaktiva neuroner och deras vikter kringgås av matrismultiplikationsoperationer, vilket skapar ett behov av att använda sparse-operators. Istället för att använda sparse-operators som har flera begränsningar använder PowerInfer-ramverket neuronnmedvetna operatorer som beräknar aktiverade neuroner och deras vikter direkt på GPU och CPU utan att kräva konvertering till tät format under körning. Neuronnmedvetna operatorer skiljer sig från traditionella sparse-operators eftersom de fokuserar på enskilda rad- och kolumnevektorer inom en enda matris snarare än att fokusera på hela matrisen. 

Neuronnplaceringpolicy

För att utnyttja beräkningsförmågorna hos CPU och GPU genererar den offline-komponenten i PowerInfer-ramverket en placeringpolicy som vägleder ramverket när det tilldelar neuroner till antingen CPU eller GPU-lagren. Policy-lösaren genererar denna policy och kontrollerar neuronnplacering inom varje lager, vilket hjälper till att bestämma den beräkningsmässiga arbetsbelastningen för varje bearbetningsenhet. När policy-lösaren genererar placeringpolicyn tar den hänsyn till olika faktorer, inklusive aktiveringsfrekvensen för varje neuron, kommunikationsöverföringen och beräkningsförmågorna, som bandbredder och minnesstorlek, för varje bearbetningsenhet. 

Resultat och Implementering

För att demonstrera den allmänna förmågan hos PowerInfer-ramverket över enheter med olika maskinvarukonfigurationer genomförs experimenten på två distinkta persondatorer: en utrustad med Intel (INTC ) i9-13900K-processor, NVIDIA RTX 4090-GPU och 192 GB värdminne, medan den andra drivs av Intel i7-12700K-processor, NVIDIA RTX 2080Ti-GPU och 64 GB värdminne. 

Slut-till-slut-prestandan för PowerInfer-ramverket jämförs mot llama.cpp med en batchstorlek på 1 och standarddistributioninställningar. Ramverket provar sedan förfrågningar från ChatGPT- och Alpacadatamängder med hänsyn till längdvariationen i realtidsdialogin- och utdatamängder. Följande figur visar generationshastigheterna för olika modeller. 

Som kan observeras genererar PowerInfer-ramverket 8,32 token per sekund och når upp till 16 token genererade per sekund, vilket överträffar llama.cpp-ramverket med en betydande marginal. Dessutom, när antalet utdatatoken ökar, förbättras också prestandan för PowerInfer-ramverket, eftersom generationsfasen påverkar den totala inferenstiden betydligt. 

Dessutom, som kan observeras i ovanstående bild, överträffar PowerInfer-ramverket llama.cpp-ramverket på lågkvalitativa datorer med en toppgenereringshastighet på 7 token per sekund och en genomsnittlig token-genereringshastighet på 5 token per sekund. 

Ovanstående bild visar fördelningen av neuronbelastningar mellan GPU och CPU för de två ramverken. Som kan ses ökar PowerInfer-ramverket GPU:ns andel av neuronbelastning betydligt, från 20 till 70 %. 

Ovanstående bild jämför prestandan för de två ramverken på två datorer med olika specifikationer. Som kan ses levererar PowerInfer-ramverket konsekvent en hög utdatatoken-genereringshastighet jämfört med llama.cpp-ramverket. 

Slutliga Tankar

I den här artikeln har vi talat om PowerInfer, en höghastighets-LLM-inferensmotor för en standarddator med en enda konsumentklassens GPU. I dess kärna försöker PowerInfer-ramverket utnyttja den höga lokaliteten som är inneboende i LLM-inferens, en metod som kännetecknas av en power-lag-distribution i neuronnaktivitet. PowerInfer-ramverket är ett snabbt störningssystem utformat för stora språkmodeller som använder adaptiva prediktorer och neuronnmedvetna operatorer för att aktivera neuronerna och den beräkningsmässiga sparsiteten. 

En ingenjör till yrket, en författare av hjärtat. Kunal är en teknisk skribent med ett djupt kärlek och förståelse för AI och ML, dedikerad till att förenkla komplexa begrepp inom dessa områden genom sin engagerande och informativa dokumentation.