Cos'è
QLoRA, abbreviazione di LoRA quantizzato, combina due idee. La quantizzazione archivia ogni numero in un numero inferiore di bit. LoRA congela il modello di base e addestra un piccolo adattatore al suo fianco. Poiché la base è congelata, non necessita mai di gradienti o dello stato dell'ottimizzatore, quindi può essere archiviata in modo compatto; solo l'adattatore deve mantenere una precisione adatta all'apprendimento. QLoRA mantiene la base congelata a 4 bit, un quarto dei consueti 16, e addestra lo stesso adattatore LoRA sovrapposto a 16 bit.
È stato introdotto da Dettmers et al. nel 2023. Il loro studio ha eseguito il fine-tuning di un modello da 65 miliardi di parametri su una singola GPU da 48 GB, laddove il normale fine-tuning a 16 bit avrebbe richiesto più di 780 GB, preservando al contempo le prestazioni delle attività del fine-tuning a 16 bit.
Come funziona
Un peso a 16 bit occupa 2 byte; uno a 4 bit occupa mezzo byte. Comprimere così tanto un modello addestrato senza comprometterlo si basa su tre elementi tratti dallo studio:
- NormalFloat a 4 bit (NF4). I pesi addestrati seguono approssimativamente una curva a campana centrata sullo zero. NF4 posiziona i suoi 16 valori possibili per adattarsi a tale forma, in modo che la maggior parte di essi ricada dove si trova la maggior parte dei pesi. Nello studio ha superato i normali numeri interi a 4 bit e i float a 4 bit.
- Doppia quantizzazione. I pesi vengono quantizzati in piccoli blocchi, ognuno con la propria costante di ridimensionamento, e tali costanti si sommano. QLoRA quantizza anche le costanti, riducendo il loro costo da circa 0,5 a circa 0,13 bit per peso: un risparmio di circa 3 GB su un modello 65B.
- Ottimizzatori con paginazione. Quando un esempio lungo causa un improvviso picco di memoria, lo stato dell'ottimizzatore viene temporaneamente spostato nella normale memoria della CPU anziché causare l'arresto anomalo dell'esecuzione.
Durante i passaggi in avanti e all'indietro, i pesi a 4 bit di ciascun livello vengono decompressi (dequantizzati) a 16 bit, utilizzati per l'aritmetica di quel livello e poi scartati. I gradienti fluiscono attraverso la base congelata nell'adattatore, che è l'unica parte che cambia. In qualsiasi momento, la memoria conserva l'intero modello a 4 bit più l'equivalente di un livello di pesi a 16 bit.
bytes per weight of the frozen base
16-bit (bf16) 2 bytes
4-bit NF4 + double-quantised constants ≈ 0.52 bytes (≈ 4.13 bits)
an 8B model, frozen base only
16-bit 8 × 10⁹ × 2 bytes ≈ 16 GB
4-bit 8 × 10⁹ × 0.52 bytes ≈ 4.1 GB- LoRA su una base a 16 bit: circa 16 GB solo per i pesi congelati. Con l'adattatore, lo stato del suo ottimizzatore e le attivazioni, una regola empirica comune indica circa 19 GB. Non c'è spazio sufficiente.
- QLoRA: la base si riduce a circa 4–5 GB. Alcune parti, come i livelli di normalizzazione e spesso i livelli di embedding e di output, rimangono solitamente a 16 bit. Con l'adattatore e la memoria di lavoro il totale è di circa 9 GB, che rientra ampiamente nello spazio disponibile.
- L'adattatore ha esattamente le stesse dimensioni di un adattatore LoRA dello stesso rango: decine di MB.
- Il compromesso: ogni passaggio è leggermente più lento, poiché ogni livello viene decompresso in tempo reale.
| Modello | LoRA (base a 16 bit) | QLoRA (base a 4 bit) |
|---|---|---|
| 8B | ~19 GB | ~9 GB |
| 14B | ~33 GB | ~13 GB |
| 27–32B | ~60–70 GB | ~22–26 GB |
Questi sono i totali per l'addestramento, inclusa la memoria di lavoro, motivo per cui si collocano al di sopra dei 4–5 GB indicati nella pagina del fine-tuning completo per la base a 4 bit di un modello 7B prima delle attivazioni. Un laptop da 36 GB con memoria condivisa, con circa 27 GB liberi una volta che il sistema operativo ha preso la sua parte, può addestrare un modello 27–32B con QLoRA, contro i circa 10B del normale LoRA.
Costi e quando utilizzarlo
- Velocità. Decomprimere ogni livello a ogni passaggio aggiunge lavoro, pertanto l'addestramento è leggermente più lento rispetto a LoRA sullo stesso modello.
- Qualità. I risultati sono molto simili a quelli di LoRA. Lo studio ha eguagliato il fine-tuning a 16 bit in tutti i suoi benchmark; tuttavia, possono emergere piccole differenze nella Sua valutazione, quindi è consigliabile confrontare i risultati con un'esecuzione di prova anziché darli per scontati.
- Il risultato. Si tratta pur sempre di un adattatore. Lo carichi sul normale modello di base a 16 bit o sulla sua copia a 4 bit; la dimensione dell'adattatore in sé non cambia.
- Quando utilizzarlo. Utilizzi QLoRA quando il modello desiderato non è compatibile con le dimensioni di LoRA. Se lo è, il normale LoRA è più veloce a parità di risultato.
Le impostazioni
Indica se il modello di base congelato viene caricato a 4 bit. Se disattivato, addestra un normale adapter LoRA su una base a 16 bit: più veloce per ogni step, ma richiede circa il triplo della memoria. Se attivato, addestra QLoRA, la scelta ideale quando il modello desiderato non entrerebbe altrimenti in memoria. Si applica solo agli adapter: un fine-tuning completo modifica ogni peso, quindi ogni peso deve rimanere in una precisione addestrabile.
Il formato numerico in cui i pesi a 4 bit vengono decompressi per l'aritmetica di ciascun layer e il formato in cui viene addestrato l'adapter. bf16 (bfloat16) mantiene l'intervallo dei float a 32 bit in 16 bit, in modo che i valori raramente vadano in overflow; le GPU NVIDIA lo supportano dalla generazione Ampere in poi. Le GPU meno recenti, come la T4, solitamente eseguono i calcoli in fp16, che ha un intervallo inferiore.
Errori comuni
- Scegliere QLoRA quando il modello è già compatibile con le dimensioni di LoRA. Aggiunge solo tempo all'addestramento.
- Aspettarsi un file di risultato più piccolo. L'adattatore ha le stesse dimensioni di un adattatore LoRA; si riduce solo la memoria di addestramento.
- Cercare di utilizzare QLoRA per adattare un fine-tuning completo. Si applica solo agli adattatori.
- Partire da un modello pubblicato già compresso (FP8, MXFP4). QLoRA quantizza autonomamente un modello a precisione completa, quindi parte dalla versione BF16.
- Caricare l'adattatore su un modello diverso, o su una sua versione diversa, rispetto a quello su cui è stato addestrato.
Riferimenti e letture di approfondimento
Le fonti esterne si aprono in una nuova scheda.
- 01QLoRA: Efficient Finetuning of Quantized LLMsDettmers et al., 2023 · arXiv · arxiv.orgLo studio originale: NF4, doppia quantizzazione, ottimizzatori con paginazione e il risultato di 65B su una singola GPU.
- 02Making LLMs even more accessible with bitsandbytes, 4-bit quantization and QLoRAHugging Face blog, 2023 · huggingface.coUna guida chiara al caricamento a 4 bit e all'addestramento QLoRA nella pratica.
- 03BitsandbytesHugging Face Transformers docs · huggingface.coLe opzioni di caricamento a 4 bit: NF4, doppia quantizzazione e tipo di dato di calcolo.
- 04QuantizationHugging Face PEFT docs · huggingface.co
- 05LLM.int8(): 8-bit Matrix Multiplication for Transformers at ScaleDettmers et al., 2022 · arXiv · arxiv.orgIl precedente lavoro a 8 bit da cui è nata la libreria di quantizzazione di QLoRA.