ANAlpesh Nakrani
SolutionsBlogBooksPraiseAboutWork with me
Back to the blog
Blog/Jul 19, 2026 · 11 min

LoRA vs Full Fine-Tuning: When Each Wins in 2026

LoRA matches full fine-tuning on most narrow tasks for a fraction of the GPU cost. Full fine-tuning still wins on code, math, and deep domain shifts.

The direct answer to LoRA vs full fine-tuning: LoRA trains a small set of low-rank adapter weights instead of touching every parameter, and it matches full fine-tuning on most narrow, in-domain tasks while using a fraction of the GPU memory and compute. Full fine-tuning still wins when the task needs a real shift in the model's underlying behavior, the kind you find in heavy domain adaptation or in code and math tasks where LoRA's low-rank updates run out of room.

I have watched teams burn a full fine-tuning budget, a multi-GPU cluster and a week of babysitting a training run, on a task a LoRA adapter would have handled from a single GPU over a weekend. I have also watched a LoRA'd code model pass every training-loss check and then quietly underperform on the eval set that mattered, because a low rank was never going to capture what the task needed. Both mistakes come from treating this as a default instead of a decision.

This is one of the deep dives under my guide to fine-tuning, and it exists because "just use LoRA" has become the same kind of unexamined default that "just use RAG" was two years ago. The method is right most of the time. Knowing the cases where it is wrong is the actual skill, and it is a judgment call, not a setting.

Key takeaways

  • LoRA trains a fraction of the parameters. The original LoRA paper found 10,000 times fewer trainable parameters and a threefold cut in GPU memory versus full fine-tuning GPT-3 175B, with no loss in quality on most benchmarks and no added inference latency.
  • QLoRA puts a 65B model within reach of one GPU. Combining 4-bit quantization with LoRA adapters, researchers fine-tuned a 65-billion-parameter model on a single 48GB GPU in about a day.
  • LoRA underperforms full fine-tuning on code and math. At standard rank, the gap is real and specific to tasks that need substantial reasoning shifts, and it will not show up in your training loss.
  • LoRA forgets less because it learns less. Full fine-tuning learns weight updates with 10 to 100 times higher rank than typical LoRA configurations, which is also why it erodes out-of-domain performance more.
  • Closing LoRA's gap costs back its savings. Raising rank or adding target modules narrows the quality gap but eats into the memory and compute advantage that made LoRA the default.

What LoRA vs full fine-tuning actually changes

Full fine-tuning updates every weight in the model. You load the full parameter set, backpropagate through all of it, and store an optimizer state proportional to the whole model, which is why a 7B model can need 60GB or more of GPU memory for training state alone, before you have processed a single batch.

LoRA, short for Low-Rank Adaptation, freezes the base weights and inserts small trainable matrices next to specific layers. Only those adapter matrices update during training. At inference, you either keep them as a separate pass-through or merge them back into the base weights, and either way the model runs at the same latency as the unmodified version.

The practical difference: full fine-tuning changes what the model is. LoRA changes what the model does on top of what it already is. For a narrow task, that second thing is usually all you need.

LoRA changes what the model does on top of what it already is. Full fine-tuning changes what the model is.

How LoRA works: rank, adapters, and target modules

LoRA's adapters live at a small set of layers, usually the attention projections, and their size is set by a single number: the rank. A low-rank adapter on a 7B model might train under a tenth of one percent of the total parameters. A higher-rank adapter trains more, and captures more, but starts eating back into the savings that made LoRA attractive in the first place.

Two choices matter more than most tuning guides admit: which layers get adapters (target_modules), and how high you set the rank. Attach adapters only to the query and value projections and you save the most memory. Attach them to every linear layer, including the MLP blocks, and you close more of the quality gap at a real memory cost. A typical starting config for a mid-sized decoder model looks like this:

# typical LoRA starting config, 7B-class decoder model
rank: 16
alpha: 32
target_modules: [q_proj, v_proj]
trainable_params: roughly 0.1% of the base model

Push the rank up, or add the MLP layers to target_modules, when the base config underperforms on your eval set. That is the lever you pull before you reach for full fine-tuning, and it usually gets you most of the way there.

QLoRA: fine-tuning a 65-billion-parameter model on one GPU

QLoRA answers what happens when you pair LoRA with aggressive quantization. Dettmers and colleagues quantized the frozen base model to 4-bit precision, then trained LoRA adapters on top in higher precision, and used it to fine-tune a 65-billion-parameter model on a single 48GB GPU in about 24 hours (Dettmers et al., 2023). The resulting Guanaco models reached 99.3% of ChatGPT's performance level on their benchmark, while matching the quality of full 16-bit fine-tuning.

That is the number that moved fine-tuning off the infrastructure team's roadmap and onto a single engineer's GPU. It is also why QLoRA, not vanilla LoRA, is what most teams reach for by default in 2026: the memory savings compound, and the quality cost is close to zero for tasks LoRA was already suited to.

Where full fine-tuning beats LoRA: code and math

Here is the trade-off LoRA's advocates undersell. "LoRA Learns Less and Forgets Less," a 2024 study given a TMLR Featured Certification, found LoRA substantially underperforms full fine-tuning specifically on code and math tasks (Biderman et al., 2024). Those are exactly the domains where teams most want a fine-tune to work, and the paper explains why: full fine-tuning learns weight perturbations with rank 10 to 100 times higher than a typical LoRA configuration. Code and math need that much capacity to shift; standard-rank LoRA does not have it to give.

Picture a team fine-tuning a code-repair model at the default rank most tutorials recommend. Training loss drops cleanly, the run finishes in an afternoon, and everything looks fine until someone runs the held-out eval set for multi-step refactors. The pass rate lags full fine-tuning by a real margin the loss curve never showed. That gap is the honest cost of low-rank updates. It stays invisible until you measure the thing that matters, which is why an eval suite, not a training log, tells you whether the cheaper method worked.

The gap doesn't show up in training loss. It shows up in eval, and eval is the number most teams stop watching once the loss curve looks good.

Why LoRA forgets less than full fine-tuning

The same rank gap that hurts LoRA on code and math is what protects it from catastrophic forgetting. Because LoRA's updates stay low-rank, they nudge the model's behavior on your task without overwriting the broad capability the base model already has. Full fine-tuning has no such constraint. It is free to move the weights however far the gradient wants, and on a narrow dataset that often means moving them further than the task strictly needs.

I have seen a full fine-tune trained for a policy-compliance task come back with a genuine regression on ordinary instruction-following, the kind of thing nobody tests for because nobody expected a compliance fine-tune to touch it. That regression ships silently. It shows up in support tickets weeks later, not in a training log the week you shipped. The Biderman paper's finding backs this up: LoRA preserved more out-of-domain performance than full fine-tuning, and more than standard regularization like weight decay and dropout applied to full fine-tuning. If your production system needs to stay competent at things outside the fine-tuning task, that is not a footnote. It is the main argument for LoRA that has nothing to do with cost.

A fine-tune that forgets less is not a consolation prize. It is the difference between a model you can trust outside its lane and one you can't.

LoRA vs full fine-tuning: GPU memory, cost, and training time

The infrastructure gap is where LoRA's case is least debatable. Here is the shape of it, drawn from the published benchmarks:

DimensionFull fine-tuningLoRAQLoRA
Trainable parameters100% of the modelRoughly 0.1% to 1%Roughly 0.1% to 1%
GPU memory (rule of thumb)About 4x model size for optimizer stateBase model plus a small adapterBase model at 4-bit plus a small adapter
Hardware for a 65B modelMulti-GPU clusterSingle high-memory GPUSingle 48GB GPU
Inference latencyUnchangedUnchanged once mergedUnchanged once merged

Those numbers come from the original LoRA and QLoRA papers, not a vendor's slide deck (Hu et al., 2021; Dettmers et al., 2023). The GPT-3 175B benchmark in the LoRA paper reported 10,000 times fewer trainable parameters and a threefold reduction in GPU memory versus full fine-tuning, with equal or better quality on RoBERTa, DeBERTa, GPT-2, and GPT-3, and no added inference latency. That last part matters as much as the memory number: a merged LoRA adapter is indistinguishable from a fully fine-tuned model once it is serving traffic.

A support-tone fine-tune I have seen run this way: the LoRA version trained on a single GPU over a weekend, at a cost closer to a few hundred dollars than a few thousand, and matched the full fine-tune's quality on the tone and format the task needed. The team never needed the cluster, and the eval suite confirmed it rather than a hunch.

LoRA vs full fine-tuning: a decision framework

Collapse the decision to five questions, in order:

  1. Is the task narrow and in-domain, close to what the base model already does well? Start with LoRA.
  2. Do you have fewer than a few thousand clean examples? LoRA needs less data to reach a useful result; full fine-tuning on a small dataset tends to overfit before it converges.
  3. Does the task require a heavy reasoning shift, like code generation or multi-step math? Budget for full fine-tuning, or plan to raise LoRA's rank and target modules until it closes the eval gap, and price that against a full fine-tune before you commit.
  4. Do you need the model to stay competent outside this task? LoRA's lower forgetting is the deciding factor.
  5. Is GPU budget the binding constraint? QLoRA is often the right starting point.

If you are earlier than this, still deciding whether to fine-tune at all versus prompting or routing to a bigger model, that decision comes first. I lay out the fuller framework, including when not to fine-tune, in Fine-Tuning or Not, and the companion piece on when to fine-tune in the first place covers the decision one level up from this one.

Tools that support each method

Every major fine-tuning tool defaults to LoRA now, which tells you where the field landed. Hugging Face's PEFT library is the reference implementation most other tools wrap. Together AI's fine-tuning docs set LoRA as the default outright, calling it "faster, cheaper, and the right choice for most use cases," and reserve full fine-tuning for when "base behavior needs to shift substantially" (Together AI, 2026). Axolotl and Unsloth both optimize specifically for LoRA and QLoRA workflows, with Unsloth's kernel optimizations cutting training time and memory further on top of the method's existing savings.

None of these tools defaults to full fine-tuning, and that default is doing real work. It is a bet, backed by production use across thousands of fine-tuning jobs, that most tasks do not need it. Trust the default until your eval tells you otherwise.

Whichever method you pick, the training data is doing more of the work than the algorithm. If your examples are noisy or your dataset is thin, generating synthetic data to fill the gaps often moves the needle further than switching from LoRA to full fine-tuning ever will.

Is LoRA as good as full fine-tuning?

On most narrow, in-domain tasks, yes. LoRA matches or comes close to full fine-tuning quality while training a fraction of the parameters. The exception is tasks that need a substantial shift in reasoning, like code generation and math, where full fine-tuning's higher-rank updates give it a real, measurable edge.

When should I use full fine-tuning instead of LoRA?

Use full fine-tuning when your eval shows a meaningful gap on a code- or math-heavy task, or when the task requires deep domain adaptation through continued pretraining rather than a narrow behavioral nudge. If raising LoRA's rank and target modules closes the gap at a cost you can live with, stay with LoRA.

What's the difference between LoRA and QLoRA?

LoRA trains small adapter matrices on top of a frozen base model in its native precision. QLoRA adds 4-bit quantization to that frozen base, which cuts memory further and is what let researchers fine-tune a 65-billion-parameter model on a single 48GB GPU.

How much GPU memory does LoRA save compared to full fine-tuning?

The original LoRA paper reported roughly a threefold reduction in GPU memory and 10,000 times fewer trainable parameters versus full fine-tuning GPT-3 175B. In practice, the gap is largest on bigger models, where full fine-tuning's optimizer state becomes the dominant memory cost.

If you are deciding between LoRA and full fine-tuning for a real production system, the training run is the easy part. The harder part is building the eval that tells you which one worked, before a customer finds the gap for you. That is the work ViitorCloud's ML engineers do for teams shipping fine-tuned models, from picking the method to instrumenting the eval that catches the gap early.

Share
Next

Keep reading

View all blogs

Ask AI about LoRA vs Full Fine-Tuning: When Each Wins in 2026