AI-modellen en platforms

PowerInfer: Snelle Grote Taalmodel met Consumentenklasse GPU

mm
Voeg Unite.AI toe aan je voorkeursbronnen op Google

Vanwege hun uitzonderlijke mogelijkheden voor inhoudscreatie, staan generatieve grote taalmodellen nu aan de vooravond van de AI-revolutie, met voortdurende inspanningen om hun generatieve mogelijkheden te verbeteren. Echter, ondanks snelle vooruitgang, vereisen deze modellen aanzienlijke rekenkracht en middelen. Dit komt grotendeels doordat ze bestaan uit honderden miljarden parameters. Bovendien vertrouwen generatieve AI-modellen op duizenden GPU’s om soepel te functioneren, wat leidt tot aanzienlijke operationele kosten. De hoge operationele eisen zijn een belangrijke reden waarom generatieve AI-modellen nog niet effectief zijn geïmplementeerd op persoonlijke apparaten.

In dit artikel zullen we PowerInfer bespreken, een snelle LLM-inferentie-engine ontworpen voor standaardcomputers met een enkele consumentenklasse GPU. Het PowerInfer-kader streeft ernaar de hoge lokaliteit inherent aan LLM-inferentie te benutten, gekenmerkt door een power-law-verdeling in neuronactivatie. Dit betekent dat op elk moment een kleine subset van ‘hete’ neuronen consistent actief is over inputs, terwijl de rest, genaamd ‘koude’ neuronen, geactiveerd wordt op basis van specifieke inputs of vereisten. Deze aanpak stelt het PowerInfer-kader in staat de benodigde rekenkracht voor generatieve AI te verminderen om gewenste uitvoer te produceren.

We zullen het PowerInfer-kader in detail onderzoeken, waarbij we ingaan op de methodologie, pipeline en praktische toepassingsresultaten. Laten we beginnen.

PowerInfer: Snelle Grote Taalmodel met Consumentenklasse GPU

Generatieve grote taalmodellen, zoals ChatGPT en DALL-E, zijn bekend om hun geavanceerde generatieve en natuurlijke taalverwerkingstaken. Vanwege hun hoge rekenvereisten worden deze modellen meestal geïmplementeerd in datacentra met geavanceerde GPU’s. De behoefte aan zulke hoge rekenkracht beperkt hun implementatie tot datacentra, waardoor de noodzaak ontstaat om grote taalmodellen op meer toegankelijke lokale platforms zoals persoonlijke computers te implementeren.

Het vergroten van de toegankelijkheid van grote taalmodellen kan de kosten voor inferentie en inhoudsgeneratie verlagen, gegevensbescherming verbeteren en het mogelijk maken om modellen aan te passen. Bovendien, terwijl datacenter-implementaties prioriteit geven aan hoge doorvoer, kunnen lokale LLM-implementaties zich richten op lage latentie vanwege kleinere batchgroottes.

Echter, het implementeren van deze modellen op lokale apparaten stelt significante uitdagingen vanwege hun aanzienlijke geheugeneisen. Grote taalmodellen, functionerend als autoregressieve transformatoren, genereren tekst token-voor-token, waarbij elke token toegang vereist tot het hele model, bestaande uit honderden miljarden parameters. Dit vereist talloze high-end GPU’s voor lage-latentie-uitvoerproductie. Bovendien verwerken lokale implementaties meestal individuele verzoeken sequentieel, waardoor de mogelijkheid voor parallelle verwerking beperkt is.

Om de complexe geheugeneisen van het generatieve AI-kader aan te pakken, gebruiken bestaande oplossingen methoden zoals model-offloading en compressie. Technieken zoals distillatie, pruning en quantificatie verminderen de modelgrootte, maar zijn nog steeds te groot voor standaard-GPU’s in persoonlijke computers. Model-offloading, dat het model partitioneert op het transformatorenlaag tussen CPU’s en GPU’s, maakt het mogelijk om verdeelde laagverwerking uit te voeren over CPU- en GPU-geheugen. Echter, deze methode is beperkt door de trage PCIe-interconnectie en de beperkte rekenkracht van CPU’s, waardoor hoge inferentielatentie ontstaat.

Het PowerInfer-kader stelt dat de mismatch tussen LLM-inferentiekarakteristieken en hardwarestructuur de primaire oorzaak is van geheugenproblemen in LLM-inferentie. Ideaal gezien zou gegevens die frequent worden benaderd, opgeslagen moeten worden in high-bandwidth, beperkte-capaciteit GPU’s, terwijl minder frequent benaderde gegevens opgeslagen zouden moeten worden in low-bandwidth, high-capacity CPU’s. Echter, de grote parameterhoeveelheid van elke LLM-inferentie-iteratie maakt de werkset te groot voor een enkele GPU, waardoor een inefficiënte exploitatie van lokaliteit ontstaat.

Het inferentieproces in grote taalmodellen toont hoge lokaliteit, waarbij elke iteratie een beperkt aantal neuronen activeert. Het PowerInfer-kader streeft ernaar deze lokaliteit te benutten door een klein aantal hete neuronen te beheren met de GPU, terwijl de CPU de koude neuronen afhandelt. Het preselecteert en laadt hete neuronen in de GPU en identificeert geactiveerde neuronen tijdens runtime. Deze aanpak minimaliseert kostbare PCIe-gegevensoverdrachten, waardoor GPU’s en CPU’s onafhankelijk hun toegewezen neuronen kunnen verwerken.

Echter, het implementeren van LLM’s op lokale apparaten stuit op obstakels. Online-predictors, cruciaal voor het identificeren van geactiveerde neuronen, consumeren aanzienlijke GPU-geheugen. Het PowerInfer-kader gebruikt een adaptieve methode om kleine predictors te construeren voor lagen met hogere activatie-scheefheid en sparsiteit, waardoor nauwkeurigheid behouden wordt terwijl de grootte wordt verlaagd. Bovendien LLM-kaders vereisen gespecialiseerde sparse-operators. Het PowerInfer-kader gebruikt neuron-aware sparse-operators die direct communiceren met neuronen, waardoor de noodzaak voor specifieke sparse-formaatconversies tijdens runtime wordt geëlimineerd.

Ten slotte is het optimaliseren van de plaatsing van geactiveerde neuronen tussen de CPU en GPU een uitdaging. Het PowerInfer-kader gebruikt een offline-fase om een neuron-plaatsingsbeleid te creëren, waarbij de impact van elke neuron op LLM-inferentie-resultaten wordt gemeten en als een integer lineair probleem wordt gekaderd.

Architectuur en Methodologie

De volgende figuur toont de architectuur van het PowerInfer-kader, bestaande uit offline- en online-componenten in de pipeline. 

Dankzij de variatie in de lokaliteitseigenschappen onder verschillende grote taalmodellen, profileert de offline-component de activatiesparsiteit van het LLM-kader, waardoor het onderscheid kan maken tussen hete en koude neuronen. Aan de andere kant, in de offline-fase, laadt de inferentie-engine twee soorten neuronen in zowel de CPU als de GPU, waardoor LLM-verzoeken tijdens runtime met lage latentie kunnen worden afgehandeld. 

Offline Fase: Beleidsoplosser en LLM-Profiel

In de offline-fase gebruikt een LLM-profielcomponent verzoeken afgeleid van een algemene dataset om activatiegegevens te verzamelen uit het inferentieproces. In de eerste stap, monitort het de activatie van neuronen over alle lagen in het kader en gebruikt vervolgens een beleidsoplossercomponent om de neuronen in te delen in hete en koude neuronen. Het primaire doel van de beleidsoplosser is om neuronen die vaker geactiveerd worden, toe te wijzen aan de GPU-lagen, terwijl de rest wordt toegewezen aan de CPU-lagen. In de tweede stap gebruikt de beleidsoplossercomponent neuron-impactmetrieken en hardware-specificaties om de workload tussen de lagen te balanceren en de impactmetriek van de GPU voor neuronen te maximaliseren door gebruik te maken van integer lineaire programmering. 

Online Fase: Neuron-Aware LLM-Inferentie-Engine

Zodra de offline-fase met succes is uitgevoerd, gaat het kader over tot de uitvoering van de online-fase. In de derde stap van het proces, wijst de online-engine hete en koude neuronen toe aan hun respectievelijke verwerkingseenheden voordat het gebruikersverzoeken verwerkt, afhankelijk van de uitvoer van de offline-beleidsoplosser. Tijdens runtime en in stap 4, beheert de online-engine GPU-CPU-berekeningen door CPU- en GPU-executors te creëren die zijn uitgevoerd op de CPU-kant. De engine voorspelt vervolgens de geactiveerde neuronen en slaat de niet-geactiveerde neuronen over. De geactiveerde neuronen worden vervolgens vooraf geladen in de GPU voor verwerking. Ondertussen berekent de CPU de resultaten voor zijn neuronen om ze te integreren met de GPU. De online-engine kan zich richten op individuele neuron-rijen en -kolommen binnen matrices omdat het gebruik maakt van sparse neuron-aware operators op zowel CPU’s als GPU’s. 

Adaptieve Sparsiteit-Predictors

Het primaire concept achter het reduceren van computationele lasten door de online-inferentie-engine in het PowerInfer-kader is dat het alleen neuronen verwerkt die het voorspelt als geactiveerd. Traditioneel, binnen elke transformatorenlaag, gebruikt een kader twee verschillende predictors om de activatie van neuronen in de MLP- en self-attention-blokken te voorspellen, als gevolg waarvan de inferentieberekening beperkt is tot de neuronen die voorspeld worden als actief. Echter, het is moeilijk om effectieve predictors te ontwerpen voor lokale implementatie, omdat de beperkte hoeveelheid resources het moeilijk maken om de modelgrootte en de voorspellingsnauwkeurigheid in balans te brengen. Aangezien deze predictors frequent worden gebruikt door het kader om actieve neuronen te voorspellen, moeten ze worden opgeslagen in de GPU om snellere toegang mogelijk te maken. Echter, kaders implementeren meestal een groot aantal predictors die aanzienlijk geheugen in beslag nemen, zelfs meer dan nodig is om LLM-parameters op te slaan. 

Bovendien wordt de grootte van predictors meestal bepaald door twee factoren: interne scheefheid en sparsiteit van LLM-lagen. 

Om te optimaliseren voor deze factoren, maakt het PowerInfer-kader gebruik van een iteratieve trainingsmethode voor elke predictor in de transformatorenlaag zonder vaste grootte. In de eerste stap van deze trainingsmethode, wordt de grootte van het baseline-model vastgesteld op basis van het sparsiteitsprofiel van het model, en wordt de modelgrootte iteratief aangepast door interne activatie-scheefheid in overweging te nemen om nauwkeurigheid te behouden. 

Neuron-Plaatsing en -Beheer

Zoals eerder vermeld, terwijl de offline-beleidsoplossercomponent het neuron-plaatsingsbeleid bepaalt, laadt de online-inferentie-enginecomponent het model in het GPU- en CPU-geheugen op basis van het gegenereerde beleid. Voor elke laag die al dan niet meerdere gewichtsmatrices kan hebben, wijst het PowerInfer-kader elke neuron toe aan de CPU of de GPU op basis van of de neuron hot-geactiveerd is. Het garanderen van nauwkeurige berekening van gesegmenteerde neuronen in de bepaalde volgorde is essentieel voor nauwkeurige resultaten. Om dit aan te pakken, genereert het PowerInfer-kader twee neurontabellen: een in de GPU en een in het CPU-geheugen, waarbij elke tabel individuele neuronen correleert met hun oorspronkelijke positie in de matrix. 

Neuron-Aware Operator

Gezien de activatiesparsiteit die wordt waargenomen in grote taalmodellen, kunnen inactieve neuronen en hun gewichten worden overgeslagen door matrixvermenigvuldigingsoperaties, waardoor de noodzaak ontstaat om sparse-operators te gebruiken. In plaats van het gebruik van sparse-operators met verschillende beperkingen, gebruikt het PowerInfer-kader neuron-aware operators die rechtstreeks geactiveerde neuronen en hun gewichten berekenen op de GPU en CPU zonder dat conversie naar een dichte formaat nodig is tijdens runtime. De neuron-aware operators verschillen van traditionele sparse-operators doordat ze zich richten op individuele rij- en kolomvectoren binnen een enkele matrix, in plaats van zich te richten op de hele matrix. 

Neuron-Plaatsingsbeleid

Om de computationele mogelijkheden van CPU’s en GPU’s te benutten, genereert de offline-component in het PowerInfer-kader een plaatsingsbeleid dat het kader leidt bij het toewijzen van neuronen aan de CPU- of GPU-lagen. De beleidsoplosser genereert dit beleid en controleert neuron-plaatsing binnen elke laag, waardoor de computationele workload voor individuele verwerkingseenheden wordt bepaald. Wanneer het plaatsingsbeleid wordt gegenereerd, houdt de beleidsoplossercomponent rekening met verschillende factoren, waaronder de activatiefrequentie voor elke neuron, de communicatie-overhead en de computationele mogelijkheden zoals bandbreedtes en geheugengrootte van elke verwerkingseenheid. 

Resultaten en Implementatie

Om de generalisatiecapaciteiten van het PowerInfer-kader aan te tonen over apparaten met verschillende hardwareconfiguraties, worden de experimenten uitgevoerd op twee verschillende persoonlijke computers: een uitgerust met een Intel (INTC ) i9-13900K-processor, NVIDIA RTX 4090-GPU en 192 GB hostgeheugen, terwijl de andere werkt op een Intel i7-12700K-processor, NVIDIA RTX 2080Ti-GPU en 64 GB hostgeheugen. 

De eind-tot-eind-prestaties van het PowerInfer-kader worden vergeleken met llama.cpp met een batchgrootte van 1 en standaardimplementatie-instellingen. Het kader neemt vervolgens prompts uit ChatGPT- en Alpaca-datasets, gegeven de lengtevariabiliteit die wordt waargenomen in real-world dialooginput en -output. De volgende figuur toont de generatiesnelheden voor verschillende modellen. 

Zoals te zien is, genereert het PowerInfer-kader 8,32 tokens per seconde en bereikt tot 16 tokens per seconde, waardoor het de llama.cpp-framework aanzienlijk overtreft. Bovendien, naarmate het aantal uitvoertokens toeneemt, verbetert de prestatie van het PowerInfer-kader ook, aangezien de generatiefase de totale inferentietijd aanzienlijk beïnvloedt. 

Bovendien, zoals te zien is in de bovenstaande afbeelding, overtreft het PowerInfer-kader de llama.cpp-framework op lage PCs met een piekgeneratiesnelheid van 7 tokens per seconde en een gemiddelde token-generatiesnelheid van 5 tokens per seconde. 

De bovenstaande afbeelding toont de distributie van neuron-laden tussen de GPU en CPU voor de twee kaders. Zoals te zien is, verhoogt het PowerInfer-kader het aandeel van de neuron-laden van de GPU aanzienlijk, van 20 tot 70 %. 

De bovenstaande afbeelding vergelijkt de prestaties van de twee kaders op twee PCs met verschillende specificaties. Zoals te zien is, levert het PowerInfer-kader consistent een hoge uitvoertoken-generatiesnelheid ten opzichte van de llama.cpp-framework. 

Slotbeschouwing

In dit artikel hebben we het over PowerInfer gehad, een snelle LLM-inferentie-engine voor een standaardcomputer met een enkele consumentenklasse GPU. Het PowerInfer-kader streeft ernaar de hoge lokaliteit inherent aan LLM-inferentie te benutten, een methode gekenmerkt door een power-law-verdeling in neuronactivatie. Het PowerInfer-kader is een snelle interferentiesysteem ontworpen voor grote taalmodellen dat gebruik maakt van adaptieve predictors en neuron-aware operators om neuronen te activeren en computationele sparsiteit te bereiken. 

Een ingenieur van beroep, een schrijver van hart. Kunal is een technisch schrijver met een diepe liefde en begrip voor AI en ML, toegewijd aan het vereenvoudigen van complexe concepten in deze gebieden door middel van zijn boeiende en informatieve documentatie.