参数高效微调
全量微调 70B 要一个集群,LoRA 微调 70B 只要一张卡。PEFT 的本质是:把"学什么"和"存什么"解耦。
全量微调为什么贵
全量微调的显存账是显存层次篇的
LoRA:低秩增量假设
LoRA(Low-Rank Adaptation)的核心假设:微调引起的权重变化
flowchart LR
x["输入 x"] --> W["W(冻结)"]
x --> A["A(r×k,可训)"]
A --> B["B(d×r,可训)"]
W --> add(("+"))
B --> add
add --> y["输出"]账目:
推理零开销:部署时
QLoRA:4 bit 基座 + LoRA 增量
QLoRA 再砍一刀:把冻结的基座量化到 4 bit(NF4 数据类型),LoRA 增量保持 BF16。70B 模型基座
机制对比
| 方法 | 可训参数 | 额外推理开销 | 适用场景 |
|---|---|---|---|
| 全量微调 | 无 | 数据充足、追求上限 | |
| LoRA | 合并后无 | 通用默认选择 | |
| QLoRA | 同 LoRA | 反量化开销 | 单卡/少卡场景 |
| Prefix/P-tuning | 每步读取前缀 | 极小数据、多任务 | |
| Adapter | 串行小层,有延迟 | 多任务服务 |
深入推导:LoRA 的初始化、秩的选择与多任务服务
初始化:
梯度与秩:
多任务服务账:
(据 Hu et al. 2021、Dettmers et al. 2023。)
思考题
- 70B 模型、
、给所有 1024 个线性层加 LoRA( 层占多数),可训参数量级是多少?QLoRA 下单卡 80 GB 够吗? - 为什么 LoRA 合并后推理零开销,而 Adapter 每层都有额外延迟?
- 你的任务是让模型学会一个新的编程语言语法,选
与放置层的原则是什么?
参考答案
,占 70B 的 0.4%。QLoRA 下基座 35 GB + LoRA 训练态(0.27B 参数约 4.3 GB 含优化器)+ 激活——80 GB 单卡勉强可行,配合梯度检查更稳。 - LoRA 的
数学上可折叠进原权重( 预先算好);Adapter 是新插入的串行计算图节点,无法折叠,每层多两次小矩阵乘与内存往返,decode 时逐层累积延迟。 - 新语法是模式性知识,中低秩(
)够用;优先覆盖注意力投影(学习新格式关联)+ MLP 层(存储事实性语法规则),用验证集上 loss 曲线判断是否升秩。
小结
- PEFT = 低秩/少量参数假设 + 冻结基座,把优化器状态这个显存大头直接消掉。
- LoRA 靠"可合并"实现推理零开销,成为默认;QLoRA 把基座压到 4 bit,单卡微调 70B。
- 多任务场景 LoRA 增量以 MB 计,模型服务变成"基座 + 插件"模式。
- 秩与放置层是仅有的两个关键超参:难度高、知识密则升秩、全层放置。
参考资料
- Hu et al., LoRA: Low-Rank Adaptation of Large Language Models(arXiv 2106.09685)
- Dettmers et al., QLoRA: Efficient Finetuning of Quantized LLMs(arXiv 2305.14314)
- Dettmers et al., 8-bit Optimizers via Block-wise Quantization(arXiv 2110.02861)
- Hugging Face,PEFT 文档