扩展:参数高效微调方法
在线 Notebook
对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。
所属章节: 第 5 章:LLM 基础 | 5.4 微调与 LoRA
比较维度
参数高效微调(PEFT)冻结大部分基础模型参数,只训练新增或选定参数。比较方法时不要只看“可训练参数占比”,还要检查:
- 基础权重的存储精度和训练时峰值显存;
- 是否需要保存梯度、优化器状态和激活;
- 模型推理时能否合并权重,是否占用上下文长度;
- 目标任务指标和未训练任务的能力变化;
- 当前模型、硬件和训练框架是否支持该方法。
LoRA 与变体
LoRA
LoRA 用低秩矩阵
rank、目标模块和插入层数共同决定可训练参数量。适配器可独立保存,也可在部署前合并到基础权重。
QLoRA
QLoRA 以低比特格式存储冻结的基础权重,同时用较高精度训练 LoRA 参数。它主要减少基础权重占用的显存,不会消除激活、LoRA 梯度和优化器状态。
量化格式、计算数据类型、序列长度、batch size 和是否使用梯度检查点都会影响可训练的模型规模。不能仅根据参数量和显卡容量给出固定可运行结论。
AdaLoRA
AdaLoRA 在固定参数预算下动态调整不同矩阵的秩。它增加了重要性估计和秩调度,是否优于固定 rank 的 LoRA 取决于任务、预算和调参方式。
DoRA
DoRA 将权重变化拆成幅度与方向部分,方向更新可使用 LoRA 参数化。它改变了更新约束,但并不保证达到全量微调结果;需要在相同数据和训练预算下比较。
其他 PEFT 方法
Prefix Tuning
Prefix Tuning 在多层注意力中加入可训练前缀。基础参数保持冻结,但前缀会增加注意力序列长度和 KV cache 占用。
Prompt Tuning
Prompt Tuning 只在输入端加入可训练的连续向量。参数量少,但表达容量和效果对模型规模、初始化及任务较敏感。
Adapter
Adapter 在 Transformer block 中插入小型瓶颈网络。它便于按任务切换模块,但通常增加模型推理算子,不能像 LoRA 那样直接合并为同形状的原权重。
方法属性
| 方法 | 训练对象 | 基础权重量化 | 可合并到原权重 | 主要额外代价 |
|---|---|---|---|---|
| 全量微调 | 全部参数 | 可选 | 不适用 | 梯度与优化器状态 |
| LoRA | 低秩更新 | 可选 | 通常可以 | 适配器训练状态 |
| QLoRA | 低秩更新 | 是 | 视部署流程而定 | 量化/反量化与适配器状态 |
| AdaLoRA | 动态秩更新 | 可选 | 通常可以 | 秩分配与调度 |
| DoRA | 幅度与低秩方向 | 可选 | 取决于实现 | 更多更新参数与算子 |
| Prefix Tuning | 各层前缀 | 可选 | 否 | 上下文和 KV cache |
| Prompt Tuning | 输入软提示 | 可选 | 否 | 输入 token 长度 |
| Adapter | 瓶颈模块 | 可选 | 通常不能 | 模型推理层与模块管理 |
表格描述结构属性,不是效果排名。
最小选择实验
建议先固定基础模型、训练样本、总更新步数和评价集,再比较:
- 未微调模型;
- 一个低 rank LoRA;
- 一个较高 rank LoRA;
- 显存不足时再加入 QLoRA;
- 只有在基线暴露明确瓶颈后,再加入 AdaLoRA、DoRA 或其他方法。
记录目标指标、能力保持、峰值显存、训练时间、适配器大小和模型推理延迟。这样才能判断参数减少是否换来了可接受的质量和工程收益。
工具说明
Hugging Face PEFT、LLaMA-Factory、Axolotl 等工具可以实现多种微调方法。工具版本和支持模型会变化,应以项目锁定的依赖和实际 smoke test 为准,不在教程中维护固定速度排名。
返回: 第 5 章:LLM 基础
