In breve: il full fine-tuning aggiorna tutti i pesi del modello e, con Adam in precisione mista, chiede intorno ai 18 byte per parametro prima ancora delle attivazioni: per un modello da 8 miliardi di parametri si va ben oltre una singola GPU consumer. LoRA congela il modello e allena due matrici piccole per ogni strato: il modello resta in memoria a 16 bit, e la tabella di Unsloth indica come minimo 22 GB di VRAM per un 8B. QLoRA fa la stessa cosa con il modello base quantizzato a 4 bit: per lo stesso 8B la tabella scende a 6 GB. Con una sola GPU consumer la scelta pratica è quasi sempre tra QLoRA e LoRA, e la documentazione di Unsloth consiglia di partire da QLoRA.
Questo pezzo è uno spoke della serie Guida AI locale e prepara la puntata sul fine-tuning con Unsloth, in uscita. Il conto della memoria per l'inferenza è in puntata 3; qui parlo di cosa serve per allenare. Nessun test mio: uso i paper originali di LoRA e QLoRA, la documentazione di Hugging Face (Transformers e PEFT) e quella di Unsloth, letti il 22 ottobre 2026. I numeri di VRAM sono quelli pubblicati da queste fonti, o conti fatti a partire da loro, e lo dico ogni volta.
Tre parole, tre cose diverse
Full fine-tuning vuol dire riprendere l'allenamento del modello su dati tuoi, aggiornando tutti i parametri. Il risultato è un modello nuovo, grande quanto l'originale.
LoRA (Low-Rank Adaptation) è il metodo proposto da Microsoft nel paper del 2021. I pesi originali restano congelati; accanto a ogni matrice scelta si allenano due matrici sottili, A e B, il cui prodotto rappresenta la modifica. Quello che esce dall'allenamento è un adapter: un file piccolo che si applica sopra il modello base.
QLoRA è LoRA con il modello base caricato a 4 bit. Il paper del 2023 introduce tre pezzi per risparmiare memoria: il tipo di dato NF4 (4-bit NormalFloat), la doppia quantizzazione delle costanti di quantizzazione e gli optimizer "paginati" per assorbire i picchi di memoria. I gradienti passano attraverso il modello quantizzato e congelato, ma si aggiornano solo gli adapter.
Dove finisce la VRAM
Nel full fine-tuning la memoria non va solo ai pesi. La guida di Transformers sull'anatomia della memoria la scompone così, per l'allenamento in precisione mista con AdamW:
- Pesi: 6 byte per parametro, perché servono una copia in fp16 per il calcolo e una in fp32 per aggiornare in modo stabile.
- Stati dell'optimizer: 8 byte per parametro, cioè momento e varianza di Adam in fp32. Con un Adam quantizzato di bitsandbytes la guida indica 2 byte.
- Gradienti: 4 byte per parametro, in fp32.
- Attivazioni: variabili, crescono con batch size, lunghezza delle sequenze e dimensione del modello.
Fanno 18 byte per parametro più le attivazioni. Il conto per un modello da 8 miliardi di parametri, fatto da me su quei valori: 8 × 18 = 144 GB, prima delle attivazioni. Nessuna GPU consumer ci si avvicina.
Con LoRA cambiano due cose. I pesi del modello base sono congelati: niente gradienti e niente stati dell'optimizer per loro, solo la copia a 16 bit da 2 byte per parametro. E gradienti e optimizer riguardano solo gli adapter, che sono una frazione minima dei parametri: sul GPT-3 175B il paper di LoRA riporta 10.000 volte meno parametri allenabili e un terzo della memoria GPU rispetto al fine-tuning con Adam.
QLoRA abbassa anche la voce che resta, i pesi del modello base, portandoli a 4 bit. È così che il paper riesce ad allenare un modello da 65 miliardi di parametri su una sola GPU da 48 GB.
La tabella di Unsloth: il minimo per modello
Unsloth pubblica una tabella di VRAM per il fine-tuning, per dimensione del modello. La documentazione avverte che sono valori minimi assoluti e che alcuni modelli chiedono di più. Ne riporto una parte, così come è pubblicata:
Parametri del modello | QLoRA (4 bit) | LoRA (16 bit) |
|---|---|---|
3B | 3,5 GB | 8 GB |
7B | 5 GB | 19 GB |
8B | 6 GB | 22 GB |
14B | 8,5 GB | 33 GB |
27B | 22 GB | 64 GB |
32B | 26 GB | 76 GB |
70B | 41 GB | 164 GB |
La tabella non ha una colonna per il full fine-tuning. Il rapporto tra le due colonne è in linea con quello che la guida agli iperparametri dice in una frase: QLoRA usa circa 4 volte meno VRAM di LoRA a 16 bit.
Tempi: cosa dicono le fonti, senza cronometro
Qui numeri non ne do, perché non ho allenato niente e i tempi dipendono da GPU, dataset, lunghezza delle sequenze e numero di epoche. Le indicazioni che le fonti mettono per iscritto sono qualitative:
- Il paper di LoRA riporta un throughput di allenamento più alto rispetto al full fine-tuning, oltre a nessuna latenza aggiuntiva in inferenza quando l'adapter viene fuso nel modello.
- Unsloth descrive QLoRA come leggermente più lento di LoRA a 16 bit.
- Sulla batch size, Unsloth indica la batch size come la leva principale della VRAM e il gradient accumulation come la leva principale del tempo: se vai fuori memoria, abbassi la batch size e aumenti l'accumulo per tenere la stessa batch effettiva.
Risultati: quanto si perde
Il paper di LoRA riporta qualità pari o superiore al full fine-tuning su RoBERTa, DeBERTa, GPT-2 e GPT-3. Il paper di QLoRA afferma di preservare le prestazioni del fine-tuning completo a 16 bit sui compiti valutati. Sono risultati degli autori, sui loro benchmark: il tuo caso può andare diversamente, ed è per questo che serve un set di prove tuo prima e dopo.
La documentazione di Unsloth è più cauta su QLoRA: lo descrive come "marginalmente meno accurato" di LoRA a 16 bit, e scrive che con i suoi quant dinamici a 4 bit gran parte della perdita è recuperata. Aggiunge un consiglio che vale la pena tenere a mente: allenare e servire nella stessa precisione aiuta a preservare l'accuratezza. Se il modello girerà a 4 bit, ha senso allenarlo a 4 bit.
Sul full fine-tuning la stessa documentazione è netta: è un errore comune partire da lì, perché è pesante in calcolo, e il consiglio è provare prima con LoRA o QLoRA. Se non funziona lì, scrivono, quasi certamente non funzionerà nemmeno con il fine-tuning completo.
Gli iperparametri che contano davvero
LoRA ha poche manopole, e la guida concettuale di PEFT e quella di Unsloth concordano sulle principali:
- Rank (r): la dimensione delle matrici A e B. Più alto vuol dire più parametri allenabili, più memoria e più rischio di overfitting. Unsloth suggerisce 16 o 32 come punto di partenza.
- Alpha (lora_alpha): quanto pesa la modifica rispetto al modello base. Unsloth indica alpha uguale al rank come base sicura, e il doppio del rank come euristica diffusa.
- Moduli target: su quali strati applicare gli adapter. Unsloth raccomanda tutti i principali strati lineari, attention e MLP (
q_proj,k_proj,v_proj,o_proj,gate_proj,up_proj,down_proj): togliere moduli fa risparmiare poco e costa qualità. - Learning rate ed epoche: per LoRA e QLoRA Unsloth parte da 2e-4 e da 1 a 3 epoche; oltre le 3, su dataset di istruzioni, il guadagno cala e cresce il rischio di memorizzare i dati.
In Unsloth la scelta del metodo è un flag al caricamento del modello: load_in_4bit=True per QLoRA, 16 bit per LoRA, full_finetuning=True per il fine-tuning completo. Uno alla volta, come precisa la guida al fine-tuning.
Cosa ti resta in mano alla fine
Con il full fine-tuning hai un modello intero, grande quanto il base. Con LoRA e QLoRA hai un adapter piccolo, e due strade per usarlo:
- Tenerlo separato: stesso modello base, più adapter per compiti diversi. PEFT permette di caricarli, scaricarli e combinarli.
- Fonderlo nel modello: la funzione
merge_and_unload()di PEFT unisce l'adapter ai pesi e restituisce un modello unico, senza la latenza di caricare i due pezzi separati.
Da lì il passaggio al runtime è lo stesso di qualsiasi modello: per Ollama, LM Studio e llama.cpp si converte in GGUF partendo dai pesi a 16 bit, per vLLM si resta in safetensors. Il dettaglio dei formati è in GGUF, safetensors o MLX.
Quale scegliere, caso per caso
Situazione | Metodo | Perché |
|---|---|---|
Una GPU consumer da 8 a 16 GB | QLoRA | È l'unico che fa stare un 7B o 8B nella memoria, secondo la tabella di Unsloth |
Una GPU da 24 GB e modello fino a 7B | LoRA a 16 bit o QLoRA | LoRA è leggermente più accurato e veloce; QLoRA lascia margine per batch e contesto più lunghi. Un 8B in LoRA è al limite (22 GB minimi) |
Modello che girerà quantizzato a 4 bit | QLoRA | Allenare e servire nella stessa precisione, come consiglia Unsloth |
Più compiti sullo stesso modello base | LoRA o QLoRA, adapter separati | Un modello in memoria, più adapter leggeri |
Cluster di GPU e un motivo misurato | Full fine-tuning | Solo dopo che LoRA o QLoRA hanno fallito sullo stesso dataset |
Se lavori su Mac, il requisito hardware cambia: la memoria è unificata e il conto non si fa sulla VRAM di una scheda. Le differenze sono in Mac con Apple Silicon o GPU NVIDIA; la pagina dei requisiti di Unsloth indica il training come supportato anche su Mac.
Errori comuni
- Partire dal full fine-tuning "per sicurezza". Costa molta più memoria di LoRA e QLoRA, e la stessa documentazione di Unsloth lo sconsiglia come primo tentativo.
- Leggere la tabella di Unsloth come garanzia. Sono minimi: batch size e lunghezza del contesto fanno salire la memoria.
- Alzare il rank per "imparare di più". Più rank vuol dire più memoria e più rischio di overfitting, non per forza un modello migliore.
- Applicare LoRA solo all'attention per risparmiare. Unsloth raccomanda tutti gli strati lineari principali: il risparmio è poco, la perdita di qualità no.
- Fare fine-tuning senza un set di prove. Senza casi tuoi da confrontare prima e dopo, non sai se il modello allenato è migliore del base.
Cosa conviene fare adesso
- Controlla quanta VRAM hai e trova la riga della tabella di Unsloth che ci sta, con margine.
- Parti da QLoRA con i valori di default (rank 16, alpha 16 o 32, tutti gli strati lineari, 1–3 epoche).
- Prepara prima una manciata di casi di prova tuoi e confronta il modello base con quello allenato.
- Se un termine non ti è chiaro (quantizzazione, VRAM, adapter), c'è il glossario. Le altre puntate della serie sono nell'hub AI Engineering.
Domande frequenti
01Che differenza c'è tra LoRA e QLoRA?
Entrambi congelano il modello base e allenano solo due matrici piccole per strato, l'adapter. In LoRA il modello base resta a 16 bit; in QLoRA è quantizzato a 4 bit con il tipo NF4. Secondo la documentazione di Unsloth QLoRA usa circa 4 volte meno VRAM, ed è leggermente più lento e marginalmente meno accurato.
02Quanta VRAM serve per fare fine-tuning di un modello da 7B o 8B?
La tabella di Unsloth indica come minimo 5 GB per un 7B e 6 GB per un 8B con QLoRA, 19 GB e 22 GB con LoRA a 16 bit. Sono minimi assoluti: batch size e contesto lungo fanno salire il conto.
03Il full fine-tuning dà risultati migliori di LoRA?
Non necessariamente. Il paper di LoRA riporta risultati pari o superiori al full fine-tuning sui modelli testati, e Unsloth consiglia di provare prima LoRA o QLoRA: se non funzionano lì, quasi certamente non funzionerà nemmeno il fine-tuning completo.
04Come uso con Ollama un modello allenato con LoRA?
La strada più semplice è fondere l'adapter nel modello base con merge_and_unload() di PEFT, salvare i pesi a 16 bit e importarli in Ollama: come cartella di safetensors oppure dopo averli convertiti e quantizzati in GGUF con llama.cpp. Ollama non quantizza i GGUF durante l'import.



