LoRA en Adapters Uitgelegd: Goedkoop Finetunen Zonder het Hele Model te Hertrainen
Bewerkt door: Redactie llmnet.nl | Leestijd: ca. 7 minuten
Het aanpassen van grote taalmodellen (Large Language Models, of LLM's) aan specifieke taken was tot voor kort een kostbare en complexe aangelegenheid. Als je een model wilde leren hoe het medische teksten moest samenvatten of hoe het in een specifieke programmeertaal moest coderen, moest je het hele model hertrainen. Deze methode is onbetaalbaar voor de meeste bedrijven en individuele ontwikkelaars.
Gelukkig heeft de introductie van PEFT (Parameter-Efficient Fine-Tuning) het landschap veranderd. De populairste techniek binnen deze categorie is LoRA, wat staat voor Low-Rank Adaptation. Met LoRA kun je een model aanpassen voor een fractie van de rekenkracht. In dit artikel leggen we precies uit hoe LoRA en zogenaamde 'adapters' werken, waarom ze de industriestandaard zijn geworden, en hoe ze zich verhouden tot andere technieken.
Het Probleem van Volledige Finetuning (Full Fine-Tuning)
Voordat we LoRA begrijpen, moeten we kijken naar hoe volledige finetuning werkt. Een neuraal netwerk bestaat uit miljarden parameters, ook wel 'gewichten' (weights) genoemd. Bij volledige finetuning pas je tijdens het leerproces álle gewichten in het netwerk aan.
Dit proces vereist enorm veel videogeheugen (VRAM). Je moet namelijk niet alleen de gewichten van het model in het geheugen laden, maar ook de zogenaamde 'gradients' (de berekende foutmarges) en de status van de 'optimizer' (het algoritme dat de gewichten bijwerkt, zoals AdamW). Een grove schatting is dat je voor volledige finetuning drie tot vier keer meer VRAM nodig hebt dan de daadwerkelijke grootte van het model. Een model van 7 miljard parameters, dat ongeveer 14 GB opslag in beslag neemt, vereist al snel vele tientallen gigabytes aan VRAM om te trainen. Hierdoor ben je genoodzaakt om zware, dure cloud-infrastructuur te huren.
Wat is LoRA (Low-Rank Adaptation)?
LoRA lost dit geheugenprobleem op een elegante manier op. In plaats van alle originele miljarden gewichten van het model aan te passen, bevriest LoRA het originele, voorgeprogrammeerde model. Er wordt niets aan de basis veranderd.
Daarnaast injecteert LoRA kleine, extra lagen in het netwerk, die we adapters noemen. Tijdens de trainingsfase worden alleen de parameters in deze piepkleine adapters getraind en geüpdatet. De gigantische hoeveelheid basisgewichten blijft ongemoeid.
De wiskunde achter de magie
Zonder te diep in de lineaire algebra te duiken, maakt LoRA gebruik van 'matrixdecompositie'. Een grote matrix met gewichten kan heel complex lijken, maar veel van die complexiteit is niet nodig om een specifieke nieuwe taak te leren. LoRA vervangt het aanpassen van een gigantische matrix (bijvoorbeeld 4096 bij 4096 getallen) door het trainen van twee veel kleinere matrices (bijvoorbeeld 4096 bij 8 en 8 bij 4096). Als je deze twee kleine matrices met elkaar vermenigvuldigt, krijg je een update die op de grote matrix lijkt, maar die veel minder rekenkracht kostte om te trainen.
De Voordelen van LoRA in de Praktijk
Het gebruik van adapters biedt gigantische voordelen voor ontwikkelaars, datawetenschappers en AI-enthousiastelingen:
- Lagere hardware-eisen: Omdat je alleen de optimizer-status en gradients voor de kleine adapter hoeft op te slaan, daalt het benodigde VRAM drastisch. Hierdoor wordt het trainen van eigen modellen ineens haalbaar op een enkele, krachtige videokaart in een desktop, of een lokale thuis-HPC-opstelling. Je bent niet langer afhankelijk van een datacentrum.
- Snellere trainingstijden: Doordat er significant minder parameters berekend en geüpdatet hoeven te worden, verloopt het trainingsproces veel sneller.
- Kleine bestandsgrootte: Een opgeslagen adapter is vaak niet groter dan 50 tot 300 Megabyte, terwijl het basismodel tientallen Gigabytes groot is. Je kunt deze kleine adapters eenvoudig delen via internet of lokaal opslaan.
- Hot-swapping: In een productie-omgeving kun je één groot basismodel (zoals Llama of Mistral) in het werkgeheugen houden en per verzoek een andere kleine adapter laden. Dit wordt 'hot-swapping' genoemd en is extreem kostenefficiënt.
Hoe Adapters Werken: Hyperparameters (r en alpha)
Wanneer je een adapter traint, moet je enkele instellingen (hyperparameters) configureren. De twee belangrijkste zijn de 'rank' (r) en alpha.
De Rank (r)
De parameter r bepaalt de grootte of 'capaciteit' van de adapter. Een hogere rank betekent dat de adapter meer parameters heeft en in theorie complexere patronen kan leren. Een lagere rank traint sneller en gebruikt minder geheugen. Een veelgebruikte vuistregel, geen meting, is om te starten met een rank van 8 voor simpele taken, en dit eventueel te verhogen naar 16, 32 of 64 voor complexere datarepresentaties.
Alpha
De alpha parameter is een schaalfactor. Het bepaalt hoe zwaar de gewichten van de getrainde adapter meewegen bovenop het basismodel. Een andere vuistregel, geen meting, is om de alpha-waarde in te stellen op exact het dubbele van de rank (dus als r=8, kies je alpha=16). Dit helpt om de stabiliteit tijdens het trainen te waarborgen.
QLoRA: LoRA met Quantisatie
Hoewel LoRA het geheugenprobleem voor de trainingsupdates oplost, moet het basismodel nog steeds in het VRAM passen. Voor gigantische modellen is zelfs dat soms teveel gevraagd. Hier komt QLoRA (Quantized LoRA) in beeld.
Bij QLoRA wordt het basismodel ingeladen in een gecomprimeerd formaat, meestal 4-bit (quantisatie). Dit comprimeert het basismodel enorm, waardoor de voetafdruk in het VRAM wordt geminimaliseerd. Bovenop dit gecomprimeerde basismodel wordt vervolgens een normale (hogere precisie) LoRA-adapter getraind. QLoRA maakt het mogelijk om modellen met 70 miljard parameters te finetunen op een set consumentenkaarten, wat een absolute doorbraak is in toegankelijkheid.
LoRA vergelijken met Prompt Engineering en RAG
Wanneer moet je finetunen met LoRA, en wanneer volstaan andere technieken? Niet elk probleem vereist een getraind model.
| Techniek | Beste toepassing | Complexiteit |
|---|---|---|
| Prompt Engineering | Korte instructies geven en simpele taken sturen via de chatinterface. | Laag |
| RAG (Retrieval-Augmented Generation) | Het model toegang geven tot externe kennis, zoals bedrijfsdocumenten of een recente database. Zoals vaak in de praktijk blijkt, werkt Retrieval-Augmented Generation uitstekend om een model actuele feiten te voeden. | Gemiddeld |
| LoRA Finetuning | De schrijfstijl, toon, of een specifiek output-formaat (zoals JSON) diep in het gedrag van het model slijpen. | Hoog |
| Full Fine-Tuning | Een model vanaf de grond af nieuwe concepten leren in een taal die het helemaal niet kent. | Zeer Hoog |
Let op: LoRA is relatief slecht in het aanleren van nieuwe, harde feiten. Gebruik adapters om het gedrag en formaat te sturen, en gebruik RAG voor feitenkennis.
Het Samenvoegen van Adapters (Merging)
Als je trainingsscript eenmaal klaar is, bezit je de opgeslagen LoRA-adapter. Tijdens de fase waarin je het model daadwerkelijk gaat gebruiken (inference), kun je ervoor kiezen om de adapter dynamisch in te laden, zoals eerder beschreven.
Je kunt er echter ook voor kiezen om de adapter permanent in het basismodel te versmelten (merging). De kleine matrices worden dan wiskundig opgeteld bij de grote matrices van het basismodel. Het resultaat is een nieuw, zelfstandig model dat precies even groot is en even snel draait als het originele basismodel, maar dat permanent over de nieuwe vaardigheden beschikt. Dit proces voorkomt dat de adapter tijdens inference enige vertraging (latency) veroorzaakt.
Zelf Aan de Slag met LoRA
Wil je zelf experimenteren? Het proces bestaat in de basis uit drie stappen:
- Verzamel een set van hoge kwaliteit voorbeelden (input en gewenste output).
- Kies een geschikt open-source model. Bekijk ons overzicht van basismodellen in onze gids voor de beste keuzes van dit moment.
- Gebruik frameworks zoals Hugging Face
PEFTof gespecialiseerde tools zoals Unsloth om je trainingsscript te schrijven en uit te voeren.
LoRA heeft de muren rondom kunstmatige intelligentie drastisch verlaagd. Het geeft ontwikkelaars de kracht om gepersonaliseerde, hoogwaardige AI-toepassingen te bouwen zonder de astronomische kosten van weleer.