Vai al contenuto principale
50% di sconto tutti i piani, tempo limitato. A partire da $2.48/mo
15 min left
AI e machine learning

LoRA vs. QLoRA vs. Full Fine-Tuning: quale metodo usare?

B Di Brian 15 min di lettura
LoRA vs QLoRA vs full fine-tuning compared by VRAM use, quality, and when each method wins

Hai deciso di fare il fine-tuning di un modello 7B sui tuoi dati. Poi arrivi al primo vero bivio: tre nomi di metodi, ognuno con una risposta diversa attaccata. La documentazione di Unsloth dice di iniziare con QLoRA. Axolotl dice che dipende dal tuo hardware. Metà dei post del blog che hai scorso dice "usa LoRA per la maggior parte dei casi" e passa oltre. Nel frattempo tu stai fissando una singola GPU, senza essere sicuro che possa anche solo eseguire uno di questi metodi.

Questa è la decisione che sta a monte di tutto il resto. Il metodo che scegli fissa il tuo budget di VRAM, il budget di VRAM sceglie il tuo hardware, e l'hardware sceglie il tuo costo. Sbaglia metodo e o bruci soldi su memoria GPU di cui non avevi bisogno, oppure passi un weekend a rincorrere crash da out-of-memory su una scheda che non sarebbe mai stata adatta al lavoro.

Quindi risolviamo la questione. Ecco cosa differenzia davvero LoRA, QLoRA e full fine-tuning, quanto costa ciascuno in termini di memoria e qualità, e una regola per indirizzare il tuo caso verso uno di essi.

La versione breve

  • Il metodo predefinito è QLoRA. Per la maggior parte dei fine-tuning su singola GPU, inizia con QLoRA. La tabella di Axolotl indica che un run QLoRA su 7-8B richiede circa 10-14 GB di VRAM, assumendo contesto corto e micro-batch piccoli. Questo si adatta a molte schede consumer o prosumer da 12-24 GB, ma non a ogni scheda con poca VRAM. Ricorri al LoRA semplice quando hai memoria da parte e vuoi passi più rapidi; riserva il full fine-tuning ai rari casi che ne hanno davvero bisogno.
  • Il divario di VRAM è ampio. Il fine-tuning di un modello 7B richiede circa 60-80 GB per il full fine-tuning, 16-24 GB per LoRA e 10-14 GB per QLoRA, secondo le cifre pubblicate da Axolotl. Questo scarto è l'intera ragione per cui esistono i metodi efficienti nei parametri.
  • La perdita di qualità dipende dal task, non è costante. Nella maggior parte dei task di instruction-following e output strutturato, LoRA e QLoRA restano entro pochi punti percentuali dal fine-tuning completo. Il divario si allarga nel ragionamento complesso come la matematica. È lì che il fine-tuning completo giustifica ancora il suo costo.
  • Il fine-tuning completo è l'eccezione, non la base di partenza. Ci si arriva per grandi cambiamenti di distribuzione, modifiche su scala di pre-training, o task critici per il ragionamento in cui i benchmark mostrano il divario, non come scelta predefinita sicura.

Cosa non copre questa guida

Questa è una guida alla scelta del metodo, non una guida all'implementazione. Alcune cose sono deliberatamente escluse:

  • Varianti di LoRA (DoRA, VeRA, LoRA+). I tre metodi principali sono la decisione che conta prima di tutto; le varianti sono affinamenti a cui si ricorre in seguito.
  • Codice passo dopo passo. Niente comandi di installazione o script di training qui. Quella è una guida pratica separata, non trattata qui.
  • Training multi-GPU (FSDP, DeepSpeed ZeRO) e la preparazione del dataset: entrambi sono argomenti vasti a sé stanti.
  • RLHF, DPO e l'ottimizzazione delle preferenze. Si tratta di una classe di obiettivi diversa dal fine-tuning supervisionato.
  • Se vale la pena fare fine-tuning. Se non sei sicuro che il fine-tuning sia lo strumento giusto rispetto al retrieval, quel confronto merita una risposta a parte prima di scegliere un metodo qui.

Cosa distingue davvero LoRA, QLoRA e il fine-tuning completo?

Three ways to adapt a model, each with a different training footprint: full fine-tuning updates all weights with the highest training footprint, LoRA freezes the base model and trains small adapter matrices, and QLoRA trains adapters on a quantized 4-bit frozen base for the lowest VRAM use

Il fine-tuning completo aggiorna ogni parametro del modello. LoRA congela il modello di base e addestra invece piccole matrici di adattatori a basso rango (circa lo 0,1-2% del numero totale di parametri). QLoRA aggiunge un ulteriore passaggio rispetto a LoRA: quantizza il modello di base congelato a una precisione di 4 bit (usando un tipo di dato chiamato NF4, NormalFloat) così la base occupa molta meno memoria mentre si addestrano gli adattatori.

Il modo più chiaro per tenere a mente i tre è pensarli come una scala, dove ogni gradino elimina un costo rispetto a quello sottostante.

Il fine-tuning completo è il gradino più basso, e il più pesante. Ogni peso è addestrabile, quindi l'optimizer deve tracciare un gradiente e uno stato dell'optimizer per ogni parametro del modello. È lì che va la memoria, e arriveremo ai calcoli nella prossima sezione.

LoRA (Low-Rank Adaptation) congela i pesi originali e inietta piccole matrici addestrabili nei livelli del modello. Solo quelle matrici imparano; il modello base è semplicemente a bordo per il viaggio. Il paper di LoRA riporta che questo riduce i parametri addestrabili fino a 10.000x per un modello da 175B e riduce la memoria GPU di circa 3x a quella scala, ottenendo al contempo prestazioni "pari o migliori del fine-tuning in termini di qualità del modello" sui modelli testati dagli autori. Poiché così pochi parametri cambiano, il risultato addestrato è minuscolo. Il blog PEFT fornisce due utili punti di riferimento: un checkpoint completo da 40 GB per bigscience/mt0-xxl, e un esempio separato di LoRA in cui l'adattatore salvato è di soli 19 MB. Il punto resta lo stesso: i checkpoint PEFT sono generalmente minuscoli rispetto ai checkpoint completi del modello.

QLoRA prende LoRA e riduce la parte che LoRA aveva lasciato intatta: la base congelata. Quantizzare quei pesi in NF4 a 4 bit significa che il modello base occupa una frazione della memoria che occuperebbe a 16 bit, mentre gli adattatori sopra continuano ad addestrarsi a piena precisione. Il paper di QLoRA descrive NF4 come "teoricamente ottimale dal punto di vista dell'informazione per pesi distribuiti normalmente", un modo preciso di dire che la rappresentazione a 4 bit è scelta per adattarsi a come i pesi del modello sono effettivamente distribuiti, quindi si perde meno di quanto costerebbe un arrotondamento a 4 bit ingenuo.

Questo è l'intero stack concettuale: il fine-tuning completo addestra tutto, LoRA congela la base e addestra gli adattatori, QLoRA comprime la base congelata e addestra gli adattatori. Tutto il resto (VRAM, qualità, quando usare cosa) deriva da queste tre scelte.

Quanta VRAM richiede ciascun metodo?

VRAM needed by fine-tuning method and model size: full fine-tuning needs 24-32 GB for 1-3B models, 60-80 GB for 7-8B models, and 4-8x 80 GB for 70B+ models, versus much lower requirements for LoRA and QLoRA, with QLoRA fine-tuning a 65B model on a single 48 GB GPU

Per un modello da 7B, le cifre approssimative sono circa 60-80 GB per il full fine-tuning, 16-24 GB per LoRA e 10-14 GB per QLoRA, secondo la tabella pubblicata da Axolotl. La conseguenza pratica: QLoRA generalmente si adatta a molte singole GPU consumer o prosumer da 12-24 GB in impostazioni a contesto breve e batch piccoli, mentre il full fine-tuning di un modello da 7B richiede memoria da data center o una configurazione multi-GPU.

Perché il full fine-tuning è così pesante? Un po' di matematica. Quando addestri ogni parametro, la GPU mantiene tre cose per ogni parametro: il peso stesso, il suo gradiente, e lo stato dell'optimizer (gli optimizer in stile Adam mantengono due valori extra per peso). Ecco perché il conto della memoria arriva a più volte la dimensione del solo modello. LoRA congela la base, quindi paga quella tassa di gradiente e optimizer solo sulle piccole matrici dell'adapter. QLoRA inoltre memorizza la base congelata a 4-bit invece che a 16-bit, riducendo il costo residuo più grande.

Ecco come si confrontano i tre metodi al variare della dimensione del modello, basandosi sulla documentazione di Axolotl e sul paper di QLoRA per le cifre dei modelli grandi:

MetodoModello 1-3BModello 7-8BModello 70B+
Full fine-tuning (bf16 + AdamW)24-32 GB60-80 GB4-8x 80 GB
LoRA (bf16)8-12 GB16-24 GB2x 80 GB
QLoRA (4-bit NF4)6-8 GB10-14 GB40-48 GB

Fonti: la documentazione di Axolotl per tutti e tre i metodi nelle diverse dimensioni dei modelli; il paper di QLoRA riporta in modo indipendente il fine-tuning di un modello da 65B su una singola GPU da 48 GB "preservando le prestazioni complete del task rispetto a un finetuning a 16 bit," il che è in linea con il dato QLoRA da 70B. Il blog di Hugging Face sul blog sulla quantizzazione a 4 bit mostra separatamente un modello da 13B addestrato su una singola T4 da 16 GB e un modello da 33B su una GPU da 24 GB con QLoRA. Sono punti di riferimento utili se il tuo obiettivo si trova tra le righe della tabella.

L'unico numero da tenere a mente: un modello da 65B su una singola scheda da 48 GB. Questo è il risultato di punta di QLoRA, e ridefinisce cosa significhi "ho solo una GPU".

In sintesi della sezione: la gerarchia della VRAM è full >> LoRA > QLoRA, e il salto da full a QLoRA è abbastanza grande da spostare un lavoro da un rack multi-GPU a una singola scheda.

LoRA o QLoRA ti fanno davvero perdere qualità?

Per la maggior parte dei task di instruction-following e output strutturato, LoRA e QLoRA si collocano a pochi punti percentuali dal fine-tuning completo. Il divario si amplia nel ragionamento complesso (soprattutto la matematica), dove il fine-tuning completo mantiene ancora un vantaggio netto. Quindi la risposta non è "quasi equivalente" né "peggiore". Dipende dal task, e il tipo di task ti dice da che parte di quella linea ti trovi.

Le evidenze più chiare per tipo di attività provengono da uno studio Anyscale del settembre 2023 su studio Anyscale su Llama 2. Su ViGGO, un compito di rappresentazione funzionale strutturata, LoRA ha raggiunto circa il 95% dell'accuratezza del fine-tuning completo sui modelli 7B e 13B: uno scarto del 2% che gli autori hanno considerato un compromesso accettabile. Nella generazione SQL, LoRA ha quasi eguagliato il fine-tuning completo, e il modello LoRA 13B ha effettivamente superato il modello 7B completamente sottoposto a fine-tuning. Su GSM8k, un benchmark di ragionamento matematico, LoRA ha costantemente sotto-performato rispetto al fine-tuning completo su 7B e 13B, con il divario che si è ridotto solo a 70B. L'interpretazione del team Anyscale è che l'approssimazione a basso rango di LoRA potrebbe non catturare un'abilità intricata come la matematica multi-step.

Una cautela su questi numeri: quello studio è stato condotto su Llama 2 nel settembre 2023. Il pattern per tipo di attività (output strutturato vicino, ragionamento complesso più distante) è la conclusione duratura che si è mantenuta nello spirito da allora. Ma le percentuali esatte potrebbero differire su un modello base più recente come Llama 3 o Mistral, quindi tratta le cifre come la forma del compromesso, non una garanzia per il tuo modello.

La storia della qualità di QLoRA è tutta sua. Il paper QLoRA riporta che Guanaco, il suo modello da 65B addestrato con QLoRA, ha raggiunto il 99,3% delle prestazioni di ChatGPT sul benchmark Vicuna. Forte, ma legato a quel benchmark specifico e a quel confronto del 2023, non un'affermazione generale secondo cui "QLoRA equivale a ChatGPT". Rispetto al LoRA semplice, Axolotl caratterizza QLoRA come portatore di un "leggero degrado dovuto al rumore di quantizzazione": la base a 4 bit introduce piccoli errori che la base a piena precisione di LoRA non ha. Per la maggior parte del lavoro questo è invisibile; per un compito sensibile a piccoli spostamenti di precisione, è il tipo di cosa da verificare piuttosto che presumere.

Consiglio: La sorpresa di qualità più comune non è QLoRA contro LoRA. È un modello sottoposto a fine-tuning che risulta peggiore del modello base da cui sei partito. Di solito significa che l'addestramento ha fatto qualcosa che non intendevi: troppo aggressivo su un dataset ristretto, o valutato solo sul nuovo compito mentre la capacità generale regrediva silenziosamente. Testa sempre il modello con fine-tuning su alcuni prompt fuori dalla tua distribuzione di addestramento prima di fidarti. Una regressione lì è il segnale per fare marcia indietro, non per il rilascio.

In sintesi della sezione: la parità di qualità dipende dal compito. L'output strutturato e il seguire istruzioni sono sicuri per LoRA/QLoRA; il ragionamento complesso è dove il fine-tuning completo giustifica ancora il suo costo.

Quando Dovresti Scegliere Ciascun Metodo?

Decision tree for picking a fine-tuning method: check available VRAM first, then task type and quality requirement, then speed needs, routing to QLoRA as the default, LoRA as the speed and headroom upgrade, or full fine-tuning as the maximum-performance choice

Inizia con QLoRA per la maggior parte dei fine-tuning su singola GPU. Passa a LoRA semplice quando hai margine di VRAM e vuoi passi più veloci o un tetto di qualità leggermente più alto. Riserva il fine-tuning completo ai casi che ne hanno davvero bisogno: grandi cambiamenti di distribuzione, cambiamenti in scala di pre-addestramento, o compiti critici per il ragionamento dove il divario di benchmark è reale. Orientati con tre input, in ordine: VRAM disponibile, tipo di compito e requisito di qualità, poi velocità.

Ecco l'instradamento in forma "fai questo, non quello":

1. Controlla prima la tua VRAM. Se hai una singola scheda con 24 GB o meno (la maggior parte delle GPU consumer e prosumer), QLoRA è il tuo metodo predefinito, perché è l'unico dei tre che riesce a far entrare in modo affidabile un modello da 7B in quello spazio. Non puntare al full fine-tuning su una singola scheda consumer; la tabella sopra ti dice già che un job da 7B non ci starà, e passerai il weekend a imparare la cosa nel modo più difficile.

2. Poi valuta il tuo compito e la soglia di qualità richiesta. Se il tuo compito è seguire istruzioni, generare output strutturato, SQL o un adattamento generale al dominio, le evidenze di Anyscale dicono che LoRA e QLoRA ti offrono una qualità quasi totale. Resta sull'opzione predefinita. Se il tuo compito è fortemente basato sul ragionamento (matematica multi-step, catene logiche complesse) e la qualità non è negoziabile, questo è il tuo primo motivo reale per considerare il passaggio al full fine-tuning, perché è l'unico tipo di compito in cui i benchmark mostrano un gap costante.

3. Poi valuta la velocità. QLoRA rinuncia a una parte della velocità per passo in cambio del risparmio di memoria: la base a 4 bit deve essere dequantizzata al volo. Se hai la VRAM per eseguire LoRA normale (16-24 GB per un modello da 7B), ottieni passi più rapidi ed eviti il rumore della quantizzazione, il che rende LoRA la scelta migliore quando la memoria non è il vincolo principale e stai iterando molto.

Quando is il full fine-tuning è la risposta giusta? Le indicazioni di Axolotl sono dirette: è richiesto per il pre-training, ed è la scelta "quando hai ampia memoria GPU o configurazioni multi-GPU, e hai bisogno delle massime prestazioni." Fuori da queste condizioni (e per la grande maggioranza del fine-tuning praticato, che consiste nell'adattare un modello esistente a un comportamento o dominio specifico), i metodi efficienti in termini di parametri ti danno gran parte della qualità con una frazione dell'hardware.

Unsloth espone chiaramente la scelta predefinita:

"Consigliamo di iniziare con QLoRA, poiché è uno dei metodi più accessibili ed efficaci per addestrare i modelli."

Questa è la regola. Per impostazione predefinita usa QLoRA, passa a LoRA per la velocità quando hai memoria sufficiente, e ricorri al fine-tuning completo solo quando il compito o la scala lo richiedono.

In sintesi della sezione: QLoRA è la scelta predefinita; LoRA è l'aggiornamento per velocità e margine; il fine-tuning completo è l'eccezione che si giustifica con uno spostamento della distribuzione, un pre-training o un benchmark di ragionamento.

Cosa si sbaglia comunemente sui metodi di fine-tuning?

Due idee sbagliate sono responsabili della maggior parte dei weekend sprecati. La prima è trattare il fine-tuning come un modo per insegnare a un modello nuovi fatti, quando il suo effetto principale è plasmare il comportamento. La seconda è supporre di poter comprare qualità semplicemente girando una manopola: che un LoRA rank più alto, o il full fine-tuning invece di QLoRA, garantisca automaticamente un modello migliore. Entrambe sono verità a metà, ed è proprio per questo che ingannano.

Il Fine-Tuning Insegna Nuovi Fatti a un Modello?

Su questo punto c'è una vera spaccatura tra gli esperti, quindi vale la pena cogliere bene la sfumatura piuttosto che schierarsi. Diverse guide pratiche definiscono "il fine-tuning insegna nuovi fatti" l'errore concettuale numero uno: la loro tesi è che il fine-tuning sia molto più efficace nel plasmare come un modello risponde che nell'iniettare in modo affidabile fatti specifici che non ha mai visto durante il pre-training. La documentazione di Unsloth contesta direttamente questa posizione, definendo "falsa" l'affermazione secondo cui il fine-tuning non può insegnare nuove conoscenze, e descrivendo il fine-tuning come un modo per "iniettare e apprendere nuove informazioni specifiche di dominio".

Entrambe le posizioni sono parzialmente corrette, e la lettura che le riconcilia è questa: il fine-tuning è affidabile nel plasmare il comportamento e rafforzare conoscenze già latenti nel modello base, e può codificare pattern specifici di un dominio. Ciò per cui non è affidabile è impiantare fatti isolati completamente assenti dal pre-training. Quanto più il tuo obiettivo assomiglia a "memorizzare questo documento specifico", tanto più probabile è che tu stia usando lo strumento sbagliato, e il retrieval potrebbe servirti meglio. Quindi l'indicazione pratica sopravvive al disaccordo: appoggiati al fine-tuning per comportamento e stile, sii scettico riguardo al suo uso come meccanismo di iniezione di fatti.

Un LoRA Rank Più Alto Migliora Sempre la Qualità?

No, e questa è la manopola più facile da girare troppo. L'intuizione è che un rank più alto dia all'adapter più capacità, quindi di più deve essere meglio. Databricks ha testato questo empiricamente e ha scoperto che raddoppiare il rank "apparentemente non produce alcun aumento percepibile nella qualità dell'output". Ciò che ha fatto davvero la differenza nei loro esperimenti è stato quali livelli hanno scelto come target (adattare tutti i livelli lineari piuttosto che solo i blocchi di attention), non aumentare il numero del rank. La conclusione da trarre: spendi il tuo impegno di tuning sui moduli target e sulla qualità dei dati prima di spenderlo per gonfiare il rank.

La qualità di LoRA è sempre equivalente al fine-tuning completo?

Non universalmente, e un recente articolo di ricerca individua una modalità di fallimento specifica. "LoRA vs Full Fine-tuning: An Illusion of Equivalence" di Shuttleworth et al. dimostra che l'addestramento LoRA può introdurre "dimensioni intruse" (vettori singolari di alto rango assenti nei modelli sottoposti a fine-tuning completo) e le collega all'oblio negli scenari di apprendimento continuo, in cui lo stesso modello viene sottoposto a fine-tuning ripetutamente. Si tratta di un'avvertenza specifica, non di una smentita generale: se stai eseguendo un solo ciclo di fine-tuning per un solo compito, le ampie evidenze sulla parità di qualità restano valide. Se invece concateni più fine-tuning e ti interessa preservare la capacità generale del modello di base, questo è il modo di fallimento da tenere sotto controllo.

Domande frequenti

Qual è la differenza tra LoRA, QLoRA e il fine-tuning completo?

Il fine-tuning completo aggiorna ogni parametro del modello. LoRA congela il modello di base e addestra invece piccole matrici adattatrici a basso rango, circa lo 0,1-2% dei parametri. QLoRA fa ciò che fa LoRA e inoltre quantizza il modello di base congelato a precisione 4-bit NF4, così la base occupa molta meno memoria mentre gli adattatori vengono addestrati. Il risultato è una chiara scala di utilizzo della memoria: il fine-tuning completo è il più pesante, LoRA è più leggero, QLoRA è il più leggero.

Quanta VRAM mi serve per il fine-tuning di un modello da 7B?

Per un modello da 7B, i dati di Axolotl indicano circa 60-80 GB per il fine-tuning completo, 16-24 GB per LoRA e 10-14 GB per QLoRA. QLoRA è l'unico dei tre che di solito rientra in molte GPU consumer o prosumer singole da 12-24 GB; il fine-tuning completo di un modello da 7B richiede memoria di classe data center o più GPU.

La qualità di QLoRA è peggiore rispetto a LoRA o al fine-tuning completo?

Dipende dal compito. Per la maggior parte del lavoro di seguire istruzioni e output strutturato, QLoRA si posiziona entro pochi punti percentuali dal fine-tuning completo, e Axolotl descrive solo un "leggero degrado dovuto al rumore di quantizzazione" rispetto al LoRA semplice. Il divario si amplia nei compiti di ragionamento complesso come la matematica, dove il fine-tuning completo ha mostrato un vantaggio costante in uno studio Anyscale del 2023 su Llama 2.

Quando Vale Davvero la Pena il Fine-Tuning Completo?

Il fine-tuning completo vale il suo costo per il pre-addestramento, i grandi cambiamenti di distribuzione, e i compiti critici per il ragionamento dove i benchmark mostrano un reale divario di qualità. È anche la strada da seguire quando hai ampia memoria GPU o una configurazione multi-GPU e hai bisogno della massima qualità. Per il caso comune (adattare un modello esistente a un comportamento o dominio specifico), LoRA o QLoRA ti dà la maggior parte della qualità con una frazione dell'hardware.

Il Fine-Tuning Insegna Nuovi Fatti a un Modello?

In parte. Il fine-tuning è affidabile nel modellare il comportamento e rafforzare la conoscenza già latente nel modello base, e può codificare pattern specifici di un dominio. È inaffidabile nell'impiantare fatti discreti che erano completamente assenti dal pre-addestramento. C'è un vero disaccordo tra esperti qui. La documentazione di Unsloth sostiene che il fine-tuning può insegnare nuove conoscenze, mentre altre guide chiamano questo il principale equivoco, e la visione conciliante è usare il fine-tuning per comportamento e stile, e ricorrere al retrieval quando l'obiettivo è richiamare fatti specifici.

Dove Questo Ti Lascia

La scelta del metodo si riduce a un default e due via di fuga: inizia con QLoRA, sali a LoRA quando la memoria non è il vincolo e vuoi passi più veloci, sali al fine-tuning completo solo quando un cambiamento di distribuzione, il pre-addestramento, o un benchmark di ragionamento lo impone.

Con il metodo stabilito, la prossima decisione è l'hardware che implica. La tua scelta del metodo ti ha appena detto se stai cercando una singola scheda consumer o memoria da data center. Se vuoi confrontare schede specifiche per carichi di lavoro AI, il nostro H100 vs RTX 4090 benchmark copre quel terreno. Dimensionare la GPU per il metodo scelto, e una guida passo dopo passo per eseguire il lavoro di addestramento stesso, sono guide separate a sé stanti.

Share

Altro dal blog

Continua a leggere.

Pronto a distribuire? Da 2,48 $/mese.

Cloud indipendente, dal 2008. AMD EPYC, NVMe, 40 Gbps. Rimborso entro 14 giorni.