LoRA vs QLoRA
LoRA and QLoRA train the same small adapter. The difference is the frozen base model: BF16 in LoRA, 4-bit in QLoRA. Here is what that saves in VRAM, per model, and what it costs.
The short answer
Both methods freeze the base model and train the same low-rank adapter, with the same gradients and the same optimizer state. The only difference is how the frozen base is stored. LoRA keeps it at BF16, 2 bytes per parameter. QLoRA stores it as 4-bit NormalFloat with double quantization, about 0.52 bytes per parameter, and dequantizes each layer as it is used. Because the base weights are most of the memory, that one change is most of the saving. You pay for it with slower training steps. On quality, the QLoRA paper reports matching 16-bit fine-tuning on its benchmarks. If LoRA fits your card at the sequence length you need, use it. If it does not, QLoRA is the method that makes the job possible.
LoRA
Base model at BF16. More memory, faster steps, nothing quantized in the path.
QLoRA
Base model at 4-bit NF4. A fraction of the memory, slower steps — the reason fine-tuning fits on a desktop.
LoRA vs QLoRA at a glance
| Factor | LoRA | QLoRA |
|---|---|---|
| Frozen base precision | BF16 — 2 bytes per parameter | 4-bit NormalFloat with double quantization — about 0.52 bytes per parameter |
| What is trained | A low-rank adapter | The same low-rank adapter |
| Gradients and optimizer state | For the adapter only | Identical — for the adapter only |
| Step speed | Faster — the base is used as stored | Slower — each layer is dequantized on the fly |
| Quality | The reference | The QLoRA paper reports matching 16-bit fine-tuning on its benchmarks |
| Output | An adapter file | An adapter file of the same size |
Training VRAM, LoRA vs QLoRA, for four model sizes
| Model | LoRA (BF16 base) | QLoRA (NF4 base) | Saved | Smallest card for QLoRA |
|---|---|---|---|---|
| Qwen3 8B | 18.2 GB | 6.1 GB | 12.1 GB | 8GB |
| Qwen 2.5 Coder 14B Instruct | 31.6 GB | 9.9 GB | 21.8 GB | 12GB |
| DeepSeek R1 Distill Qwen 32B | 67.9 GB | 19.8 GB | 48.1 GB | 24GB |
| Llama 3.3 70B Instruct | 145.5 GB | 41.0 GB | 104.5 GB | 48GB |
Rank 16 on all linear layers, 8-bit AdamW, 1,024-token sequences, batch size 1, gradient checkpointing on — the fine-tuning calculator's defaults, computed by the same function. Includes about 1GB of framework overhead. Activation memory is an approximation; plan with headroom.
Where the saving comes from
Training memory has four parts: the frozen base weights, the gradients, the optimizer state and the activations. LoRA already shrank the middle two. Only the adapter is trained, and it is usually well under 1% of the model, so its gradients and optimizer state are small.
That leaves the base weights as the biggest term by far, and QLoRA goes after exactly that. Storing them in 4-bit instead of BF16 cuts them to roughly a quarter. Everything else stays the same, so the saving you get is almost exactly the size of the base-weight reduction.
The table above is computed with the same function as the fine-tuning VRAM calculator. It uses the calculator's default settings: rank 16 on all linear layers, 8-bit AdamW, a 1,024-token sequence, batch size 1 and gradient checkpointing on. Change any of those in the calculator and both columns move together.
What QLoRA costs you
Speed. The base weights are stored in 4-bit, but the computation runs in higher precision. Each layer is dequantized as the forward and backward passes reach it, so every step does extra work that LoRA skips. If you train for a long time, that difference adds up.
Quality, at least on paper. Quantizing a model you are going to train would hurt it. QLoRA only quantizes the frozen part, and the adapter is computed in higher precision on top. The QLoRA paper (Dettmers et al., 2023) reports matching 16-bit fine-tuning on its benchmarks. Treat that as the published result, and check against your own evaluation set.
One step at deployment. You usually merge an adapter into a BF16 copy of the base, not into the 4-bit weights, and then quantize the merged model for inference. Merging into an already-quantized base is where precision gets lost.
Sequence length can matter more than the method
Both methods leave activation memory unchanged, and activations grow with sequence length and batch size. On long sequences without gradient checkpointing, activations can outgrow the base weights, and at that point switching between LoRA and QLoRA matters much less than the sequence length you choose.
So when a run does not fit, check these three settings before choosing a method: turn on gradient checkpointing, lower the sequence length, and use gradient accumulation instead of a bigger batch. If it still does not fit after that, QLoRA is the next step.
Choose LoRA when
- LoRA fits your card at the sequence length you need
- Training throughput matters — you will run many or long jobs
- You want no quantization anywhere in the training path
- You have a 24GB-plus card and a model that fits it at BF16
Choose QLoRA when
- The BF16 base does not fit in your VRAM
- You want to fine-tune a larger model than your card could otherwise hold
- You are training on a single consumer GPU
- A slower run that finishes beats a faster one that will not start
Work it out for your own setup
Common questions
- Is QLoRA worse than LoRA?
- The QLoRA paper reports matching 16-bit fine-tuning on its benchmarks. That makes sense, because only the frozen base is quantized and the adapter is computed in higher precision. The clear cost is speed. Any quality difference is small enough that you should measure it on your own task rather than assume it.
- How much VRAM does QLoRA save?
- Most of the base-weight memory. BF16 stores 2 bytes per parameter and QLoRA's NF4 with double quantization stores about 0.52, so the frozen weights shrink to roughly a quarter. The table on this page shows the resulting totals per model. The fine-tuning VRAM calculator gives the figure for your own settings.
- Is the adapter from QLoRA different from a LoRA adapter?
- No. It is the same kind of low-rank adapter, and you load it the same way. The difference was only in how the base model was stored while you trained.
- Should I use QLoRA if LoRA already fits?
- Usually not. If the BF16 base fits with room left for your sequence length, LoRA trains faster and removes one variable. QLoRA exists for the cases where LoRA does not fit.
Guides that go deeper
Longer reads on the concepts behind this comparison.
- How Much VRAM Do You Need to Fine-Tune an LLM?LoRA, QLoRA and full fine-tuning, and why sequence length dominates.Read the guide
- LoRA Training VRAM Requirements: Flux, SDXL and SD 3.5Base precision, network rank and caching for image LoRAs.Read the guide
- Quantization Guide: Q4_K_M vs Q8_0 vs FP8What each quant level costs you in memory and quality.Read the guide