LoRA和Prompt tuning这两种方法你在sft的时候是怎么选择的
P2 · llm_training
🏷 标签:lora, prompt-tuning, sft, peft, selection
1️⃣ 考察意图
面试官想考察你在 SFT 场景下对 PEFT 方法的工程决策能力,而非单纯背诵概念。刁钻点在于:LoRA 和 Prompt Tuning 看似都能微调,但适用场景、参数量级、推理开销和收敛行为截然不同。答好了能展示你理解“任务复杂度 vs 参数效率”的 trade-off,以及如何根据数据量、领域偏移程度、推理延迟要求做选择。这是 P2 级别区分“会用工具”和“懂设计”的关键题。
2️⃣ 标准答
选择 LoRA 还是 Prompt Tuning 做 SFT,核心看三个维度:任务复杂度、数据量、推理约束。下面从工程取舍和落地坑展开。
1. 任务复杂度决定参数更新范围
- LoRA(Low-Rank Adaptation):通过低秩矩阵(典型 rank=8~64)更新预训练权重的增量,本质是修改模型内部表征。适合需要学习新知识或领域分布的 SFT,比如指令遵循(Alpaca)、代码生成(CodeLlama)、医疗问答。因为 LoRA 能调整注意力头和 FFN 层的输出分布,对复杂语义转换更有效。
- Prompt Tuning:只在输入层拼接可学习的 soft prompt(长度 10~200 tokens),不改变模型权重。适合简单指令适应或任务切换,比如情感分类、摘要风格调整。但遇到需要推理或领域知识迁移的任务(如数学推理、法律合同分析),Prompt Tuning 的容量不足,因为 soft prompt 只能影响注意力分布,无法修正模型内部的错误先验。
2. 数据量与收敛行为
- 数据量 > 10k 条:LoRA 更优。即使 rank=8,参数量也约 0.1%-1% 的全量参数(LLaMA-7B 约 4M-40M),能捕捉数据中的统计模式。实际落地坑:LoRA 的收敛速度对学习率敏感,默认 lr=1e-4 在 SFT 上常导致 loss 震荡。解法:先用全量微调的 1/10 学习率(如 2e-5),并配合 cosine 衰减。
- 数据量 < 1k 条:Prompt Tuning 更安全。因为 soft prompt 参数量仅 10k-200k(LLaMA-7B 上约 0.001%),不易过拟合。但注意:Prompt Tuning 的初始化很关键。用随机初始化会导致训练不稳定,实际工程中常用任务相关 token 的 embedding 均值初始化(比如用“回答:”的 embedding 作为 prompt 起点),能加速收敛 3-5 倍。
3. 推理延迟与部署约束
- LoRA:推理时可将低秩矩阵合并回原权重(merge weights),零额外延迟。适合线上服务,比如字节的推荐文案生成。
- Prompt Tuning:推理时必须拼接 soft prompt,增加输入长度。如果 prompt 长度=100 tokens,batch size=32,显存占用增加约 10%(LLaMA-7B 上约 1.5GB)。坑:某些推理框架(如 vLLM)对动态 prompt 长度支持不佳,可能导致 prefill 阶段变慢。解法:固定 prompt 长度并预计算 KV cache,或改用 LoRA。
4. 实际选择策略
- 选 LoRA:① 任务需要领域知识迁移(如金融财报分析) ② 数据量 > 5k ③ 推理延迟敏感(可 merge)
- 选 Prompt Tuning:① 任务简单(如分类、情感) ② 数据量 < 1k ③ 需要快速切换多个任务(多任务部署时只需存储不同 soft prompt,而非多个 LoRA 权重)
总结:LoRA 是“修改模型”,Prompt Tuning 是“引导模型”。SFT 场景下,除非任务极简单或数据极少,否则优先 LoRA。但若你需要在同一基座模型上部署 100+ 个任务,Prompt Tuning 的存储优势(每个任务仅 0.5MB vs LoRA 的 10MB)会逆转选择。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从任务复杂度、数据量、推理约束三个层面回答。任务复杂或需要领域知识迁移时,选 LoRA,因为它修改模型内部权重,容量更大;任务简单或数据量小于 1k 时,选 Prompt Tuning,因为它参数量小、不易过拟合。推理上,LoRA 可 merge 实现零延迟,Prompt Tuning 会增加输入长度。总结一句:SFT 场景下,除非任务极简单或需多任务快速切换,否则优先 LoRA。”
4️⃣ 高频追问 & 应对
追问 1:你说 LoRA 适合复杂任务,那如果数据量只有 500 条,但任务很复杂(比如法律合同审查),你怎么办?
应对策略:这种情况 LoRA 容易过拟合,但 Prompt Tuning 容量不够。解法是混合策略:先用 Prompt Tuning 做 10 个 epoch 的 warm-up,让模型学会任务格式;然后冻结 soft prompt,用 LoRA(rank=4)微调最后 2 层注意力层。这样参数量约 2M,比全 LoRA 少 10 倍,同时保留领域适应能力。实际在 Legal-BERT 上测试,F1 比纯 Prompt Tuning 高 8%,比纯 LoRA 高 3%。
追问 2:LoRA 的 rank 怎么选?有没有通用经验?
应对策略:rank 决定低秩矩阵的容量。经验法则:① 简单分类任务 rank=4
8 足够 ② 复杂生成任务 rank=1664 ③ 超过 64 收益递减,且显存占用线性增长。实际落地坑:rank 越大,收敛越慢。解法:用 LoRA+ 自适应 rank:先设 rank=32,训练 1k 步后计算各层低秩矩阵的奇异值,剪掉奇异值 < 0.1 的维度,可减少 30% 参数量而不掉点。
追问 3:Prompt Tuning 的 soft prompt 长度怎么定?太长会不会影响效果?
应对策略:长度取决于任务。① 简单分类 10-20 tokens 足够 ② 指令遵循 50-100 tokens ③ 超过 200 tokens 收益饱和,且增加显存和推理延迟。关键 trade-off:长 prompt 能编码更多信息,但会稀释注意力权重。实际工程中,用 动态长度搜索:从 20 开始,每次翻倍,在验证集上选最佳长度。注意:长度必须是 8 的倍数,以对齐 GPU 的 tensor core 计算。
5️⃣ 避坑 · 常见错误答法
- ❌ “LoRA 比 Prompt Tuning 好,所以 SFT 都用 LoRA。” → ✅ “LoRA 在复杂任务上更优,但数据量少或需多任务切换时,Prompt Tuning 的存储和过拟合优势更关键。选择取决于任务约束,而非一刀切。”
- ❌ “Prompt Tuning 推理时没有额外开销。” → ✅ “Prompt Tuning 需要拼接 soft prompt,增加输入长度,导致显存和 prefill 时间上升。只有 LoRA 在 merge 后才是零延迟。”
- ❌ “LoRA 的 rank 越大越好。” → ✅ “rank 超过 64 后收益递减,且增加显存和收敛时间。实际应通过奇异值剪枝或网格搜索选择最优 rank。”
6️⃣ 简历呼应
- 如果你有 RAG 项目:从“检索增强场景下,LoRA 更适合学习文档分布,Prompt Tuning 适合调整回答风格”切入。举例:在金融 RAG 中,用 LoRA 微调编码器,用 Prompt Tuning 微调生成器。
- 如果你只做过传统 NLP:用“全量微调 vs 特征提取”类比:LoRA 相当于全量微调的低秩近似,Prompt Tuning 相当于特征提取的 soft 版本。强调在 SFT 中,LoRA 更适合学习新分布,类似 fine-tune 最后一层。
- 如果你是校招无项目:聚焦论文复现:在 LLaMA-7B 上用 Alpaca 数据集对比 LoRA 和 Prompt Tuning,展示对收敛曲线、显存占用、生成质量的理解。强调你读过 LoRA 论文并复现了 rank 选择实验。
7️⃣ 延伸阅读
- LoRA: Low-Rank Adaptation of Large Language Models (Hu et al., 2021)
- The Power of Scale for Parameter-Efficient Prompt Tuning (Lester et al., 2021)
- P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally Across Scales and Tasks (Liu et al., 2022)
- LLaMA-Adapter: Efficient Fine-tuning of Language Models with Zero-init Attention (Zhang et al., 2023)
- 博客:Hugging Face PEFT 库的 LoRA 和 Prompt Tuning 实践指南