让通用模型变成专属模型的技术手段。FDE 需要理解微调对部署的影响。
前置知识
建议先阅读 Transformer 架构概述 和 大语言模型训练流程 。
微调 vs 预训练
预训练:从零训练,需要海量数据和算力 微调:在已有模型基础上调整,少量数据即可
预训练 ≈ 从小学到大学的完整教育 微调 ≈ 大学毕业后参加一个短期职业培训
对比
微调方法分类
全参数微调(Full Fine-tuning)
更新模型所有参数
优点:效果最好,模型完全适配新任务 缺点: - 需要大量显存(70B 模型约需 1.4TB 显存) - 容易过拟合小数据集 - 每个任务需要保存一份完整模型权重
参数高效微调(PEFT)
只更新模型的一小部分参数,大幅降低显存需求。
LoRA(Low-Rank Adaptation)
核心思想
原始权重 W(冻结不变) ↓ 输入 x → xW → 输出
改为: 原始权重 W(冻结不变) ↓ 输入 x → xW + xBA → 输出 ↑ 低秩矩阵 B(d×r)和 A(r×d)可训练 其中 r << d,通常 r = 8, 16, 64
参数量对比
显存节省
全参数微调 70B: - 模型权重:140GB(FP16) - 梯度:140GB - 优化器状态(Adam):280GB - 总计:~560GB(需 8×A100 80GB)
LoRA 微调 70B(r=16): - 模型权重:140GB(可量化为 INT4 → 35GB) - LoRA 参数:可忽略 - 梯度 + 优化器:~2GB - 总计:~40-175GB(取决于量化)
LoRA 的部署方式
QLoRA(Quantized LoRA)
QLoRA = 4-bit 量化基座 + LoRA 微调
核心创新: 1. 基座模型量化到 4-bit(NF4 格式) 2. LoRA 参数保持 FP16 3. 量化误差通过双量化和分页优化器补偿
显存需求
70B 模型可以在单卡 A100 80GB 上进行 QLoRA 微调!
微调对部署的影响
1. 模型体积
全参数微调: 每个任务一个完整模型副本 70B × N 个任务 = 70N × 140GB 存储
LoRA 微调: 一个基座模型 + N 个 LoRA 适配器 70B × 1 + LoRA × N = 140GB + N × 50MB 存储节省 99%+
2. 推理引擎支持
3. 推理性能
合并后推理: 性能与原始模型完全一致(无额外开销)
动态 LoRA 推理: 额外开销 < 2%(vLLM 的 LoRA Hub 实现) 优势:多个任务共享一个基座模型
微调实践指南
选择合适的微调方法
LoRA 超参数选择
常见框架
面试视角
Q: "LoRA 为什么有效?"
回答框架:
Q: "微调后的模型如何部署?"
回答要点:
Q: "QLoRA 和 LoRA 有什么区别?什么时候用哪个?"
Q: "微调数据需要准备多少?"