⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

扩展:微调方法调研

在线 Notebook

对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明

所属章节: 第5章:LLM基础 | 5.4 微调


概览

5.4 节介绍了 LoRA 的基本原理。本节调研更广泛的参数高效微调(PEFT)方法,帮助在实际项目中做出选择。


LoRA 变体

QLoRA(Quantized LoRA)

核心思想: LoRA + 4-bit 量化,让消费级 GPU 也能微调大模型。

标准 LoRA:
  基础模型用 16-bit 存储 → 需要 ~14GB 显存(7B 模型)

QLoRA:
  基础模型用 4-bit NF4 量化存储 → 只需 ~5GB 显存(7B 模型)
  LoRA 适配器仍用 16-bit 训练
  反向传播时动态反量化

NF4(Normal Float 4): 专为正态分布权重设计的 4-bit 数据类型,比普通 INT4 精度损失更小。

实际效果: 65B 模型可以在单张 48GB A100 上微调,7B 模型可以在消费级 RTX 3090(24GB)上微调。

代价: 训练速度比标准 LoRA 慢约 30%(量化/反量化开销)。

AdaLoRA(Adaptive LoRA)

问题: 标准 LoRA 对所有层使用相同的秩 r,但不同层的重要性不同。

核心思想: 根据每个权重矩阵的重要性,自适应分配秩预算。

重要的层(如注意力的 Q/V 矩阵)→ 分配更高的秩
不重要的层 → 分配更低的秩甚至为 0

总参数量不变,但分配更合理

实现: 用 SVD 分解代替 A×B 分解,通过奇异值的大小判断重要性,训练过程中动态剪枝小奇异值。

效果: 在相同参数量下,AdaLoRA 通常比标准 LoRA 提升 1-3%。

DoRA(Weight-Decomposed LoRA)

核心思想: 将权重分解为幅度(magnitude)和方向(direction)两部分,分别更新。

W = m × (W₀ + ΔW) / ||W₀ + LoRA||

m:可学习的幅度向量(每列一个标量)
方向:用 LoRA 更新

为什么有效: 全量微调时,幅度和方向的变化模式不同。DoRA 让 LoRA 更接近全量微调的行为。

效果: 在多个任务上超越标准 LoRA,接近全量微调。


其他 PEFT 方法

Prefix Tuning

核心思想: 在每个 Transformer 层的输入前,加入可学习的"前缀向量"。

标准输入:[token₁, token₂, ..., tokenₙ]
Prefix Tuning:[prefix₁, prefix₂, ..., prefixₖ, token₁, ..., tokenₙ]

前缀向量是可学习的,基础模型参数冻结

特点:

  • 不修改模型参数,只学习前缀
  • 每个任务对应一组前缀向量(存储成本低)
  • 对生成任务效果好,对分类任务效果一般

Prompt Tuning

核心思想: 只在输入层加入可学习的 soft prompt,比 Prefix Tuning 更轻量。

Prefix Tuning:每层都加前缀(参数量 = 层数 × 前缀长度 × 维度)
Prompt Tuning:只在输入层加前缀(参数量 = 前缀长度 × 维度)

特点: 参数量极少(通常 < 0.01%),但效果在小模型上较差,大模型(>10B)上接近全量微调。

Adapter

核心思想: 在 Transformer 层之间插入小型适配模块(两层 FFN + 残差连接)。

原始层:Attention → FFN
Adapter:Attention → Adapter → FFN → Adapter

Adapter 结构:
  输入(d维)→ 降维(r维)→ 非线性激活 → 升维(d维)→ 残差加法

特点: 比 LoRA 早提出,效果相近但推理时有额外开销(LoRA 可以合并权重,Adapter 不行)。


方法对比

方法可训练参数显存需求推理开销效果适用场景
全量微调100%极高最好资源充足
LoRA0.1-5%无(合并后)通用首选
QLoRA0.1-5%极低无(合并后)消费级 GPU
AdaLoRA0.1-5%无(合并后)较好追求精度
DoRA0.1-5%无(合并后)较好接近全量
Prefix Tuning<1%极低有(前缀占 context)一般生成任务
Prompt Tuning<0.1%极低有(前缀占 context)一般大模型
Adapter1-5%有(额外层)多任务切换

选择指南

显存 < 16GB(消费级 GPU)?
    → QLoRA(4-bit 量化)

需要多任务快速切换?
    → Adapter 或 Prefix Tuning(不合并权重,切换成本低)

追求最好效果,资源充足?
    → DoRA 或 AdaLoRA

通用场景,简单可靠?
    → LoRA(r=8 或 r=16)

模型 > 30B,资源有限?
    → QLoRA(r=8)

实用工具

  • Hugging Face PEFT 库:统一接口支持 LoRA、QLoRA、AdaLoRA、Prefix Tuning 等
  • LLaMA-Factory:一站式微调框架,支持主流开源模型
  • Axolotl:灵活的微调配置框架,社区活跃
  • Unsloth:优化的 LoRA/QLoRA 实现,速度提升 2-5 倍

返回: 第5章:LLM基础

本教程采用 CC BY-NC-SA 4.0 许可协议