外观
参数高效微调(PEFT)面试题
内容整理自学习笔记,仅供面试备考参考;不构成录用、培训或考试承诺。
1. 微调方法概述
| 方法 | 说明 |
|---|---|
| Fine-Tuning(全参微调) | 全部参数参与更新,效果好但资源需求大 |
| 参数高效微调(PEFT) | 含 Prompt/Prefix 类(如 P-Tuning)、重参数化类(如 LoRA)、Adapter 等;只更新少量参数,训练更快、显存更省 |
效果对比:
- 链家 BELLE 实验:FT 效果稍好于 LoRA
- AdaLoRA:在部分设定下可接近甚至优于固定秩 LoRA / 全量微调,但并非在所有任务上全面碾压 FT
2. 为什么需要 PEFT?
| 问题 | PEFT 解决方案 |
|---|---|
| Full Fine-Tuning 太低效 | 最小化微调参数量和计算复杂度 |
| 固定部分层微调效果差 | 通过高效微调技术保持模型性能 |
| 计算资源受限 | 即使资源有限也能利用预训练模型快速适应新任务 |
| 灾难性遗忘 | PEFT 可缓解全量微调带来的灾难性遗忘问题 |
3. PEFT 的优点
- 提高模型效果的同时大幅缩短训练时间和计算成本
- 让更多人能够参与深度学习研究
- 缓解全量微调的灾难性遗忘问题
4. 不同微调方法的显存与速度对比(以 LoRA 为例)
| 方法 | Batch Size | 精度 | GPU 显存 | 速度 |
|---|---|---|---|---|
| LoRA (r=8) | 16 | FP16 | 28GB | 8ex/s |
| LoRA (r=8) | 8 | FP16 | 24GB | 8ex/s |
| LoRA (r=8) | 4 | FP16 | 20GB | 8ex/s |
| LoRA (r=8) | 4 | INT8 | 10GB | 8ex/s |
| LoRA (r=8) | 4 | INT4 | 8GB | 8ex/s |
| P-Tuning (p=16) | 4 | FP16 | 20GB | 8ex/s |
| Freeze (l=3) | 4 | FP16 | 24GB | 8ex/s |
5. PEFT vs 全量微调
核心差异:LoRA 等 PEFT 方法本质上是低秩的,无法对模型产生决定性改变(更多是改变风格而非知识)。全量微调仍然可以改变模型知识。
6. 各类 PEFT 方法对比
按参与参数量分类
| 类别 | 代表方法 | 参数量级 |
|---|---|---|
| 增加额外参数 | Prefix Tuning、Prompt Tuning、Adapter Tuning | 0.01%-3% |
| 选取部分参数更新 | BitFit | 0.1% |
| 引入重参数化 | LoRA、AdaLoRA、QLoRA | 百万-千万级 |
| 混合高效微调 | MAM Adapter、UniPELT | 组合 |
按评估规模分类
| 方法 | 评估模型规模 |
|---|---|
| Prompt Tuning | <1B, <20B, >20B |
| Prefix Tuning | <1B, <20B |
| LoRA | <1B, <20B, >20B |
7. 方法选型建议
| 场景 | 推荐 |
|---|---|
| 显存资源有限 | QLoRA |
| 简单任务场景 | P-Tuning、Prompt Tuning |
| 综合效果 | P-Tuning v2、LoRA |
8. 当前 PEFT 技术存在的问题
| 问题 | 说明 |
|---|---|
| 参数计算口径不一致 | 可训练参数数量 vs 实际参与训练的参数数量差异(如 DiffPruning 更新 0.5% 但实际参与 200%) |
| 缺乏模型规模考虑 | 大模型需要更新的参数量比例更小 |
| 缺乏统一评测基准 | 不同方法使用不同模型/数据集/评价指标组合 |
| 代码可读性差 | 很多开源代码简单拷贝 Transformer 库后小修小补 |
| 推理速度变慢 | 大多数 PEFT 方法的推理速度比全参微调慢 |
| 模型精度变差 | 相比全参微调,大部分 PEFT 方法存在精度损失 |
9. 最佳实践
- 明确声明参数数量类型(可训练参数 vs 实际参与参数)
- 使用不同大小的模型进行评估
- 和类似方法进行公平比较
- 标准化 PEFT 测量基准
- 重视代码清晰度,以最小化实现