Adapters
Before LoRA, there were adapters β the method that founded PEFT in 2019. The idea: leave the pretrained model frozen and insert small trainable modules between its layers. Train ~1β3% of the parameters, get ~96% of full fine-tuning's quality. LoRA later refined the approach, but adapters introduced the principle every PEFT method still follows: freeze the model, train something small.
π‘ In one line: Adapters are small trainable modules inserted into a frozen model's layers β the original parameter-efficient fine-tuning method.
What Are Adapters?
An adapter is a small neural module inserted inside each transformer block. The base model is frozen; only the adapter layers train. Introduced by Houlsby et al. (2019), they showed you could match full fine-tuning while training a tiny fraction of the weights.
The Bottleneck Architecture
Each adapter is deliberately tiny, using a down-up structure:
- Down-project β d dimensions β m (where m βͺ d).
- Non-linearity β usually ReLU or GeLU.
- Up-project β m β d dimensions.
- Residual connection β add back to the input.
That bottleneck (m) is what keeps the parameter count small β it's the adapter's equivalent of LoRA's rank r.
Near-identity initialisation matters: the adapter starts as roughly a no-op, so inserting it doesn't damage the pretrained model β it learns its contribution from there.
Adapters vs. LoRA: Sequential vs. Parallel
This is the key architectural distinction:
- Adapters are sequential β they sit in the data path. Input flows through them, which adds inference latency.
- LoRA is parallel β it runs alongside the frozen weights and can be merged in, giving zero added latency.
| Adapters | LoRA | |
|---|---|---|
| Placement | Inside the layer (sequential) | Beside the weights (parallel) |
| Mergeable | No | Yes |
| Inference cost | Adds latency | Zero (if merged) |
| Params | ~1β3% | ~0.1β1% |
That mergeability is why LoRA won as the default β but adapters remain the conceptual foundation.
The PEFT Family
"Adapter" is also used broadly for the whole family of insert-something-small methods:
| Method | What it trains |
|---|---|
| Bottleneck adapters | Inserted down-up modules |
| LoRA | Low-rank matrices beside the weights |
| Prefix tuning | Trainable vectors prepended to each layer's keys/values |
| Prompt tuning | Trainable soft prompt embeddings at the input |
| IAΒ³ | Learned rescaling vectors (extremely few params) |
| BitFit | Only the bias terms |
They share one principle: freeze the base, train a small addition.
Choosing a PEFT Method
Composability: the Adapter Advantage
Because adapters are discrete modules, they can be combined:
- Stack them β several adapters in sequence.
- Fuse them β AdapterFusion learns to combine knowledge from multiple task adapters.
- Route them β pick an adapter per input.
This modularity remains adapters' strongest argument, and it inspired multi-LoRA serving (one base, many adapters swapped at runtime).
Why Adapters Still Matter
- They founded PEFT β the principle behind LoRA, QLoRA, and the rest.
- They're strongly modular and composable.
- They're well-studied for multi-task and cross-lingual transfer.
In practice, though, LoRA is the default in 2026 β mergeability and simplicity won.
Trade-offs
- Inference latency β they're in the data path and can't merge.
- More parameters than LoRA for similar quality.
- Architecture changes β modules must be inserted into the model.
- Bottleneck size trades capacity against cost.
Tooling
Hugging Face PEFT covers LoRA, prefix/prompt tuning, and IAΒ³. AdapterHub / adapters is the dedicated library for classic bottleneck adapters, AdapterFusion, and adapter composition.
Summary
- Adapters insert small trainable modules into a frozen model β the original PEFT method.
- Their bottleneck (down β non-linear β up β residual) keeps parameters at ~1β3%.
- They're sequential (add latency, can't merge); LoRA is parallel (mergeable, zero overhead).
- The PEFT family β LoRA, prefix/prompt tuning, IAΒ³, BitFit β all share: freeze the base, train a small addition.
- Adapters excel at modularity and composition (AdapterFusion), but LoRA is the practical default.