Appearance
Full Fine-Tuning vs LoRA vs QLoRA
三种主流 LLM 微调方法的系统对比 — 从全参微调到极致压缩的量化低秩适配
对比概览
| 维度 | Full Fine-Tuning | LoRA | QLoRA |
|---|---|---|---|
| 提出时间 | — | 2021 (Hu et al.) | 2023 (Dettmers et al.) |
| 可训练参数 | 100% | 0.1-1% | 0.01-0.1% |
| 显存需求 | 4-8× 模型大小 | 1.2-1.5× 模型大小 | 1.05-1.2× 模型大小 |
| 训练时间 | 基准 | 2-4× 更快 | 3-5× 更快 |
| 最终质量 | 基准(最高) | 接近全参 | 接近全参 |
| 基础模型精度 | FP16/BF16 | FP16/BF16 | NF4 (4-bit) |
| 加载后推理 | FP16/BF16 | FP16/BF16 + adapter | 支持合并回原始精度 |
内存需求示例(70B 模型,单 GPU 场景)
| 方法 | 需要显存 | 推荐硬件 |
|---|---|---|
| Full FT (FP16) | ~560 GB (4× A100 80G) | 4-8× A100 80GB |
| Full FT (BF16, ZeRO-3) | ~280 GB (4× A100) | 4× A100 80GB |
| LoRA (FP16) | ~140 GB | 2× A100 80GB |
| LoRA (FP16, 单卡) | ~140 GB | 1× A100 80GB + CPU offload |
| QLoRA (NF4) | ~48 GB | 1× A100 40GB 或 3090/4090 |
| QLoRA (NF4, 7B 模型) | ~8 GB | 1× RTX 3080 |
详细分析
Full Fine-Tuning
原理:更新模型中所有参数。
适用场景:
- 从头预训练或全模型域适应(如通用模型 → 代码模型)
- 目标领域与训练领域差异很大(如医学、法律)
- 需要最大程度提升下游任务性能
- 有充足的计算资源
风险:
- 灾难性遗忘(Catastrophic Forgetting):预训练学到的知识可能丢失
- 计算成本极高
- 需要分布式训练策略(ZeRO、FSDP、TP)
LoRA (Low-Rank Adaptation)
原理:冻结原始权重,在注意力层注入低秩分解矩阵($r imes (d_{model} + d_{ff})$)作为可训练参数。
关键参数:
- Rank (r): 低秩维度。高 r 恢复更多全参能力,低 r 更省显存
- 常见值: r=8, 16, 32, 64, 128
- 经验: r=16 通常就足够
- Alpha (α): 缩放因子,通常设为 r 的 2 倍
- Target Modules: 通常只适配 Q 和 V 投影层,也可以扩展到全部
优点:
- 显存大幅降低(不需要存储原始权重的优化器状态)
- 一次训练、多场景切换(只需存储小 adapter 文件)
- 几乎不增加推理延迟(adapter 可以合并到原始权重)
QLoRA
原理:在 LoRA 基础上,将基础模型用 NF4(4-bit NormalFloat)量化加载。
额外组件:
- NF4 量化: NormalFloat 4-bit,专为正态分布参数优化的数据格式
- 双重量化: 对量化常数再做一次量化,进一步节省显存
- 分页优化器: 利用 CPU 内存存储优化器状态,按需换页到 GPU
优点:
- 消费级 GPU 即可微调大模型(3090 → 70B 模型)
- 质量非常接近 LoRA(NF4 vs FP16 损失通常 <1%)
- 大幅降低了 LLM 微调的门槛
推荐选择矩阵
| 场景 | 推荐方法 | 原因 |
|---|---|---|
| 有 8×A100,需要最大性能 | Full FT | 无质量损失,完全控制 |
| 有 2-4×A100,通用领域 | LoRA (r=32-64) | 逼近全参质量的 95-99% |
| 单 A100/4090 | LoRA | 70B 以下模型可行 |
| 单消费级显卡 (3090/4090) | QLoRA | 能从 70B 模型微调推理 |
| 需要在多任务快速切换 | LoRA | 只需保存小 adapter |
| 资源有限但追求最好质量 | QLoRA + r=64 | 最佳性价比 |
微调方法 vs 其他技术对比
| 维度 | Full FT | LoRA | QLoRA | 适配器微调 (Adapter) | Prefix Tuning |
|---|---|---|---|---|---|
| 新增参数 | 0% | 0.1-1% | 0.01-0.1% | 1-5% | 0.01-0.1% |
| 推理开销 | 无 | 可合并/极小 | 可合并/极小 | 5-10% | 1-3% |
| 模型质量 | ★★★★★ | ★★★★☆ | ★★★★☆ | ★★★☆☆ | ★★★☆☆ |
| 流行程度 | ★★★☆☆ | ★★★★★ | ★★★★☆ | ★★☆☆☆ | ★★☆☆☆ |
工程实践
LoRA 最佳实践
1. 目标层选择: Q, V, K, O, up, down, gate 全部适配更好
2. Rank 选择: r=16(起步),r=64(追求质量),r=8(极致省显存)
3. 学习率: 1e-4 到 5e-4(通常高于全参微调的 1e-5)
4. 优化器: AdamW (8-bit 版节省显存)
5. 调度器: cosine decay + warmupQLoRA 注意事项
- NF4 vs FP4: NF4 在 LLM 微调中通常优于 FP4
- 合并权重: 训练后可将 adapter 合并回 FP16 权重,消除量化损失
- 批次大小: QLoRA 的量化前向传播稍慢,token/s 减半(相比 LoRA)
相关概念
- Fine-tuning — 微调方法概述
- DPO & Preference Alignment — 基于 DPO 的对齐微调
- Model Inference & Deployment — 微调后模型部署
- Model Quantization — 量化技术详解
参考来源
- Hu et al. (2021). "LoRA: Low-Rank Adaptation of Large Language Models." ICLR 2022.
- Dettmers et al. (2023). "QLoRA: Efficient Finetuning of Quantized Language Models." NeurIPS 2024.
- Houlsby et al. (2019). "Parameter-Efficient Transfer Learning for NLP." (Adapter 方法)
- Lester et al. (2021). "The Power of Scale for Parameter-Efficient Prompt Tuning."