后训练工程账:SFT、LoRA 与强化学习的显存与成本
预训练产出"会接话"的模型,后训练(SFT、RLHF/DPO)才让它"听话"、对齐人类偏好。后训练的工程账和预训练很不一样:数据少、迭代快、显存需求却依然大。本文把 SFT/LoRA 与三种强化学习路线的显存和成本算清楚。
1. 后训练流水线
预训练 → SFT(监督微调)→ RL(PPO/DPO/GRPO)→ 评估 → 上线
│ │ │ │
基座模型 学格式/风格 学偏好对齐 门禁把关每个阶段用同一套基础设施(训练框架、显存预算、并行策略),但显存与成本结构不同。
2. SFT:全参 vs LoRA 的账
| 全参微调 | LoRA | |
|---|---|---|
| 训练参数 | 全部 | 只训低秩适配器(<1%) |
| 显存 | 全量(权重+梯度+优化器) | 权重冻结,省梯度/优化器 |
| 额外存储 | 每任务一个全量模型 | 每任务仅 MB 级适配器 |
| 适用 | 数据量大、要极致效果 | 多任务、数据中等、要省钱 |
量化:70B 全参微调需 ~300GB+ 显存(四份状态,见 ZeRO 账);LoRA 只需约 1/3-1/2(冻结权重省梯度+优化器)。
判断:LoRA 不是"次优解",是多任务时代的默认解——一个基座模型 + 一堆小适配器,切换任务零成本。
3. 强化学习三条路线
| 路线 | 需要什么 | 显存/成本 | 特点 |
|---|---|---|---|
| PPO | 策略+参考+奖励+critic 4 个模型 | 最高(4×) | 稳,业界经典 |
| DPO | 策略+参考 2 个模型,无奖励模型 | 中(2×) | 直接偏好优化,简化 |
| GRPO | 策略+参考,无 critic | 中低 | 组采样替代 critic,R1 系标配 |
量化:PPO 的 4 模型开销让 70B 的后训练显存需求接近预训练级别;DPO 省掉奖励模型+critic,显存降一半;GRPO 用同组样本的相对优势,进一步省 critic。
判断:先 DPO/GRPO 起步,效果不够再上 PPO——三者目标一致(对齐偏好),成本差一倍。
4. 评估:别让门禁形同虚设
| 维度 | 工具/基准 | 用途 |
|---|---|---|
| 通用能力 | OpenCompass、MMLU | 模型整体能力回归 |
| 对齐质量 | 人工/偏好标注 | SFT/RL 是否达标 |
| 部署指标 | 延迟/吞吐/成本 | 上线前验收 |
| 回归监控 | 上线后持续采样 | 防劣化 |
判断:后训练每版都要过"能力不退化 + 偏好达标 + 部署指标合格"三道门,评估基准是工程闭环的一部分(见 llm-serving-sre)。
5. 可复算 Python:微调显存对比
python
def finetune_mem(n_params_b, method, world, fp8=False):
"""全参 vs LoRA 每卡显存(GB,ZeRO-3 口径,忽略激活)"""
w = n_params_b * 1e9 * (1 if fp8 else 2) / 1e9
g = w; o = n_params_b * 1e9 * 4 / 1e9 * 2
if method == "full":
return round((w + g + o) / world, 1)
# LoRA:权重冻结(算作驻留但无梯度/优化器副本)
return round((w + 0.05 * g + 0.05 * o) / world + 0.5, 1) # +适配器
finetune_mem(n_params_b=70, method="lora", world=32)
# ≈ 4.9 GB/卡 vs 全参 ≈ 26.3 GB/卡 → LoRA 省 80%+6. 交付清单
- 多任务/中等数据默认 LoRA,单任务极致效果才全参;
- 强化学习从 DPO/GRPO 起步,效果不足再上 PPO(成本翻倍要能 justify);
- 每版后训练跑三道门:能力基准(OpenCompass 类)+ 偏好评估 + 部署指标;
- 显存预算复用 ZeRO 账 的函数,先算再训;
- 记录每次实验的显存/时长/效果,沉淀基线(见 验收基线)。
本文为本站整理思考后撰写,用于知识库学习交流;具体版本号与实测数据以现场为准。