Fare fine-tuning di un modello 70B su una scheda.
QLoRA trasforma un job di addestramento che richiede un rack in uno che richiede una sola GPU da 48 GB. Ecco cosa ci sta, quanto costa al mese, e dove la tecnica smette di funzionare.
La risposta breve
- QLoRA su 70B
- ~61 GB — ci sta su una scheda da 48 GB con sequenze brevi, comodamente su una da 80 GB
- Full fine-tuning di un 70B
- ~1,232 GB — un cluster multi-nodo, che non noleggiamo
- Il rapporto
- Circa 20× in meno di memoria, per una tecnica che raggiunge gran parte della qualità sulla maggior parte dei task
- Quanto costa qui
- A partire da $286/mese, con la scheda a sua disposizione per l’intero mese anziché solo per la run
Cosa ci sta davvero
LoRA congela il modello e addestra una piccola coppia di matrici a basso rango accanto a ogni matrice di pesi. QLoRA va oltre e mantiene i pesi congelati a 4 bit. Ciò che deve restare in memoria cambia completamente di conseguenza.
Perché il fine-tuning completo no
Il full fine-tuning in BF16 richiede circa 16 byte per parametro: 2 per il peso, 2 per il suo gradiente, e 8 per i due momenti di Adam in FP32, più la copia master. È un moltiplicatore fisso, ed è spietato.
| Modello | QLoRA | Full fine-tuning | Rapporto | Cosa significa |
|---|---|---|---|---|
| Llama 3.1 8B | 13 GB | 141 GB | 11× | Una scheda da 24 GB |
| Gemma 3 27B | 27 GB | 475 GB | 17× | Una scheda da 48 GB |
| Qwen 3 32B | 31 GB | 563 GB | 18× | Una scheda da 48 GB |
| Llama 3.3 70B | 61 GB | 1,232 GB | 20× | Una scheda da 80 GB |
Queste sono cifre di ordine di grandezza, con un margine modesto per le attivazioni — sufficienti per scegliere una macchina, non per garantire un’esecuzione specifica. La lunghezza della sequenza e la dimensione del batch influenzano notevolmente la colonna QLoRA; la colonna del fine-tuning completo si sposta a malapena, perché è dominata dai 16 byte fissi per parametro.
Modello per modello
Il nodo più economico del nostro catalogo in grado di addestrare ciascun modello con QLoRA, insieme alla macchina che servirebbe per il serving del risultato.
| Modello | Memoria di addestramento | Nodo più economico su cui addestrare | Nodo più economico su cui fare serving |
|---|---|---|---|
| Llama 3.1 8B | 13 GB | NVIDIA L4 | NVIDIA L4 |
| Mistral Small 24B | 25 GB | NVIDIA RTX A6000 | NVIDIA L4 |
| Gemma 3 27B | 27 GB | NVIDIA RTX A6000 | NVIDIA L4 |
| Qwen 3 32B | 31 GB | NVIDIA RTX A6000 | NVIDIA L4 |
| Llama 3.3 70B | 61 GB | NVIDIA A100 PCIe | 2 × NVIDIA L4 |
L’addestramento vuole memoria; il serving vuole memoria e larghezza di banda. È comune che la scheda giusta per l’addestramento sia una economica e con molta memoria, e che la scheda giusta per il serving sia una veloce e costosa — e poiché qui sono entrambe mensili, eseguire le due su macchine diverse è spesso più economico che scendere a compromessi su una sola.
Eseguirlo
Axolotl è preinstallato come una delle immagini del configuratore. Questo è un run completo su una singola scheda, a partire da una macchina vuota.
$ mkdir -p /scratch/ft && cd /scratch/ft
$ cat > qlora.yml <<'YAML'
base_model: meta-llama/Llama-3.3-70B-Instruct
load_in_4bit: true
adapter: qlora
lora_r: 16
lora_alpha: 32
lora_dropout: 0.05
lora_target_linear: true
sequence_len: 2048
sample_packing: true
gradient_checkpointing: true
micro_batch_size: 1
gradient_accumulation_steps: 16
num_epochs: 2
learning_rate: 0.0001
optimizer: paged_adamw_8bit
bf16: true
datasets:
- path: /scratch/ft/data.jsonl
type: chat_template
output_dir: /scratch/ft/out
YAML
$ docker run --rm --gpus all --ipc=host --shm-size=16g \
-v /scratch/ft:/workspace -v /scratch/models:/root/.cache/huggingface \
-e HF_TOKEN="$HF_TOKEN" \
axolotlai/axolotl:main-latest \
axolotl train /workspace/qlora.yml
$ nvidia-smi dmon -s um
# If memory sits just under the card's total, you are one long batch
# away from an out-of-memory error four hours into the run.
# Lower sequence_len or micro_batch_size now, not then.
Le impostazioni che contano
Quanto costa un mese
Il motivo per cui il mensile conta di più per l’addestramento che per il serving: un progetto di fine-tuning non è un run solo. È un primo run che fallisce per un bug nei dati, un secondo che va in overfitting, un terzo che funziona, e poi altri cinque con rank diversi.
| Macchina | Memoria della scheda | Al mese | Adatto a |
|---|---|---|---|
| NVIDIA L4 | 24 GB | $125/mese | QLoRA fino a 8B |
| NVIDIA RTX 5090 | 32 GB | $335/mese | QLoRA fino a 32B |
| NVIDIA A100 PCIe | 40 GB | $392/mese | QLoRA fino a 32B |
| NVIDIA RTX A6000 | 48 GB | $286/mese | QLoRA fino a 32B |
| NVIDIA A100 PCIe | 80 GB | $1,091/mese | QLoRA fino a 70B |
Lo confronti con la tariffazione oraria calcolata sull’intero progetto anziché su una singola run: la guida al punto di pareggio fa i conti. Una macchina che esiste per tre settimane mentre lei itera è esattamente il caso in cui un contatore costa più di un abbonamento.
Dove LoRA smette di funzionare
È una tecnica molto valida con un limite reale, ed è utile sapere da che parte di quel limite ci si trova prima di noleggiare qualcosa.
Insegnare un dominio realmente nuovo. LoRA adatta bene il comportamento e aggiunge male la conoscenza. Un modello che non ha mai visto il suo settore non lo imparerà da un adapter a basso rango.
Cambiare il vocabolario o il tokenizer. I nuovi token richiedono embedding da addestrare, il che esula da ciò che un adapter modifica.
Il pre-training continuato su miliardi di token. Questo è full fine-tuning, e richiede la macchina nella colonna di destra della tabella sopra — che significa più di un nodo, più di quanto noleggiamo.
Spremere gli ultimi due punti di un benchmark. Il full fine-tuning vince ancora ai margini. Se è per quel margine che viene pagato, LoRA è lo strumento sbagliato.
Per tutto il resto — un tono, un formato, uno schema, un dominio che il modello base conosce già in parte — QLoRA su una singola scheda raggiunge gran parte della qualità con una frazione della macchina. Questo è il compromesso, ed è un buon compromesso per i modelli su cui la maggior parte delle persone fa davvero fine-tuning.
Scelga la scheda, e la tenga per l’intero progetto.
Ogni configurazione è mensile, con accesso root e senza contatore — che è esattamente ciò di cui ha bisogno chi itera su un fine-tune.
Altre guide
- Pagamento · 8 min
Pagare un server in cripto
Cosa succede realmente tra il clic su paga e l’ottenimento del root, quale moneta scegliere, e i quattro errori che fanno perdere denaro al primo pagamento.
Leggi la guida - Dimensionamento · 9 min
Quanta VRAM serve davvero a un modello
L’aritmetica dietro «ci sta»: pesi, cache KV, e i due punti dove una regola empirica sbaglia di un fattore tre.
Leggi la guida - Dimensionamento · 7 min
NVLink o PCIe: quale serve al carico di lavoro
Quando il collegamento tra le schede decide il throughput, quando non cambia nulla, e come capire in quale caso ci si trova prima di pagare per il nodo sbagliato.
Leggi la guida