为什么需要 PEFT
P0 · llm_training
📊 考点:peft · fine-tuning · lora
🏷 标签:memory-efficiency
1️⃣ 考察意图
面试官想看你是否真正理解大模型落地的工程瓶颈,而非只会背“PEFT 省显存”。考察类型是工程取舍 + 系统设计。刁钻点在于:很多人只答“显存不够”,但面试官更想听你拆解全参数微调到底“贵”在哪(优化器状态、梯度、参数三件套),以及 PEFT 如何通过“冻结 + 小参数量”同时解决显存、灾难性遗忘和多任务部署三个问题。答好了能展示你对训练基础设施的深刻理解,以及从“能用”到“好用”的工程思维。
2️⃣ 标准答
PEFT(Parameter-Efficient Fine-Tuning)的必要性源于全参数微调(Full Fine-Tuning)在三个维度的不可持续:显存爆炸、灾难性遗忘、多任务部署成本。
1. 显存开销:全参数微调是“显存黑洞”
- 以 LLaMA-13B 为例,模型参数占 13B × 2 bytes(FP16)= 26GB。
- 但训练时还需要存储:优化器状态(Adam 需 2 倍参数量的动量+方差,即 52GB)、梯度(26GB)、激活值(取决于 batch size 和序列长度,通常 20-50GB)。合计轻松超过 100GB,单张 A100(80GB)根本放不下。
- 而 LoRA 只更新低秩矩阵(如 rank=8),可训练参数量从 13B 降到 ~0.1%,显存需求降至 ~20GB(仅需存储 LoRA 权重 + 冻结模型的梯度/激活值)。为什么这么做:牺牲一点下游任务精度(通常 <1%),换取 5-10 倍显存节省。
2. 灾难性遗忘:全参数微调是“知识橡皮擦”
- 全参数微调会剧烈改变预训练权重,导致模型在通用能力(如常识推理、多语言)上退化。例如,用代码数据全参数微调后,模型在 MMLU 上可能掉 5-10 个点。
- PEFT 冻结 99.9% 的预训练参数,只在小规模适配器上学习任务特定模式。实际落地的坑:有团队在金融场景全参数微调后,模型连“1+1=2”都答错,回退到 LoRA 后通用能力保留,金融准确率只降 0.3%。
3. 多任务部署:全参数微调是“存储噩梦”
- 假设需要 100 个下游任务,全参数微调需要保存 100 份完整模型(每份 26GB+),总存储 >2.6TB。
- PEFT 只需保存 1 份基础模型 + 100 个轻量适配器(每个 LoRA 权重 ~10MB),总存储 <30GB。工程取舍:推理时通过动态加载适配器实现“一卡多任务”,但需要额外的前置路由逻辑(如根据 query 选择适配器)。
4. 常见 PEFT 方法对比
- LoRA:最主流,在 attention 的 Q/K/V/O 上插入低秩矩阵。优点:推理时可将 LoRA 权重合并到原权重,无额外延迟。缺点:对高秩任务(如代码生成)效果略差。
- Prefix Tuning:在每层 attention 前插入可学习的虚拟 token。优点:参数量更小(~0.01%)。缺点:推理时需拼接 prefix,增加序列长度,延迟上升 10-20%。
- Adapter:在 Transformer 层内插入 bottleneck 结构。优点:可插拔,支持多任务切换。缺点:推理时需串行计算,延迟增加 5-15%。
实际落地的坑 + 解法:LoRA 的 rank 选择。rank=8 通常够用,但若任务与预训练分布差异大(如法律条文生成),rank 需提升到 32-64。解法:先用 rank=8 跑 100 步,观察 loss 下降曲线,若收敛慢则倍增 rank。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从显存开销、灾难性遗忘、多任务部署三个层面回答。显存层面,全参数微调需要存储参数、梯度、优化器状态三件套,13B 模型轻松超 100GB,而 LoRA 只需 ~20GB。灾难性遗忘层面,全参数微调会破坏预训练知识,PEFT 冻结大部分参数保留通用能力。多任务层面,100 个任务全参数微调需 2.6TB 存储,PEFT 只需 30GB。总结一句:PEFT 不是‘省显存’的权宜之计,而是让大模型从‘实验室玩具’变成‘可落地产品’的工程基石。”
4️⃣ 高频追问 & 应对
追问 1:LoRA 的 rank 怎么选?为什么 rank=8 是默认值?
这是经验值,基于两个观察:一是预训练权重本身是低秩的(Aghajanyan et al., 2020),二是下游任务通常只需要在少数方向微调。rank=8 在大多数 NLP 任务上能恢复全参数微调 90%+ 的效果。但若任务需要学习全新知识(如领域术语映射),rank 需提升到 32-64。工程上建议:先用 rank=8 跑 100 步看 loss 下降速度,若慢则倍增 rank,同时监控验证集指标避免过拟合。
追问 2:PEFT 和全参数微调在推理延迟上有什么区别?
关键看方法。LoRA 推理时可将低秩矩阵合并到原权重(W_new = W + BA),延迟为 0。Prefix Tuning 需要拼接虚拟 token,序列长度增加,延迟上升 10-20%。Adapter 需要串行计算 bottleneck 层,延迟增加 5-15%。所以生产环境首选 LoRA,除非任务需要极低参数量(如移动端部署)。
追问 3:如果任务数据量很大(比如 100 万条),PEFT 效果会不会不如全参数微调?
会。数据量足够大时,全参数微调能学到更复杂的模式,PEFT 受限于低秩假设可能欠拟合。解法:先用 LoRA 快速验证,若效果不达标,改用 DoRA(权重分解 LoRA)或混合训练(先 LoRA 再全参数微调最后几层)。实际案例:某电商用 LoRA 微调 50 万条商品描述,ROUGE-L 比全参数微调低 2 个点,改用 DoRA 后差距缩小到 0.5 个点。
5️⃣ 避坑 · 常见错误答法
- ❌ 只答“PEFT 省显存,因为只更新少量参数” → ✅ 必须拆解显存构成:参数(26GB)+ 梯度(26GB)+ 优化器状态(52GB)+ 激活值(20-50GB),并给出具体数字对比。
- ❌ 说“PEFT 效果和全参数微调一样好” → ✅ 承认 trade-off:PEFT 在数据量小时效果接近,但数据量大或任务分布差异大时可能欠拟合,需要 DoRA 或混合训练弥补。
- ❌ 把 LoRA 和 Prefix Tuning 混为一谈 → ✅ 明确区分:LoRA 修改权重,推理无延迟;Prefix Tuning 修改输入,推理有延迟。
6️⃣ 简历呼应
- 如果你有 RAG 项目:从“多任务部署”切入,讲如何用 LoRA 为不同客户(金融/医疗/法律)训练独立适配器,通过动态加载实现单卡服务 10 个领域,存储节省 90%。
- 如果你只做过传统 NLP:用“BERT 微调”类比,讲全参数微调 BERT-Large 需 16GB 显存,而 LoRA 只需 4GB,并对比灾难性遗忘:全参数微调后情感分析模型在语法纠错任务上掉 8 个点,LoRA 只掉 1 个点。
- 如果你是校招无项目:聚焦“显存计算”论文复现,讲在 Colab 上用 LoRA 微调 LLaMA-7B,显存从 28GB 降到 8GB,并对比不同 rank(8/16/32)对 SST-2 准确率的影响。
7️⃣ 延伸阅读
- LoRA: Low-Rank Adaptation of Large Language Models (Hu et al., 2021)
- Prefix-Tuning: Optimizing Continuous Prompts for Generation (Li & Liang, 2021)
- AdapterFusion: Non-Destructive Task Composition for Transfer Learning (Pfeiffer et al., 2021)
- DoRA: Weight-Decomposed Low-Rank Adaptation (Liu et al., 2024)
- PEFT 官方库(Hugging Face):支持 LoRA/IA3/Prefix Tuning/Adapter 等 10+ 种方法