微调方法全景

大模型微调主要有三种技术路线,各有适用场景:

  1. 全参微调(Full Fine-tuning):更新所有参数,效果上限最高,但成本最高
  2. LoRA:冻结主干参数,仅训练低秩适配矩阵,性价比极高
  3. QLoRA:在LoRA基础上对基座模型4bit量化,进一步降低显存需求

LoRA技术详解

原理

LoRA(Low-Rank Adaptation)的核心思想是:模型适配过程中的参数变化具有低秩特性。具体做法:

将原始权重矩阵W∈R^(d×d)的更新分解为两个小矩阵的乘积:

W' = W + ΔW = W + B × A

其中A∈R^(r×d),B∈R^(d×r),r远小于d(通常取8-64)。

参数量从d²降低到2rd,以r=16、d=4096为例,参数量从16.7M降到131K,缩减了127倍。

关键超参数

  • rank (r):秩大小。r越大表达能力越强但训练越慢。推荐8-64起步
  • alpha:缩放系数,实际缩放为α/r。推荐设为r的2倍
  • target_modules:应用LoRA的层。至少q_proj和v_proj,推荐all-linear

适用场景

  • 风格定制(让模型用特定语气说话)
  • 领域适配(法律、医疗等垂直领域)
  • 任务适配(将通用模型适配到特定任务格式)

QLoRA:极致显存优化

QLoRA在LoRA基础上增加了两个优化:

4-bit NormalFloat量化

将基座模型权重量化为4-bit NF4数据类型。NF4是一种正态分布感知的量化方案,比均匀量化精度更高:

原始: W ∈ FP16 (每参数2字节)
量化: W → NF4 (每参数0.5字节)
训练: 仅LoRA参数为FP32

双重量化

对LoRA的适配矩阵本身也进行量化,进一步压缩梯度检查点的显存占用。

页面优化器

将优化器状态在CPU/GPU之间分页,避免显存峰值溢出。

效果对比

方法7B模型显存70B模型显存效果损失
全参120GB+1200GB+0%
LoRA20GB160GB<1%
QLoRA6GB48GB1-2%

QLoRA让单张消费级显卡(如RTX 3090, 24GB)就能微调7B模型,极大降低了定制化门槛。

全参微调:何时仍然需要?

尽管LoRA/QLoRA效果接近全参,但以下场景仍需全参微调:

  1. 能力跃迁:不是适配风格而是注入新能力(如让模型学会多步推理)
  2. 跨语言迁移:将英文模型迁移到低资源语言
  3. 持续训练:继续预训练(continued pretraining)

全参微调的工程要点:

  • 使用DeepSpeed ZeRO-3或FSDP进行参数分片
  • 梯度检查点(gradient checkpointing)减少激活值显存
  • 混合精度训练(BF16)
  • 学习率热身+余弦衰减

数据准备:微调的真正瓶颈

“微调效果不好,90%是数据问题”。数据质量比数据量更重要:

数据格式

{
  "messages": [
    {"role": "system", "content": "你是一个法律顾问"},
    {"role": "user", "content": "劳动合同试用期最长多久?"},
    {"role": "assistant", "content": "根据《劳动合同法》第十九条..."}
  ]
}

数据质量检查清单

  • 去重(语义去重,不只是精确匹配)
  • 过滤低质量样本(用reward model或强模型打分)
  • 格式统一(system prompt一致)
  • 长度分布合理(不要全是短回答)
  • 难度多样化(简单和复杂问题混合)
  • 拒答样本(教会模型对不当请求说不)

训练监控

关键指标:

  • loss曲线:正常应平滑下降,抖动过大说明学习率过高或batch太小
  • eval loss:训练集loss下降但验证集loss上升→过拟合
  • 梯度范数:突然飙升可能是梯度爆炸的信号

总结

微调方法的选择本质上是一个"效果-成本"的权衡:

  • 快速验证/资源有限:QLoRA,单卡即可
  • 生产部署/中等预算:LoRA,多卡训练
  • 极致效果/充足资源:全参微调+DeepSpeed

但无论选哪种方法,数据质量都是决定性因素。在投入计算资源之前,先花时间打磨数据集——这是微调工作流中最被低估也最值得投入的环节。