LoRA: fine-tuning con lo 0,1% dei parametri

Specializzare un modello da miliardi di parametri sembra richiedere di riaddestrarlo tutto, con GPU da datacenter e una copia intera per ogni compito. LoRA congela il modello e allena due matrici magre: una frazione minima dei pesi, spesso intorno allo 0,1%, con risultati vicini al fine-tuning completo.

Avete scaricato un modello da 7 miliardi di parametri e volete adattarlo a un compito preciso: il gergo legale dei vostri contratti, il tono di voce dell’azienda, un formato di risposta molto specifico. La strada classica è il fine-tuning completo: si riaddestrano tutti e 7 i miliardi di numeri. Serve una GPU capiente, la stessa memoria dell’addestramento originale, e alla fine ottenete una seconda copia da 14 GB. Volete specializzarlo anche su un secondo compito? Un’altra copia intera. Un terzo? Un’altra ancora.

Instruction tuning, LoRA, RLHF e DPO: tutto quello che succede dopo il pre-addestramento è nel libro.

Leggi «Dopo il pre-addestramento: istruzioni, preferenze, allineamento» nel libro →

LoRA — Low-Rank Adaptation, proposta nel 2021 da un gruppo di ricerca Microsoft — parte da una domanda scomoda: siamo sicuri che per correggere un modello serva riscriverlo tutto? La risposta è no, e la scommessa è tanto semplice quanto efficace: si lascia il modello originale congelato e si allena solo un piccolo innesto a parte.

Adattare non è ricostruire

Il punto di partenza è un’osservazione empirica sui modelli di grandi dimensioni: quando li si specializza su un compito, l’aggiustamento necessario è molto più «semplice» del modello stesso. Il modello di partenza contiene già la grammatica, la conoscenza del mondo, la capacità di ragionare per passaggi. La specializzazione non ricostruisce nulla di tutto questo: sposta il comportamento di poco, lungo poche direzioni.

Un’analogia. Un pianista di conservatorio non reimpara a suonare per adattarsi a un brano jazz: mantiene tutta la tecnica acquisita e aggiunge un piccolo strato di correzioni — il fraseggio, l’attesa sul tempo, un tocco diverso. La struttura resta, l’adattamento è sottile. LoRA formalizza esattamente questa idea: la struttura pesante (i pesi pre-addestrati) resta intatta, e si allena solo la correzione.

Tecnicamente, questa «correzione» è la differenza tra i pesi originali e i pesi che il fine-tuning completo produrrebbe. LoRA ipotizza che questa differenza abbia rango basso: che si possa cioè descrivere con pochissimi numeri rispetto alla matrice piena da cui deriva.

Due matrici magre invece di una piena

Ecco il cuore della tecnica, senza formule spaventose. Uno strato di un modello è, in pratica, una grande matrice di pesi che chiamiamo W — poniamo di dimensione 4096 × 4096, cioè circa 16,7 milioni di numeri. Il fine-tuning completo modificherebbe tutti questi numeri.

LoRA invece non tocca W. Le affianca un aggiornamento scritto come prodotto di due matrici molto più magre: una matrice B alta e stretta (4096 × r) e una matrice A bassa e larga (r × 4096), dove r — il rango — è un numero piccolo, tipicamente 8, 16 o 64. Il loro prodotto B·A ha esattamente la stessa forma di W, ma per costruirlo bastano r × (4096 + 4096) numeri. Con r = 8 sono circa 65 mila valori: contro i 16,7 milioni della matrice piena, meno dello 0,4% per quello strato.

Poiché nella pratica LoRA si applica solo ad alcune matrici del modello (tipicamente le proiezioni dell’attenzione), la frazione di parametri effettivamente addestrati sull’intero modello scende ulteriormente, e in molte configurazioni si assesta intorno allo 0,1% — o meno. È l’ordine di grandezza che dà il titolo a questo articolo.

LoRA — l’aggiornamento a basso rango affianca il peso congelato h = W·x + B·A·x + W pesi pre-addestrati congelato · non si addestra A · (r × d) B · (d × r) r ≪ d si addestrano solo A e B x input

L’input x attraversa due percorsi paralleli: il peso originale W, congelato (in verde), e l’innesto a basso rango B·A, l’unica parte addestrata (in arancione). Le uscite si sommano. Il rango r, molto più piccolo della dimensione d, è il collo di bottiglia che rende l’aggiornamento economico.

Il trucco dell’inizializzazione

C’è un dettaglio elegante nel modo in cui LoRA parte. La matrice A viene inizializzata con piccoli valori casuali, ma B viene inizializzata a zero. Il prodotto B·A all’avvio è quindi nullo: il modello, il primo istante dell’addestramento, si comporta esattamente come l’originale. Non c’è un salto, non si rischia di rovinare un modello già competente. Da lì, l’addestramento fa crescere B·A solo quanto serve a spostare il comportamento verso il compito nuovo.

Non stiamo insegnando al modello a parlare da capo: stiamo scrivendo un piccolo margine di correzioni a matita su un testo già stampato, senza toccare la stampa.

Perché non rallenta l’inferenza

Un timore ragionevole: aggiungere un secondo percorso di calcolo non appesantisce ogni risposta? La risposta è no, ed è il secondo vantaggio della tecnica. Poiché B·A ha la stessa forma di W, a fine addestramento si può fondere l’innesto nel peso originale — sommarli in un’unica matrice W + B·A. Il modello risultante ha la stessa struttura, la stessa velocità e la stessa memoria di quello di partenza. L’adattamento diventa invisibile: nessun costo aggiuntivo per token.

E finché non lo si fonde, si ottiene una proprietà preziosa: gli innesti sono piccoli — spesso pochi megabyte — e intercambiabili. Un’unica copia del modello base in memoria, e decine di adattatori LoRA che si montano e smontano al volo: uno per il supporto clienti, uno per la generazione di codice, uno per lo stile editoriale. Al posto di decine di copie da 14 GB, decine di file leggeri sopra un’unica base.

QLoRA: il fine-tuning sul portatile

Nel 2023 un’estensione ha spinto l’idea più in là. QLoRA combina LoRA con la quantizzazione: il modello base viene tenuto in memoria a 4 bit (congelato, quindi la perdita di precisione conta poco), mentre gli adattatori LoRA restano a piena precisione e sono gli unici a essere addestrati. Il risultato pratico è che modelli molto grandi diventano addestrabili su una singola GPU consumer, dove il fine-tuning completo era semplicemente fuori discussione.

È la stessa filosofia della quantizzazione, applicata all’addestramento: non serve la precisione piena su tutto: serve dove muove qualcosa. I 4 bit bastano per la parte che non cambia, i bit pieni si spendono sull’unica frazione che stiamo davvero allenando.

Perché vi riguarda

LoRA ha cambiato chi può specializzare un modello. Prima, adattare un modello di frontiera era un lusso da laboratori con hardware dedicato; oggi è alla portata di un piccolo team, di un freelance, di un dipartimento aziendale con una sola scheda. Questo sposta il confine tra «usiamo il modello generico via API» e «costruiamo il nostro, sui nostri dati, che resta nostro».

Per chi lavora con l’AI, la lezione operativa è duplice. Primo: prima di pagare per un fine-tuning completo, chiedetevi se un adattatore a basso rango non basti — nella maggioranza dei casi pratici la differenza di qualità è modesta, quella di costo enorme. Secondo: pensare in termini di adattatori intercambiabili cambia l’architettura di un prodotto. Un modello base, tanti innesti leggeri: è un modo più economico, più flessibile e più difendibile di costruire l’AI su misura.

I commenti sono riservati agli iscritti.

Accedi per commentare