「微调」到底在调什么 —— 不是灌知识,是调行为
想把 14B 变成「懂我们公司业务的助手」,第一反应往往是:把公司文档全喂给它训练一遍?这个直觉大概率是错的,而且错得很贵。
训练的两大阶段:预训练 → 后训练
顶层分层就两段:预训练(pre-training)从零读全网,产出只会「续写」的底座模型(base);后训练(post-training)是底座之后一切「行为塑造」的统称——SFT、偏好对齐都归它。继续预训练(CPT)不是并列的第三种,它是预训练的延长线:拿现成底座、继续用「读书」的方式(下一词预测 + 无标注纯文本)喂领域语料,长的是知识,不是行为。查证 2026-09
| 阶段 | 在做什么 | 后厨比喻 | 典型规模 | 你要付的代价 |
|---|---|---|---|---|
| 预训练 厂商的事 | 从零读全网文本,学语言与世界知识 → 产出底座模型(base,只会续写不会对话) | 培养一名厨师,从切菜学到满汉全席 | 万亿级 token、数千卡、数月(绝大部分算力花在这) | 千万~亿美元级,别碰 |
| └ 继续预训练(CPT):拿现成底座继续「读书」,喂领域语料(代码 / 医疗 / 法律)——学的还是知识,不是行为 | 送资深厨师去进修一个新菜系 | 十亿~千亿 token | 贵,且容易把通用能力「练偏」(要掺通用数据防遗忘);通常是厂商 / 平台做 | |
| 后训练 你的入口 | SFT 指令微调(本页主角):用「指令—回答」对,教「怎么回答」 | 给菜谱加一页「本店摆盘规范」 | 几百~几万条指令对 | 一张消费级卡就可能搞定 |
| └ 偏好对齐(RLHF / DPO):在多个回答里教它「哪个更好」 | 试菜后打分,调整咸淡 | 千~万对偏好数据 | 流程复杂,通常 SFT 不够再做 |
数据 > 算法:1000 条精样本的传说
2023 年 Meta 的 LIMA 论文做了个著名实验:只用 1000 条精心挑选/编写的「指令—回答」对,对 LLaMA 65B 做普通 SFT(无 RLHF),效果能对齐到接近 ChatGPT 的水平(人类评估中 43% 的情况不输 GPT-4)。论文把这叫「表面对齐假说」:能力和知识是预训练给的,对齐只是教会它「该用哪副面孔」。查证 2026-09:arXiv:2305.11206
好样本 vs 坏样本:一张对照卡
你 500 条数据的质量,决定这次微调是「资产」还是「废卡一下午」。动手前拿这张卡过一遍:
✓ 好样本
- 来自真实场景:用户真的会这么问(最好从日志里捞)
- 输入输出成对:回答就是你希望模型学会的样子,直接可用
- 格式统一:全部过一遍 chat template,别混三种语气
- 覆盖任务分布:高频问题多、长尾问题也有,难度有梯度
- 已去重、已脱敏:重复样本放大偏心,敏感信息会背进权重
✗ 坏样本
- 拿文档直接切块:那是 RAG 的料,微调它学不会「回答」
- 回答互相矛盾:同一问题两个口径,模型学会摇摆
- 全是同一种问法:过拟合到句式,换个说法就露馅
- LLM 批量生成不审:错误会以讹传讹,模型学得比你想象的快
- 灌知识型长文:指望 SFT 记住参数表——记不牢还挤占行为学习
知识库(RAG)还是微调小模型 —— Agent 岗的高频面试题
「公司文档每周都在变,为什么要用知识库,而不是把这些知识微调进小模型?」——Agent / AI 应用岗面试的高频题。它考的不是背概念,是你能不能为一条真实需求选对工具。
大白话:活页菜谱 vs 肌肉记忆
延续厨房比喻。知识库像后厨挂一本活页菜谱:客人问「这道菜怎么做」,翻到那页照着答,还能补一句「菜谱第 12 页」——有出处;菜单明天要改,撕掉旧页换新页立刻生效,不用重新培训厨师。微调像把摆盘规范练成肌肉记忆:不用翻书,手起刀落又快又稳,高频出菜不掉链子;但规范一改就得重新培训(重新训练),而且厨师说不出「这个动作是哪次培训学的」——没有出处。
应用场景:谁该干什么
知识库(RAG)承载会更新、需要追溯来源的业务事实:产品文档、企业制度、价格库存、客户资料、项目知识、最新政策。优势是知识更新快——文档变了、更新索引即可,不需要重新训练模型;回答可以带出处、做权限控制,出了错也容易定位(改的是文档,不是模型)。
微调小模型适合高频、稳定、输入输出边界明确的任务:
- 客服意图分类与工单路由
- 从合同、发票、病历中抽取固定字段
- 商品属性标准化、内容审核、风险识别
- 把自然语言稳定转换为固定 JSON 或工具调用
- 对检索结果做重排,或把用户问题改写成更适合检索的查询
一张对比表:七个维度
| 维度 | 知识库 / RAG | 微调小模型 |
|---|---|---|
| 知识更新 | 快:更新文档和索引即可 | 慢:要重新准备数据、训练、评测 |
| 首次投入 | 较低:能快速上线验证 | 较高:数据、训练、评测体系都要建 |
| 高频调用成本 | 检索、上下文和模型调用持续产生费用 | 模型足够小时,边际成本通常更低 |
| 延迟 | 要检索、拼上下文、再生成 | 直接推理,适合实时高并发 |
| 可追溯性 | 强:回答可附引用来源 | 弱:知识压进参数,难解释出处 |
| 数据安全 | 私有知识库可做权限隔离 | 可私有部署,但训练数据治理要求更高 |
| 适合的任务 | 会更新、要出处的知识问答 | 高频固定动作:分类、抽取、格式化、路由 |
微调小模型的四个前提
- ① 任务足够窄且稳定:业务目标和输出格式经常变,微调很快过期;像「把商品标题归到指定类目」这样稳定的任务才适合训。
- ② 调用量足够高:低频任务直接用通用模型或 RAG 更灵活;高频任务才摊得平数据准备、训练、部署和持续评测的成本。
- ③ 有高质量、可验证的样本闭环:人工纠错、审批结论、用户是否采纳、是否退款、是否转人工——「输入—正确输出—结果验证」缺一不可。
- ④ 效果可以被明确评测:训练前先定义业务指标——字段抽取准确率、分类 F1、转人工率、审核漏判率、单次处理成本。否则只是在自己的题库上看起来很强。
所以:RAG 通常是业务知识接入的第一选择;小模型微调是业务规模化之后,为高频固定动作做降本增效的手段。
合理的架构:三层分工
全量训练为什么轮不到你 —— 16 字节/参数的账单
上一章定了方向:微调教的是「怎么做」。动手之前先算一笔账,看清为什么「全量训练」是数据中心的事、不是程序员桌上的事:同一张 24GB 的 4090,跑量化后的 14B 推理绰绰有余(a/b 页已经验证),可一敲下全量训练的命令,几步之内 OOM。显存去哪了?
答案在 a 页埋过伏笔:推理只往前算,训练要反推梯度。为了能反推,三样东西必须全程住在显存里——这正是「改菜谱」和「照菜谱做菜」的区别:照着做,菜谱摊开一页就够;要改写整本书,你得把每一页的改动记录、修订理由、修订历史全部摊在台面上。
每个参数的 16 字节账单
混合精度(BF16 计算)+ AdamW 优化器是当下训练的默认组合,它的显存口径来自 ZeRO 论文(Rajbhandari et al., 2020,查证 2026-09:arXiv:1910.02054)——每个参数约 16 字节,不含激活:
| 成分 | 精度 | 字节/参数 | 为什么必须在 |
|---|---|---|---|
| 权重(工作副本) | BF16 | 2 | 前向计算用它 |
| 梯度 | BF16 | 2 | 反向逐层回填,「往哪边改」 |
| 主权重(master copy) | FP32 | 4 | BF16 尾数太短,小更新会被舍入吞掉;真正的参数原文 |
| Adam 一阶矩 m | FP32 | 4 | 梯度的「动量」(近期平均方向) |
| Adam 二阶矩 v | FP32 | 4 | 梯度的「方差」(自适应步长) |
| 合计 | 16 | 权重2 + 梯度2 + 主权重4 + m4 + v4 |
激活:第二个大头
还不止 16 字节。前向的中间结果(激活值)必须留着给反向用——它随 batch × 上下文 × 层数 线性上涨,长上下文时能追平权重本身。按 Megatron 口径(34 × hidden × 层数 × 每 token 字节,量级估算),14B 在 4×1024 tokens 的批次下激活约 34 GB,峰值合计 ≈ 64 GB——一张 80GB H100 单卡连一步都迈不出去。
顺带预告:如果开启 gradient checkpointing(微调的标准姿势里默认开),激活从每 token 34 字节降到 2 字节(4×1024 tokens 时 2 GB),代价是慢 20~30%——一笔几乎总是划算的「时间换显存」。
小自测:为什么「显存够装权重」不代表「能训练」?
延伸视野 · 真要做全量训练:多卡的四种切法(了解即可)
预训练和大规模全量训练属于「训练基础设施工程」——平台团队和模型厂商的日常,应用工程师几乎不会亲手做。面试聊到时,一句话分清它们各自切的是什么:
| 切法 | 切的是什么 | 一句话特征 |
|---|---|---|
| DP 数据并行 | 切数据:每卡一整份模型 | 最省心,前提是单卡装得下 |
| TP 张量并行 | 切层内矩阵 | 每层都通信,要 NVLink,一般 ≤8 卡同机 |
| PP 流水线并行 | 切层,分段接力 | 通信最少,有流水线气泡 |
| ZeRO / FSDP | 切状态:每卡只存 1/N | 训练侧万金油,对互联最宽容 |
应用工程师的口诀只有一句:装不下,先换方法(LoRA / QLoRA),而不是加卡。本页主线到此转向——不再追求装下全量训练,而是绕开它。
LoRA —— 不重写菜谱,页边贴便利贴
237GB 的账单劝退了单卡全量。但你只是想教它「用我们的格式和口吻回答」——真的需要改全部 148 亿个参数吗?
LoRA 是个什么概念
先用大白话说清楚:LoRA 不是一种模型,是一种「不动原模型」的微调方法。全量微调要把整个模型重训一遍(14B 就是 148 亿个参数全部更新);LoRA 反着来——把原模型整个冻住,只在旁边新挂一小块可训练的参数,训练时只更新这一小块。训完的产物不是完整模型,而是一个几十到几百 MB 的「补丁文件」,社区叫它 LoRA adapter(模型站上供人下载的各种 LoRA 就是它)。对应本章标题的比喻:全量微调是重写整本菜谱,LoRA 是菜谱一页不改、在页边贴便利贴——原书永久保留,便利贴随时可撕可换。
- 名字拆解:LoRA = Low-Rank Adaptation,低秩适配。Adaptation(适配)= 让模型适应你的任务;Low-Rank(低秩)= 改动量用「两个瘦矩阵的乘积」来表达——凭什么敢这么省,下一节讲。
- 底座与补丁的关系:底座(base)不变,补丁(adapter)即插即拔。推理时可以把补丁合并进权重(部署时和普通模型没区别),也可以保持底座不动、按请求挂不同任务的补丁——一个底座服务多个场景。
- 程序员为什么爱它:显存账单断崖式下降(14B 从 237GB 掉到本章后面的 33GB),48GB 卡舒适;分享和回滚只需拷补丁文件,不用动 29.6GB 的底座。下一章 QLoRA 再把它压进 24GB 卡。
低秩假设:改动其实很小
LoRA(Hu et al., 2021,查证 2026-09:arXiv:2106.09685)的出发点是一个实验发现:微调时权重的「改变量」是低秩的——看起来要动整个矩阵,实际改动集中在一个低维子空间里(相关结论可追溯至 Aghajanyan et al., 2020 的本征维度研究)。既然如此,别动原矩阵 W,只在旁边挂一对瘦矩阵 A、B(秩 r 很小,如 8~32),用它们的乘积 BA 当「改动量」:
显存账立刻变了
关键在于优化器状态只跟着「可训练参数」走。冻结主干按推理精度(BF16,2 字节/参数)放着只读;可训练的 LoRA 增量通常只占参数量的 0.1%~1%(本手册按挂满线性层、r≈16 的 0.5% 口径算)。14B 的账变成:
| 成分 | 全量 SFT | LoRA | 说明 |
|---|---|---|---|
| 冻结主干 | —(全在训) | 29.6 GB | BF16 只读,2 字节/参数 |
| 可训练参数 | 14.8B | 0.074B(0.5%) | LoRA 的 A、B 矩阵 |
| 增量梯度+优化器 | 207 GB | 1.2 GB | 只随 0.074B 参数走(2+4+4+4 字节) |
| 激活(4×1024 tok,ckpt 开) | 2 GB | 2 GB | 反向照算,激活省不了太多 |
| 合计 | 237 GB | 33 GB | 调 trainBreakdownGB('lora') 现场算 |
rank 与 alpha 的直觉
- rank r:便利贴的「信息容量」。任务越接近模型已会的东西,r 越小越够用——论文里 r=4 起步就常常够;社区常用 8~32,r 拉大不会明显变聪明,只会让可训练参数和过拟合风险变大。查证 2026-09:LoRA 论文 + Unsloth 指南
- alpha:便利贴字迹的「浓淡」。增量乘 α/r 后加回主干;实践里常取 α = r 或 2r,先固定 α=r、只调 r 是省心开局。
- target_modules:便利贴贴在哪几页。只挂注意力层最省;挂上 MLP 线性层效果常更好、可训练参数也更多(本手册 0.5% 口径即「挂满线性层」)。
QLoRA —— NF4 存放,BF16 计算,24GB 卡的主战场
LoRA 把 237GB 砍到 33GB,但主干那 29.6GB 还是超了 24GB 卡的门槛。最后一刀砍向主干:存的时候压缩,算的时候还原。
三招
- ① NF4 存主干:4-bit NormalFloat,专为「权重服从正态分布」设计的信息论最优 4-bit 类型——每参数 0.5 字节,14B 主干从 29.6GB 压到 7.4GB(b 页的「口袋本菜谱」思路,只是这次是给训练用的)。
- ② 反量化计算:反向穿过冻结层时,把 NF4 权重临时反量化成 BF16 再参与矩阵乘——保证数值上是 16-bit 精度的训练。论文结论:质量不掉档。
- ③ Paged Optimizers:优化器状态显存吃紧时,借 NVIDIA 统一内存把状态页临时挪到 CPU 内存,避免梯度尖峰时刻 OOM 崩溃。
14B 的账:10~14GB 区间
QLoRA 口径重算(batch 4×1024、checkpointing 开):主干 NF4 7.4GB + LoRA 增量与优化器 ≈1.2GB + 激活 ≈2GB = 合计 10.6 GB。上下文或 batch 加大时向 14GB 靠——所以经验区间是 10~14GB:16GB 卡能跑,24GB 卡舒适。
| 方法 | 主干 | 14B 合计(4×1024,ckpt) | 16GB 卡 | 24GB 卡 | 48GB 卡 |
|---|---|---|---|---|---|
| 全量 SFT | BF16 在训 | 237 GB | ❌ | ❌ | ❌ |
| LoRA | BF16 冻结 | 33 GB | ❌ | ❌ | ✓ 舒适 |
| QLoRA | NF4 冻结 | 10.6 GB | ✓ 能跑 | ✓ 舒适 | ✓ 富余 |
第三幕落地:4090 上的过夜计划
- 数据:客服日志精选 400 条(c1 的对照卡已过检),8:2 切出 80 条做验证集。
- 配置:QLoRA(NF4 主干)+ r=16、α=16、lr 2e-4、3 epoch、batch 有效 16(小 batch × gradient accumulation)。查证 2026-09:Unsloth 推荐 LoRA/QLoRA 起步 lr=2e-4、1~3 epoch
- 时间量级:4090 上每个 epoch 约 0.5~1 小时(量级粗估,取决于上下文长度与工具),3 epoch 两三小时收工——「过夜」是留给人肉检查数据的富余。
- checkpoint 挑选规则:每个 epoch 存一档,按验证集 loss 挑,不是拿最后一个;留 2~3 个低 loss 候选,人工各抽 20 题盲评再定稿。
- 交付:选定 adapter 后两种走法——合并回主干出完整模型,或保留 4-bit 主干 + LoRA 运行(省显存,交给 b 页的部署章)。
小自测:QLoRA 里哪些部分是 4-bit,哪些是 16-bit?
训练显存沙盘 —— 同一个模型的三种命运
原理讲完,把它装进一台「沙盘」:选模型 × 选方法 × 拨开关,看显存账单、卡判定和训练时长怎么联动。重点体验切方法的那一下——全量 ❌ → LoRA ⚠️ → QLoRA ✅。
终极测验 —— 五题出师
5 题验收。答对 4 题,你就有底气在评审会上对「上四张 A100 全量微调」的方案说不,也对「把公司文档全喂给模型微调」的需求说不。
参考资料 · References
本页所有账单由目录下 calc.js 统一计算(四页共享,避免 a/c/d 数字打架)。以下论文与文档为口径出处,链接核对于 2026-09。
论文
- LoRA: Low-Rank Adaptation of Large Language Models — Hu et al., 2021 · 低秩假设、r/α 口径 · arXiv:2106.09685 查证 2026-09
- QLoRA: Efficient Finetuning of Quantized LLMs — Dettmers et al., 2023 · 65B 单卡 48GB、NF4、Double Quantization(约省 0.4 bit/参数)、Paged Optimizers · arXiv:2305.14314 查证 2026-09
- ZeRO: Memory Optimizations Toward Training Trillion Parameter Models — Rajbhandari et al., 2020 · 混合精度 + Adam 每参数 16 字节的出处(2+2+4+4+4)· arXiv:1910.02054 查证 2026-09
- FSDP / PyTorch ZeRO 系列 — Zhao et al., 2023 · arXiv:2304.11277 查证 2026-09
- LIMA: Less Is More for Alignment — Zhou et al., 2023 · 1000 条精样本 + 表面对齐假说 · arXiv:2305.11206 查证 2026-09
- Intrinsic Dimensionality Explains the Effectiveness of Language Model Fine-Tuning — Aghajanyan et al., 2020 · 低秩假设的前身 · arXiv:2012.13255 查证 2026-09
- (反方观点)Revisiting the Superficial Alignment Hypothesis — 2024 · 对齐不止是学格式 · arXiv:2410.03717 查证 2026-09
- RAG: Retrieval-Augmented Generation — Lewis et al., 2020 · 「知识放外部检索、不进参数」路线的出处(02 章选型框架的原型)· arXiv:2005.11401 查证 2026-09
文档与工具(2026 年微调三件套的一句话定位)
- Unsloth — 重写内核,单卡速度与显存效率首选;其LoRA 超参指南是 lr 2e-4 / 1~3 epoch 建议的出处 查证 2026-09
- LLaMA-Factory — WebUI 工作流友好,适合不写代码的微调(内部可挂 Unsloth 后端)· GitHub 查证 2026-09
- Axolotl — YAML 驱动、多卡/分布式配置可复现性强 · GitHub 查证 2026-09
- Hugging Face PEFT(LoRA/QLoRA 官方实现)· huggingface.co/docs/peft;TRL(SFT/DPO Trainer)· huggingface.co/docs/trl 查证 2026-09
- bitsandbytes(NF4 / 8-bit optimizer 的实现库)· huggingface.co/docs/bitsandbytes 查证 2026-09