PEFT LoRA 怎样选择目标模块
PEFT LoRA 的目标模块应从模型真实结构和训练预算出发选择:先查看模块名称,再决定是只覆盖部分注意力投影、扩大注意力范围,还是使用 target_modules="all-linear" 覆盖更广的线性模块。q_proj、v_proj 不是所有模型通用的固定名称,覆盖更多模块也不保证任务效果更好。
官方地址:https://huggingface.co/docs/peft/
面对第一次微调的配置选择,我更倾向于先确认“究竟改了哪些层”,再决定要不要扩大。下面的判断属于配置建议,不是一次已经完成的训练复盘;示例代码未在本文环境执行,也没有虚构显存或准确率结果。
先把模块名字和任务范围分开
以某些具有独立注意力投影的模型为例,可能看到 q_proj、k_proj、v_proj、o_proj。它们描述的是模型里的模块名称,不是“某任务必须选择”的清单。另一些架构把多个投影融合成一个模块,照搬名称会导致找不到目标。
对已经加载的基础模型,可以查看模块名和类型:
# base_model 是你按模型官方方法加载的基础模型,此处不下载模型。
# 先看结构,不依赖从其他架构教程复制过来的名称。
for name, module in base_model.named_modules():
if name:
print(name, type(module).__name__)
先确定实际模型中的模块属于什么类型,再使用对应后缀或完整路径。不要只在参数名里搜到一个相似单词,就认定它是可用的模块;named_modules() 与 named_parameters() 看到的对象不同。

显式列表与 all-linear 各适合什么情况
| 选择 | 适合的起点 | 主要代价或限制 |
|---|---|---|
| 少量投影模块 | 预算紧,希望先建立范围清楚的基线 | 可能不足以适应任务,需要后续对照 |
| 扩大到更多注意力投影 | 已有基线,想观察注意力覆盖的变化 | 名称依赖架构,新增参数通常增多 |
| all-linear | 希望更广覆盖,且预算允许 | 不是“所有参数”,仍有类型和输出层规则 |
当前 LoraConfig 文档规定:列表按精确名称或后缀匹配,字符串通常作为正则表达式处理;特殊字符串 all-linear 用于选择 linear/Conv1D 模块。对于 PreTrainedModel,输出层会排除。它不是给嵌入、归一化和任意参数全部增加 LoRA 的开关。
省略 target_modules 时,PEFT 会依据已知模型架构选择目标;未知架构可能报错。因此“默认能工作”不代表默认目标就是你的最佳目标。我会把明确的目标列表一并记入实验记录,便于解释差异。
把选中的名称写成最小配置
下面只适用于结构中确实存在独立 q_proj 与 v_proj、且对应层受当前 PEFT 支持的因果语言模型。秩和缩放值用于演示配置,不是调参结论:
from peft import LoraConfig, get_peft_model
# 仅在当前模型确有这两个模块后缀时使用。
config = LoraConfig(
task_type="CAUSAL_LM",
target_modules=["q_proj", "v_proj"],
r=8,
lora_alpha=16,
lora_dropout=0.05,
bias="none",
)
# 注入适配器后,查看实际可训练参数;这里还没有开始训练。
model = get_peft_model(base_model, config)
model.print_trainable_parameters()
如果改为广覆盖方案,使用另一次独立加载的基础模型构建配置,并把 target_modules 改为字符串 "all-linear"。不要在已经注入适配器的同一模型上反复调用注入来充当干净的方案对比,也不要同时改变数据集与优化器后把差异全归因于目标范围。
构造成功只是最低条件。读者实际执行时,应看最终哪些模块带有适配器、可训练参数是否符合预期,并记录模型标识和 PEFT 版本。本文不提供伪造的输出数字。
我会怎样安排三种范围的对照
我的选择顺序是先用一个解释得清楚的窄范围作为预算基线,再尝试扩大注意力覆盖,最后比较广覆盖方案。这个顺序便于归因,并不是说窄范围一定更好。若任务本身要求更广适应、资源也足够,可以直接把广覆盖放进候选方案。
对于普通线性权重,LoRA 新增矩阵的参数量约为 r × (输入维度 + 输出维度);总量还要对目标模块求和,并考虑额外可训练组件。因此相同的秩 r,放在不同宽度、不同数量的层上,预算不同。不要只比较秩而忽略目标模块集合。

比较时固定训练与评估数据划分、训练步数、优化设置和基础模型,分别记录新增参数量、资源开销、任务指标与具体失败样例。预算变化和评估结果是两个独立维度,图中的连接只表示决策时共同考虑,不代表参数更多必然带来更高分。
遇到特殊结构时不要硬套目标列表
如果一个 MoE 专家权重以 nn.Parameter 保存,而不是独立的 nn.Linear 模块,普通目标模块名不一定覆盖它。当前 PEFT 为这类情况提供 target_parameters;需要按模型实现和所用版本的支持范围单独配置,不应把普通模型的列表当成保证。
modules_to_save 也不是另一种目标模块列表:它用于让指定的额外模块可训练并随适配器保存,可能显著改变训练预算。只有确有任务需求时才加入,不能为了消除报错而把输出头或整个模型随意塞进去。
找不到 q_proj 应该怎么办?
回到模型真实结构,确认是否使用不同名称或融合投影,然后按受支持类型选择。改一个看起来相似的字符串不能保证语义一致。
all-linear 会自动启用量化吗?
不会。目标范围和基础模型的量化加载是不同配置,本篇仅讨论目标选择。
秩调大能代替扩大目标范围吗?
两者改变的内容不同:秩影响单个适配器容量,目标范围决定在哪些模块增加适配器。应作为不同实验条件比较。
官方 LoRA 配置说明:https://huggingface.co/docs/peft/en/package_reference/lora
Transformers 怎样区分 max_length 与 max_new_tokens
- 上一篇
- Transformers 怎样区分 max_length 与 max_new_tokens
- 下一篇
- Transformers 批量生成时 padding_side 为什么重要
-
- 科技周边 · 人工智能 | 12分钟前 | padding attention_mask Tokenizers encode_batch
- Tokenizers 怎样批量编码并返回 attention mask
- 204浏览 收藏
-
- 科技周边 · 人工智能 | 13分钟前 |
- Diffusers 怎样比较不同 scheduler 的采样取舍
- 134浏览 收藏
-
- 科技周边 · 人工智能 | 17分钟前 | 模型 · 人工智能 · model space dataset Hub Hugging Face Collections
- Hugging Face Collections 如何把模型、数据集和 Space 归组管理
- 160浏览 收藏
-
- 科技周边 · 人工智能 | 34分钟前 | 人工智能 · 深度学习 · PyTorch DataLoader Accelerate 多进程训练 split_batches dispatch_batches
- Accelerate 怎样准备多进程数据加载器
- 222浏览 收藏
-
- 科技周边 · 人工智能 | 34分钟前 |
- Transformers 批量生成时 padding_side 为什么重要
- 270浏览 收藏
-
- 科技周边 · 人工智能 | 40分钟前 |
- Transformers 怎样区分 max_length 与 max_new_tokens
- 373浏览 收藏
-
- 科技周边 · 人工智能 | 16小时前 | Parquet DuckDB row group Hive 分区 predicate pushdown
- DuckDB 查询远程 Parquet 为什么要关注分区和行组大小
- 160浏览 收藏
-
- 科技周边 · 人工智能 | 16小时前 |
- DuckDB 读取 Hive Parquet 怎么把日期分区列带出来
- 488浏览 收藏
-
- 科技周边 · 人工智能 | 16小时前 |
- Hydra 运行时怎么用波浪号移除一个默认配置组
- 239浏览 收藏
-
- 科技周边 · 人工智能 | 16小时前 | python · Pydantic validate_call validate_return Python类型校验
- Pydantic validate_call 为什么默认不校验函数返回值
- 117浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- PubMedQA
- 深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
- 985次使用
-
- H2O EvalGPT
- H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
- 991次使用
-
- LMArena
- LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
- 1112次使用
-
- HELM
- 深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
- 1081次使用
-
- MMBench
- MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
- 926次使用
-
- 量化模型本地推理的显存估算方法
- 2026-10-17 501浏览
-
- 本地大模型反复输出同一句话怎么调整生成参数
- 2026-09-06 501浏览
-
- Python 调用大模型时如何用结构化输出校验 JSON:从解析失败到可重试
- 2026-08-29 501浏览
-
- AI写作工具免费版安装教程(含豆包Clawdbot)
- 2026-05-30 501浏览
-
- WPS AI能自动生成PPT吗?输入主题一键制作演示文稿
- 2026-05-27 501浏览

