跳到主要内容

大模型微调实践

让通用模型变成专属模型的技术手段。FDE 需要理解微调对部署的影响。

前置知识

建议先阅读 Transformer 架构概述大语言模型训练流程


微调 vs 预训练

预训练:从零训练,需要海量数据和算力
微调:在已有模型基础上调整,少量数据即可

预训练 ≈ 从小学到大学的完整教育
微调 ≈ 大学毕业后参加一个短期职业培训

对比

维度预训练微调
数据量万亿级 token千到万级样本
计算量万卡 × 月单卡到百卡 × 天
目标通用能力特定领域/任务
参数更新全部参数全部或部分参数
对 FDE 的意义决定模型基线能力决定部署方式(LoRA 合并等)

微调方法分类

全参数微调(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

参数量对比

模型原始参数LoRA 参数(r=16)LoRA 占比
7B7B~4M0.06%
13B13B~8M0.06%
70B70B~42M0.06%

显存节省

全参数微调 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. 量化误差通过双量化和分页优化器补偿

显存需求

模型量化LoRA rank所需显存
7B4-bitr=16~5GB
13B4-bitr=16~10GB
70B4-bitr=16~48GB
70B4-bitr=64~52GB

70B 模型可以在单卡 A100 80GB 上进行 QLoRA 微调!


微调对部署的影响

1. 模型体积

全参数微调:
每个任务一个完整模型副本
70B × N 个任务 = 70N × 140GB 存储

LoRA 微调:
一个基座模型 + N 个 LoRA 适配器
70B × 1 + LoRA × N = 140GB + N × 50MB
存储节省 99%+

2. 推理引擎支持

引擎LoRA 支持多 LoRA 切换热加载
vLLM✅(同时加载多个)
SGLang
TGI有限
TRT-LLM需重新编译

3. 推理性能

合并后推理:
性能与原始模型完全一致(无额外开销)

动态 LoRA 推理:
额外开销 < 2%(vLLM 的 LoRA Hub 实现)
优势:多个任务共享一个基座模型

微调实践指南

选择合适的微调方法

LoRA 超参数选择

参数推荐值说明
rank(r)8-64越大表达能力越强,但显存也增加
alpha2×r通常设为 rank 的 2 倍
target_modulesq_proj, v_proj最常见,覆盖 Attention 的 query 和 value
dropout0.05-0.1防止过拟合

常见框架

框架特点适用场景
Axolotl配置驱动,支持全量/LoRA/QLoRA生产级微调
Unsloth2x 速度,5x 显存优化快速实验
PEFT(HuggingFace)灵活,可组合自定义微调流程
LLaMA-Factory全功能,Web UI可视化微调

面试视角

Q: "LoRA 为什么有效?"

回答框架:

  1. 低秩假设:模型适配新任务时,参数变化本质上是低秩的
  2. 冻结基座:保留预训练知识不变,只注入少量新知识
  3. 参数共享:LoRA 的 A 和 B 矩阵在所有输入间共享,学习的是通用适配

Q: "微调后的模型如何部署?"

回答要点:

  • 单任务:合并 LoRA 权重到基座,推理无额外开销
  • 多任务:vLLM/SGLang 的 LoRA Hub,一个基座服务多个适配器
  • 切换成本:vLLM 支持热切换,延迟 < 1ms

Q: "QLoRA 和 LoRA 有什么区别?什么时候用哪个?"

  • QLoRA 使用 4-bit 量化基座,显存需求更低
  • LoRA 效果略好(基座精度更高)
  • 显存充足用 LoRA,显存紧张用 QLoRA
  • 实际中 QLoRA 效果通常与 LoRA 差距 < 1%

Q: "微调数据需要准备多少?"

  • 简单任务(格式调整):1K-5K 条
  • 领域适配(医疗、法律):10K-50K 条
  • 复杂推理:50K+ 条
  • 数据质量 > 数据数量

上一节:多模态大模型 下一节:Attention 机制深入