The memory bill of a full fine-tune
Weights in bf16 cost 2 bytes each. Gradients cost another 2. Adam keeps two moments in fp32, which is 8 more, plus an fp32 master copy at 4.
A 7-billion-parameter model needs about 112 GB before a single activation is stored, which is more than any single accelerator has.
The weights themselves are only an eighth of that. The optimiser state is the problem, and it is proportional to how many parameters are being trained.
What PEFT changes
Freeze the model and train a small set of new parameters instead. Gradients and optimiser state are then needed only for that set.
With 0.1 percent of the parameters trainable, the same model fits on one 24 GB card, and the arithmetic per step barely changes.
The forward pass is unchanged, so the saving is entirely in what has to be differentiated and remembered.
The four families
- Additive: insert small trainable modules, as adapters do.
- Reparameterised: learn a low-rank update to existing weights, as LoRA does.
- Selective: unfreeze a chosen subset, such as the biases or the last few layers.
- Prompt-based: prepend trainable vectors to the input and change no weights at all.
Reparameterised methods dominate in practice because they add nothing at inference: the update is merged back into the weight matrix and the model runs at its original speed.
What full fine-tuning still wins
A new capability is not the same thing as a new behaviour.
Teaching a model a format, a tone or a task it can already almost do is a behaviour change, and PEFT matches full fine-tuning on those.
Teaching it a genuinely new domain, a new language or knowledge it does not have needs capacity that a low-rank update does not provide.
As a rule of thumb, full fine-tuning pays off above about 100,000 examples and a real domain shift.
Below that, full fine-tuning usually costs twenty times as much for a difference inside the noise of the evaluation.
One decision, in order
- Check whether prompting or retrieval already solves it, since neither trains anything.
- If training is needed, start with LoRA at a small rank.
- Raise the rank before considering a full fine-tune, since that is the cheaper axis.
- Move to full fine-tuning only when more data and more rank have both stopped helping.
- Keep the base model and the adapter separate, because one base can serve many adapters.
That last point is the operational argument. A full fine-tune produces a new 14 GB model per task, and an adapter produces a 20 MB file that loads onto the model already in memory.