Connect with us

Artificiell intelligens

LoRa, QLoRA och QA-LoRA: Effektiv anpassning i stora språkmodeller genom låg-rankmatrisfaktorisering

mm
LoRA : Low-Rank Adaptation of Large Language Models

Stora språkmodeller (LLM) har skapat en unik nisch och erbjuder en obruten förmåga att förstå och generera mänskligt språk. Styrkan i LLM ligger i deras enorma storlek, ofta med miljarder parametrar. Medan denna enorma skala bränslar deras prestanda, föder den samtidigt utmaningar, särskilt när det gäller modellanpassning för specifika uppgifter eller domäner. De konventionella vägarna för att hantera LLM, som att finjustera alla parametrar, presenterar en tung beräknings- och finansiell börda, och utgör därmed ett betydande hinder för deras breda antagande i verkliga tillämpningar.

I en tidigare artikel gick vi igenom finjustering av stora språkmodeller (LLM) för att anpassa dem till specifika krav. Vi utforskade olika finjusteringsmetoder, såsom instruktionsbaserad finjustering, enkeltuppgiftsfinjustering och parameter-effektiv finjustering (PEFT), var och en med sin unika tillvägagångssätt för att optimera LLM för olika uppgifter. Centralt för diskussionen var transformer-arkitekturen, ryggraden i LLM, och de utmaningar som följde med de beräknings- och minneskraven för att hantera ett stort antal parametrar under finjustering.

Parametrar i LLM

https://huggingface.co/blog/hf-bitsandbytes-integration

Bilden ovan representerar storleken på olika stora språkmodeller, sorterade efter antalet parametrar. Noterbart: PaLM, BLOOM, etc.

Som det ser ut i år har det skett framsteg som lett till ännu större modeller. Men att justera sådana enorma, öppen källkodsmodeller på standard-system är inte genomförbart utan specialiserade optimeringstekniker.

Låg-rankanpassning (LoRA) introducerades av Microsoft i denna artikel, i syfte att mildra dessa utmaningar och göra LLM mer tillgängliga och anpassningsbara.

Kärnan i LoRA ligger i dess tillvägagångssätt för modellanpassning utan att gå in på detaljerna i omträning av hela modellen. Till skillnad från traditionell finjustering, där varje parameter är föremål för ändring, använder LoRA en smartare väg. Den fryser de förtränade modellvikterna och introducerar tränbara låg-rankmatriser i varje lager av transformer-arkitekturen. Detta tillvägagångssätt minskar drastiskt antalet tränbara parametrar, vilket säkerställer en mer effektiv anpassningsprocess.

Utvecklingen av LLM-justeringsstrategier

När man ser tillbaka på resan för LLM-justering kan man identifiera flera strategier som praktiker har använt sig av genom åren. Initialt låg fokus på finjustering av förtränade modeller, en strategi som innebär en omfattande ändring av modellparametrar för att passa den specifika uppgiften. Men när modellerna växte i storlek och komplexitet, ökade också de beräkningsmässiga kraven på detta tillvägagångssätt.

Nästa strategi som fick uppmärksamhet var deljustering, en mer återhållsam version av sin föregångare. Här justeras endast en delmängd av modellens parametrar, vilket minskar den beräkningsmässiga bördan något. Trots dess förtjänster kunde deljustering inte hänga med i tillväxten av LLM-storlek.

När praktiker sökte efter effektivare vägar uppstod fullständig finjustering som en rigorös men belönande strategi.

Introduktion till LoRA

Rangen för en matris ger oss en inblick i dimensionerna som skapas av dess kolumner, vilket bestäms av antalet unika rader eller kolumner den har.

  • Full-rankmatris: Dess rang matchar det mindre antalet mellan dess rader eller kolumner.
  • Låg-rankmatris: Med en rang som är betydligt mindre än både dess rad- och kolumnantal, fångar den färre funktioner.

Stora modeller har en bred förståelse för sitt område, som språk i språkmodeller. Men att finjustera dem för specifika uppgifter kräver ofta endast att man betonar en liten del av dessa förståelser. Här skiner LoRA. Den föreslår att matrisen som visar dessa viktsjusteringar kan vara en låg-rankmatris, vilket fångar färre funktioner.

LoRA begränsar smart rangen på denna uppdateringsmatris genom att dela upp den i två mindre rangmatriser. Så istället för att ändra hela viktsmatrisen, ändras bara en del av den, vilket gör finjusteringsuppgiften mer effektiv.

Tillämpning av LoRA på transformer

LoRA hjälper till att minimera träningsbördan i neuronnätverk genom att fokusera på specifika viktsmatriser. Under transformer-arkitekturen är vissa viktsmatriser kopplade till självuppmärksamhetsmekanismen, nämligen Wq, Wk, Wv och Wo, samt två till i Multi-Layer Perceptron (MLP)-modulen.

Transformers-arkitektur

Transformers-arkitektur

 

transformer attention heads

Transformer attention heads

Matematisk förklaring bakom LoRA

Låt oss bryta ner matematiken bakom LoRA:

  1. Förtränad viktsmatris W0:
    • Det börjar med en förtränad viktsmatris W0 av dimensioner d×k. Detta innebär att matrisen har d rader och k kolumner.
  2. Låg-rank-faktorisering:
    • Istället för attekt uppdatera hela matrisen W0, som kan vara beräkningsmässigt dyrt, föreslår metoden en låg-rank-faktoriseringstillvägagångssätt.
    • Uppdateringen ΔW till W0 kan representeras som en produkt av två matriser: B och A.
      • B har dimensioner d×r
      • A har dimensioner r×k
    • Den viktiga punkten här är att rangen r är mycket mindre än både d och k, vilket möjliggör en mer beräkningsmässigt effektiv representation.
  3. Träning:
    • Under träningsprocessen förblir W0 oförändrad. Detta kallas “frysning” av vikterna.
    • Å andra sidan är A och B de tränbara parametrarna. Detta innebär att under träningsprocessen görs justeringar av matriserna A och B för att förbättra modellens prestanda.
  4. Multiplication och addition:
    • Både W0 och uppdateringen ΔW (som är produkten av B och A) multipliceras med samma indata (betecknad som x).
    • Utdata från dessa multiplikationer adderas sedan.
    • Denna process sammanfattas i ekvationen: h=W0x+ΔWx=W0x+BAx. Här representerar h den slutliga utdatan efter att uppdateringarna har tillämpats på inmatningen x.

I korthet tillåter denna metod en mer effektiv väg att uppdatera en stor viktsmatris genom att representera uppdateringarna med en låg-rank-faktorisering, vilket kan vara fördelaktigt i termer av beräknings- och minnesanvändning.

LORA

LORA

Initiering och skalning:

När modeller tränas kan initieringen av parametrarna ha en betydande inverkan på effektiviteten och effektiheten av inlärningsprocessen. I sammanhanget med vår viktsmatrisuppdatering med A och B:

  1. Initiering av matriser A och B:
    • Matris A: Denna matris initieras med slumpmässiga Gaussiska värden, även kända som en normalfördelning. Rationale bakom att använda Gaussisk initiering är att bryta symmetrin: olika neuroner i samma lager kommer att lära sig olika funktioner när de har olika initialvikt.
    • Matris B: Denna matris initieras med nollor. Genom att göra detta startar uppdateringen ΔW=BA som noll i början av träningsprocessen. Det säkerställer att det inte sker någon plötslig förändring i modellens beteende i början, vilket tillåter modellen att anpassa sig gradvis när B lär sig lämpliga värden under träningsprocessen.
  2. Skalning av utdata från ΔW:
    • Efter att ha beräknat uppdateringen ΔW, skalas dess utdata med en faktor av rα där α är en konstant. Genom skalning kontrolleras storleken på uppdateringarna.
    • Skalningen är särskilt viktig när rangen r ändras. Till exempel, om du bestämmer dig för att öka rangen för mer exakthet (till priset av beräkningar), säkerställer skalningen att du inte behöver justera många andra hyperparametrar i processen. Det tillhandahåller en viss stabilitet till modellen.

LoRAs praktiska påverkan

LoRA har visat sin potential att justera LLM till specifika konststilar effektivt av personer i AI-gemenskapen. Detta visades tydligt i anpassningen av en modell för att efterlikna den konstnärliga stilen hos Greg Rutkowski.

Som framhölls i artikeln med GPT-3 175B som exempel. Att ha enskilda instanser av finjusterade modeller med 175B parametrar vardera är ganska dyrt. Men med LoRA minskar de tränbara parametrarna med 10 000 gånger, och GPU-minnesanvändningen kapas till en tredjedel.

LoRa-påverkan på GPT-3-justering

LoRa-påverkan på GPT-3-fine-tuning

LoRA-metodiken utgör inte bara ett betydande steg mot att göra LLM mer tillgängliga, utan understryker också potentialen att överbrygga klyftan mellan teoretiska framsteg och praktiska tillämpningar inom AI-området. Genom att lindra de beräkningsmässiga hindren och främja en mer effektiv modellanpassningsprocess, är LoRA väl positionerad för att spela en avgörande roll i den bredare antagandet och distributionen av LLM i verkliga scenarier.

QLoRA (Kvantiserad)

Medan LoRA är en spelväxlare för att minska lagringsbehoven, kräver den fortfarande en kraftfull GPU för att ladda modellen för träningsprocessen. Här kommer QLoRA, eller Kvantiserad LoRA, in i bilden, som kombinerar LoRA med kvantisering för ett smartare tillvägagångssätt.

Kvantisering

Kvantisering

Vanligtvis lagras viktparametrar i ett 32-bitarsformat (FP32), vilket innebär att varje element i matrisen tar upp 32 bitar av utrymme. Tänk om vi kunde komprimera samma information till bara 8 eller till och med 4 bitar. Det är den grundläggande idén bakom QLoRA. Kvantisering refererar till processen att mappa kontinuerliga oändliga värden till en mindre uppsättning diskreta ändliga värden. I sammanhanget med LLM refererar det till processen att konvertera modellens vikter från högre precisionstyper till lägre precisionstyper.

Kvantisering i LLM

Kvantisering i LLM

Här är en enklare nedbrytning av QLoRA:

  1. Initial kvantisering: Först kvantiseras den stora språkmodellen ner till 4 bitar, vilket betydligt minskar minnesavtrycket.
  2. LoRA-träning: Sedan utförs LoRA-träning, men i standard 32-bitars precision (FP32).

Nu undrar du kanske varför man går tillbaka till 32 bitar för träning efter att ha krympt ner till 4 bitar? Jo, för att effektivt träna LoRA-adapter i FP32 måste modellvikterna också återgå till FP32. Detta växlande fram och tillbaka görs på ett smart, stegvis sätt för att undvika att överbelasta GPU-minnet.

LoRA hittar sin praktiska tillämpning i Hugging Face Parameter Efficient Fine-Tuning (PEFT)-biblioteket, vilket förenklar dess användning. För de som vill använda QLoRA är det tillgängligt via en kombination av bitsandbytes och PEFT-biblioteken. Dessutom tillhandahåller HuggingFace Transformer Reinforcement Learning (TRL)-biblioteket övervakad finjustering med integrerat stöd för LoRA. Tillsammans tillhandahåller dessa tre bibliotek det väsentliga verktyget för finjustering av en vald förtränad modell, vilket möjliggör generering av övertygande och sammanhängande produktbeskrivningar när de tillfrågas med specifika attributinstruktioner.

Efter finjustering från QLoRA måste vikterna återgå till ett högprecisionsformat, vilket kan leda till förlust av exakthet och saknar optimering för att påskynda processen.

En föreslagen lösning är att gruppera viktsmatrisen i mindre segment och tillämpa kvantisering och låg-rank-anpassning på varje grupp individuellt. En ny metod, kallad QA-LoRA, försöker kombinera fördelarna med kvantisering och låg-rank-anpassning samtidigt som processen hålls effektiv och modellen förblir effektiv för de önskade uppgifterna.

Slutsats

I denna artikel berörde vi utmaningarna som orsakas av deras enorma parameterns storlek. Vi gick igenom traditionella finjusteringspraxis och deras associerade beräknings- och finansiella krav. Kärnan i LoRA ligger i dess förmåga att modifiera förtränade modeller utan att omträna dem helt, vilket minskar de tränbara parametrarna och gör anpassningsprocessen mer kostnadseffektiv.

Vi berörde också Kvantiserad LoRA (QLoRA), en kombination av LoRA och kvantisering som minskar modellens minnesavtryck samtidigt som den behåller den nödvändiga precisionen för träning. Med dessa avancerade tekniker är praktiker nu utrustade med ett robust bibliotek, vilket underlättar enklare antagande och distribution av LLM i en mängd verkliga scenarier.

Matrix

Matrix

Dessa strategier är utformade för att balansera mellan att göra LLM anpassningsbara för specifika uppgifter och säkerställa att finjusterings- och distributionsprocesserna inte är alltför krävande i termer av beräknings- och lagringsresurser.

Jag har under de senaste fem åren dykt ner i den fascinerande världen av Machine Learning och Deep Learning. Min passion och expertis har lett mig till att bidra till över 50 olika mjukvaruutvecklingsprojekt, med särskild fokus på AI/ML. Min pågående nyfikenhet har också dragit mig mot Natural Language Processing, ett område som jag är angelägen om att utforska vidare.