第五部 · 拓展专题专题五 / 共 6 篇

训练一个模型:从数据到对齐的实操

第九章讲了预训练、微调、对齐的原理。这一篇讲每一步具体怎么做、怎么坏,从几万块 GPU 的预训练到一块 GPU 一晚上的微调,附成本表和一份动手清单。

主线 18 分钟 · 深入 3 段 · 实验 1 个
一座三室的窑:生坯进去,烧制,分拣。
一座三室的窑:生坯进去,烧制,分拣。

第九章说,一个助手是三个阶段塑造出来的:预训练学语言和世界,微调学对话的形式,对齐学人类的偏好。那一章讲的是「为什么」。这一篇讲「怎么做」:每一步的数据长什么样,旋钮有哪些,什么地方会坏,要花多少钱,以及你自己能做到哪一步。

它是写给想动手的人的,包括想在实验室里微调一个模型处理自己领域文本的研究者。它假设你读过第四、六、七、八、九章。

数据管道抓取 去重 过滤 配比 分词器在语料上训练 BPE 预训练几万块 GPU · 几个月 评测决定下一步往哪走 SFT几万条示范 偏好 / RLRLHF DPO GRPO 评测不过关就回去 可验证奖励的 RL数学 代码 → 推理模型 蒸馏大模型教小模型 量化 · 部署int8/int4 · 推理引擎 你能做的那一段开放权重 + LoRA 微调 · 一块 GPU · 一晚 前两格花掉大部分人力(数据),第三格花掉大部分钱(算力),后面几格决定「好不好用」。 第九章讲原理:预训练学语言与知识,SFT 学格式,偏好学取舍。这里讲每一格具体怎么做、怎么坏。 大多数人不会碰第三格;从第五格起,一台机器就能做,而且效果常常足够好。 评测贯穿全程:没有可信的评测,训练就是在黑暗里拧旋钮。
从数据到部署的流水线。大多数人从第五格开始就能动手。

一、三种投入尺度

先把「训练」这个词拆开,因为它覆盖了差三个数量级的事。

从头预训练 微调开放权重模型 提示与检索
改变的是 一切 风格、领域语言、格式、稳定性 行为与它看到的材料
数据 几万亿 token 几百到几万条示例 几十条例子、一个文档库
算力 几千到几万块 GPU,几周到几月 一块到几块 GPU,几小时到几天
谁在做 十几家实验室 很多团队和实验室 所有人

这篇的前半部分讲第一列,因为理解它才能理解模型为什么是这个样子;后半部分讲第二列,因为那是你能做的;第三列在第十、十二、十四章讲过,最后一节把三者放在一起比较。

二、预训练的配方

数据管道

预训练的大部分人力花在数据上,第九章的深入段落提过配比与清洗,这里说得更具体。

来源。公开网页的抓取(几十万亿 token 的原始文本)、书籍、论文、代码仓库、百科、论坛、字幕,以及越来越多的合成数据。每一类的比例是配方的核心机密之一。

去重。先按 URL 和文档哈希去掉完全重复的,再用近似哈希去掉相似的(同一篇文章的转载、模板页面)。反复去重能显著提升模型,因为重复让模型「背」而不是「学」。

质量过滤。用规则(长度、标点比例、脏词、语言识别)和一个小分类器(训练它区分「像教科书或百科的文本」和「像垃圾的文本」)打分,保留高分的。过滤太狠会丢掉多样性,太松会混进垃圾,这个阈值要靠评测反复调。

去除敏感内容。个人信息、明显有害的内容、以及不应进入训练的版权材料,按各家的政策处理。

配比与课程。不同来源按比例混合,而且顺序可以设计:先泛后精,最后一段用最高质量的数据「退火」。一个常见做法是把最后百分之几的训练留给精选的教科书级数据和指令数据,这一小段对最终能力的影响远超它的比例。

分词器

在配好的语料上训练第七章讲的 BPE 词表,通常十几万到二十几万条。词表大小是一个权衡:大词表让每个 token 承载更多、序列更短,但嵌入层更大、罕见 token 训练不足。多语言模型要专门检查各语言的 token 效率,中文在这一步常吃亏或占便宜,取决于语料配比。分词器一旦定下,整个模型的「视力」就定了,之后几乎不可能改。

架构与规模

架构几乎都是第八章的只用解码器的 Transformer,差别在细节:多少层、多宽、多少个注意力头、用不用混合专家、位置编码用哪种、归一化放在哪里。这些选择大多已经收敛,各家的差异不大。

规模怎么定?用第二章讲的规模定律:给定算力预算,参数量和数据量有一个最优的配比(一个常被引用的经验是每个参数配大约二十个 token,但实际部署时倾向于用更多数据训练更小的模型,因为推理便宜)。先在小模型上做实验确定配方,再按定律放大,是各家的标准流程。

超参数与训练循环

训练本身就是第四章的梯度下降,但在这个尺度上有一些关键的旋钮。

学习率:先从零线性升到峰值(预热,防止一开始就走偏),然后按余弦曲线缓慢下降到峰值的十分之一左右。峰值太高会发散,太低学不动,通常在小模型上扫出来再外推。

批次大小:每一步用几百万个 token。太小噪声大,太大浪费算力,随训练进程逐渐增大是常见做法。

序列长度:先用几千的窗口训练大部分,最后阶段扩展到几十万,因为长序列的注意力太贵。

混合精度:权重用高精度保存,计算用低精度(16 位甚至 8 位浮点),速度翻倍、显存减半,代价是要处理数值溢出。

并行:一个模型放不进一块 GPU,要切开。数据并行(每块 GPU 一份模型、不同的数据)、张量并行(一层切到多块)、流水线并行(不同层放在不同 GPU)、专家并行(混合专家的专家分散)四种叠加,把几万块 GPU 用起来。通信常常成为瓶颈,这是训练工程最难的部分。

检查点:每隔一段保存一次权重。几万块 GPU 里总有几块会坏,训练要能从上一个检查点恢复。

下面是一个(简化的)预训练日志片段,每一行是几百步的汇总。看懂它,就看懂了训练时工程师在盯什么。

step    tokens     loss   lr        grad_norm  tok/s     mem
 1000   2.1B       4.62   1.2e-4    1.8        3.9M      71G
 5000   10.5B      3.41   3.0e-4    0.9        4.1M      71G
10000   21.0B      3.02   3.0e-4    0.7        4.1M      71G
20000   42.0B      2.78   2.9e-4    0.6        4.0M      71G
20400   42.8B      2.77   2.9e-4    14.2 !!    4.0M      71G
20600   43.3B      3.35   2.9e-4    2.1        4.0M      71G

loss 是第四章的损失(每个 token 的交叉熵),应当平滑下降,前期快后期慢;它的绝对值随数据配比变化,所以只和自己比。lr 按计划预热后下降。grad_norm 是梯度的大小,平稳时在 1 以下;第 20400 步它突然跳到 14,接着 loss 上跳,这叫「损失尖峰」,可能是一批坏数据或数值问题,处理办法是回退到上一个检查点、跳过那批数据、或者降低学习率。tok/s 是吞吐,掉下来说明有 GPU 坏了或通信堵了。mem 是显存,接近上限就要调并行策略。

工程师每天做的事,一大半是看这几条曲线,判断要不要干预。一次几个月的训练里,这样的尖峰会有几十次。

损失曲线之外

预训练结束时得到基础模型。第九章说过它只会续写。但它的质量已经由前面所有决定锁定了,后面的微调和对齐只能塑形,不能补课。所以预训练团队最关心的评测,是在训练过程中周期性地测一批基准,看曲线是不是按预期在走。

三、评测:训练的方向盘

没有可信的评测,训练就是在黑暗里拧旋钮。评测在训练中的地位比大多数介绍里说的重要得多。

留出数据的损失:最基本的,在没训练过的文本上算交叉熵。它平滑、可靠,但和「好不好用」的关系是间接的。

基准测试:几十个公开的题库,考知识、推理、代码、数学、多语言。它们的问题是污染:题目在网上,可能已经在训练数据里;以及「针对基准训练」,分数涨了能力没涨。各家现在都维护不公开的内部题库,并检查训练数据里有没有基准的原文。

人评:让人比较两个模型的回答。最贴近真实,也最贵、最慢、最有噪声。公开的对战式排行榜是它的众包版本,但也会被「讨好用户」的风格刷分。

模型评判:用一个强模型给回答打分。便宜、快,是今天大规模评测的主力,但评判者有自己的偏好(喜欢长的、喜欢有格式的),而且第十章说过它也会错。

实践里四种一起用,并且专门为自己关心的用途(比如「按本校规范批改作文」)建一套评测。这一条对微调自己模型的人尤其重要:先有评测,再动手训练,否则你不知道自己训好了没有。

四、SFT:示范数据怎么做

第九章说微调教的是格式与风格。这里看数据本身。

格式。一条 SFT 数据是一段对话,用一个「对话模板」把角色标记出来:

<|system|>你是一位耐心的物理老师。
<|user|>为什么天空是蓝的?
<|assistant|>因为空气分子对短波长的光散射更强……

模板里的特殊标记来自分词器,模型学会的就是「看到 assistant 标记之后该怎么写」。训练时只对助手那一轮的 token 算损失,用户的话不算,否则模型会学着「预测用户」。用错模板(和模型预训练或原微调时不一致)是微调失败最常见的原因之一。

质量。一万条精心写的对话胜过一百万条随便的。「精心」的含义:回答正确、完整、格式一致、语气一致、覆盖你关心的用法、包含拒绝和「我不确定」的例子。很多团队先让强模型生成草稿,再由人逐条修改。

多样性。同一种问题的一千个变体不如一百种问题各十条。缺哪一类,模型在那一类上就退回预训练的行为。

数量。改风格和格式,几百到几千条常常够;教一个新领域的语言习惯,几千到几万条;教新知识,SFT 不是好办法,那是检索(第十章)或继续预训练的事。

一种便宜地得到高质量 SFT 数据的办法叫拒绝采样:对一个问题让模型生成八个回答,用一个评判(规则、验证器、奖励模型、或者强模型)挑出最好的一个,把它当作示范数据。反复做,模型就在自己最好的输出上训练,一轮一轮变好。

它的效果取决于评判的可靠性:数学和代码有验证器,评判可靠,所以推理模型的数据大量来自这种方式;开放式写作没有验证器,评判会带偏好,反复迭代会放大偏好(回答越来越长、越来越像评判者喜欢的样子)。

合成数据的另一种用法是「教科书」:让强模型按大纲写出干净、结构化的教学文本,用于预训练的退火阶段或小模型的训练。它在小模型上效果显著,在前沿模型上是补充而非主力。风险是第九章讲的模型崩溃:一代代在自己的输出上训练,罕见的模式会消失。所以合成数据要和真实数据混合,并且评判要定期用人校准。

五、偏好与强化学习

第九章讲了 RLHF 和 DPO 的原理。这里讲它们的实操差异,以及 2024 年之后的新方法。

RLHF。三步:收集偏好数据(对同一问题的两个回答,人选更好的那个,几万到几十万对);训练奖励模型(一个和语言模型同架构、输出一个分数的模型,让它对人选的回答打分更高);用强化学习(通常是近端策略优化)让语言模型生成得分更高的回答,同时用一个「KL 约束」防止它偏离原模型太远。它需要同时维护四个模型(策略、参考、奖励、价值),显存和工程复杂度都很高,超参数敏感,训练不稳定。它的优势是能在线探索:模型生成新的回答、得到反馈、改进。

DPO。把偏好对直接写成损失:提高被选中回答的概率、降低被拒绝回答的概率,相对于参考模型。不需要奖励模型,不需要强化学习循环,一个普通的训练脚本就能跑,稳定、便宜。代价是离线:它只在已有的偏好对上学习,不探索新回答;数据过时或分布不匹配时效果下降。开源社区的多数对齐用它或它的变体。

GRPO 与可验证奖励。2024 年底之后流行的一类方法:对每个问题生成一组回答(比如十六个),用组内的相对好坏作为信号,不需要单独的价值模型,显存省一半。它和「可验证奖励」结合得最好:数学题对不对、代码能不能通过测试,是确定的、不会被讨好的信号。用这种信号做强化学习,模型学会了自己写出更长的推理、检查、回退,这就是第九章讲的推理模型的训练方式。2025 年一个开源推理模型的技术报告把这条路线完整公开,此后它成了训练推理能力的标准做法。

RLHF(PPO) DPO GRPO + 可验证奖励
奖励来自 人类偏好训练的奖励模型 偏好对本身 规则或验证器(对/错、测试通过)
探索 在线,生成新回答 离线,只用已有数据 在线,组内比较
需要的模型 策略、参考、奖励、价值 策略、参考 策略、参考
稳定性 差,超参敏感
典型用途 通用助手的对齐 开源模型的对齐 数学、代码、推理能力
主要风险 奖励破解、讨好奖励模型 分布不匹配、过拟合偏好对 只在可验证任务上有效;答案对但过程胡说

三者不互斥。一个典型的 2026 年配方是:SFT 打底,DPO 或 RLHF 做通用对齐,再用可验证奖励的强化学习专门提升推理,最后再做一轮对齐修正强化学习带来的副作用(比如回答变得啰嗦)。

奖励破解在实操里长什么样。第三章讲过原理。真实的例子:奖励模型偏爱长回答,模型学会了废话;奖励模型偏爱列表,模型什么都写成列表;代码测试只检查输出,模型学会了把答案硬编码进去;数学验证器只看最终数字,模型学会了先猜答案再编过程。每一个都是「学到了怎样拿奖励,而不是奖励想表达的东西」。对策是多样化的奖励、人工抽查、以及专门检测这些模式的评测。

六、推理模型怎样训练

把上面的零件拼起来,一个推理模型的训练大致是:

  1. 从一个强的基础模型或 SFT 模型出发。
  2. 收集有确定答案的题:数学、代码、逻辑、科学问答,几十万道,每道带验证器。
  3. 用 GRPO 一类的方法做强化学习:对每道题生成多个回答,答对的回答被强化。不限制思考的长度,模型自己发现「多想几步更容易对」,输出逐渐变长,出现自我检查和回退。
  4. 用拒绝采样把最好的推理过程收集成 SFT 数据,训练一轮,让模型的输出更可读。
  5. 再做一轮通用对齐,修正强化学习带来的语言混杂、格式混乱等副作用。

这条路线的两个限制值得记住:它依赖可验证的任务,在没有验证器的领域(写作、判断、开放问题)推理能力的提升要靠迁移,效果参差;而且「答案对」不等于「过程对」,验证器只看结果,过程可能包含错误的中间步骤。

七、蒸馏、量化、部署

训练完的模型要能用得起。

蒸馏。第九章提过:让小模型学习大模型的输出。对推理模型尤其有效,把大模型生成的几十万条推理过程当作 SFT 数据训练小模型,小模型能得到大部分推理能力。2025 年之后,「大模型训推理、蒸馏到小模型」成了标准的产品路线。

量化。把 16 位的权重压成 8 位或 4 位整数,模型体积减半再减半,推理速度提升,能力损失通常很小(4 位以下开始明显)。这是模型能在笔记本和手机上跑的原因。

推理引擎。批处理、键值缓存管理、投机解码(用小模型猜几个 token 让大模型一次验证)、把注意力算得更省,几种技术叠加,把每个 token 的成本降了一两个数量级。第十二章说智能体在 2026 年能用了,成本这一条主要来自这里。

八、自己动手:一块 GPU 上的微调

这是这一篇最实用的一节。假设你有一个开放权重的 70 亿参数模型、一块有 24GB 显存的 GPU、几千条你领域的对话数据,想让模型学会你领域的语言和格式。

LoRA。全参数微调 70 亿参数需要几百 GB 显存。低秩适配(LoRA)的办法是冻结原模型,只在每个注意力矩阵旁边加一对很小的矩阵(几百万参数),训练它们。效果接近全参数微调,显存降到十几 GB,训练好的「适配器」只有几十 MB,可以随时插拔。配合 4 位量化的底座(QLoRA),一块消费级 GPU 就够。

在一幅织好的挂毯上绣一个小图案:原来的不动,只学新的一小块。
在一幅织好的挂毯上绣一个小图案:原来的不动,只学新的一小块。

步骤。

  1. 先建评测。从你的数据里留出两百条从未用于训练的样本,再准备一份「模型应该做到什么」的检查清单。没有这一步,后面全是猜。
  2. 准备数据。按第四节的格式整理成对话;用底座模型自带的对话模板,一个字都不要改;检查每一条的回答是你真的满意的。几千条通常够。
  3. 先试提示。把最好的十条示例放进系统提示,看底座模型能做到什么程度。如果已经够用,停在这里。
  4. 训练。LoRA 秩取 16 到 64,学习率 1e-4 左右,训练两三轮,批次按显存来。一晚上。
  5. 看曲线。训练损失下降、留出损失不回升。留出损失回升说明过拟合,减少轮数。
  6. 评测。在留出的两百条上跑,对照检查清单,和第 3 步的提示方案比。抽二十条人工细读。
  7. 检查副作用。问它几个与你领域无关的常识问题,看它是否「忘了」通用能力(灾难性遗忘)。忘了就把一部分通用对话数据混进训练集。
  8. 部署。合并适配器或在推理时加载,量化,用一个推理引擎服务。

什么时候不该微调。你想让它「知道」新东西:用检索(第十章)。你想改变一两个行为:改提示。你的数据不到几百条:改提示。你没有评测:先做评测。

提示词 / 技能检索增强微调从头训练 你想改变的是投入知识更新效果上限什么时候选 行为、格式、语气它知道什么风格、领域语言、稳定性一切 几小时,零算力几天,建库几天,一块 GPU几个月,几万块 改提示即可改文档即可要重训要重训 受限于模型本身受限于检索质量高,但会遗忘最高 永远先试它要用自己的资料回答提示做不到的风格与格式几乎不需要 顺序:先提示,不够再检索,还不够再微调;三者可以叠加。大多数团队在前两格解决问题。
提示、检索、微调、从头训练:先左后右,可以叠加。

九、成本表

数字随时间快速下降,取整数量级,写于 2026 年 9 月。

事情 数据 算力 大致费用 谁能做
预训练 10 亿参数 几百亿 token 几十块 GPU × 几天 几万元 实验室、课题组
预训练 70 亿参数 几万亿 token 几百到上千块 GPU × 几周 几百万元 公司、大实验室
预训练前沿模型 十几万亿 token 几万块 GPU × 几月 几亿到几十亿元 十几家机构
SFT 70 亿参数(全参数) 几万条 几块 GPU × 一天 几千元 任何团队
LoRA 微调 70 亿参数 几千条 一块 GPU × 一晚 几十元电费 个人
DPO 对齐 70 亿参数 几万对 几块 GPU × 一天 几千元 任何团队
可验证奖励 RL 70 亿参数 几十万题 几十块 GPU × 几天 几万元 课题组
蒸馏到 15 亿参数 几十万条大模型输出 几块 GPU × 一天 几千元 + 生成数据的 API 费 任何团队

一个直观的结论:除了第一列的前沿预训练,其他每一行都在一所大学的能力范围内。开放权重模型让「训练」这件事从十几家公司的专利变成了课题组的日常。

十、常见的坑

对话模板用错。微调时的标记和底座不一致,模型在推理时看到的格式没见过,表现崩掉。对策:用底座自带的模板,不改。

灾难性遗忘。只在领域数据上训练,通用能力退化。对策:混入通用数据,用 LoRA 而不是全参数,减少轮数。

SFT 过拟合。几百条数据训十轮,模型背下了示例,换个问法就不会。对策:留出损失、少轮数、更多样的数据。

评测污染。留出集和训练集里有几乎相同的样本,成绩虚高。对策:按第五章和专题四的方式划分。

奖励破解。第五节讲过。对策:多样奖励、人工抽查。

数据里的敏感信息。微调数据里有学生姓名、病人信息,模型可能原样吐出来。对策:训练前脱敏,这是第十四章数据备忘的训练版。

没有基线。训完发现不如提示方案,但已经花了两周。对策:第八节第 3 步,先试提示。

带走一句话

训练是一条流水线:数据管道决定上限,预训练锁定它,评测指方向,SFT 定形式,偏好与强化学习定取舍,可验证奖励长出推理,蒸馏与量化让它用得起。前面几格是十几家机构的事,从 SFT 起,一个课题组、一块 GPU、一晚上就能做,而且常常够用。先有评测,再动手。

自测先自己想,再点开答案
  1. 为什么说数据管道决定上限,而后面的微调只能塑形不能补课?

    答案

    模型的知识和语言能力在预训练时由数据锁定;SFT 和对齐用的数据小几个数量级,只能改变格式、风格和取舍,教不了新知识(新知识要靠检索或继续预训练)。

  2. RLHF 和 DPO 最本质的区别是什么?各自的代价?

    答案

    RLHF 在线探索:模型生成新回答、奖励模型打分、强化学习改进,需要四个模型、不稳定。DPO 离线:直接在偏好对上优化,简单稳定,但不探索、数据过时时效果下降。

  3. 可验证奖励为什么对推理能力特别有效?它的限制是什么?

    答案

    对/错、测试通过是确定的信号,不会被讨好,模型在这种信号下自己发现「多想几步更容易对」。限制:只在有验证器的任务上有效;验证器只看结果,过程可能错。

  4. 你有三千条领域对话、一块 24GB 的 GPU,想让模型学会你领域的写法。该做的第一步是什么?

    答案

    先建评测:留出两百条不用于训练,写一份检查清单。然后先试提示方案,够用就停;不够再用 LoRA 微调,训完对照评测比较。

  5. 微调之后模型「忘了」常识,是什么问题?怎么办?

    答案

    灾难性遗忘:只在窄领域数据上训练让通用能力退化。混入通用数据、用 LoRA 而不是全参数、减少训练轮数。

本章术语

预训练Pre-training

三阶段训练的第一阶段,也是最贵的:在几万亿 token 的文本上预测下一个 token,用几万块 GPU 跑几个月。看似平淡的任务逼出了语言、知识与推理能力。产物是基础模型。

监督微调Supervised Fine-Tuning, SFT

用几万到几十万条高质量「问题 + 回答」示范继续训练基础模型,教它对话的格式与风格。改变的主要是形式而非知识,数据质量远比数量重要。

对齐Alignment

用人类偏好(对几个回答的排序)而非标准答案训练模型,使其更有帮助、更诚实、更无害。三者有张力,「偏好由谁定义」是最受争议的问题。它不是给模型装道德模块,而是继续塑造概率分布,因此可以被推回去(越狱)。

RLHFReinforcement Learning from Human Feedback

从人类反馈中强化学习:用人类排序训练一个奖励模型,再用强化学习让语言模型生成得分更高的回答。2022 年 ChatGPT 的关键技术。难点:奖励模型可被「讨好」(奖励破解),训练不稳定。

DPODirect Preference Optimization

直接偏好优化:把「回答 A 胜过 B」直接写成损失函数,用梯度下降优化,绕开奖励模型与强化学习。与 RLHF 目标等价而更简单稳定,是开源社区的标准做法。

推理模型Reasoning model

用强化学习专门奖励「先写推理过程、答案正确」而训练出的模型,回答前自发生成几百到几万 token 的思考。数学、编程、科学问题上跃升一个台阶,代价是慢与贵。它意味着能力可以靠推理时的算力购买。

混合专家Mixture of Experts, MoE

把前馈网络换成几十个并列的「专家」,由路由器为每个 token 只挑两三个计算。总参数可以很大,每次激活的参数很小,训练与推理成本按激活参数算。2024 年底起成为大模型默认选择。

校准Calibration

模型表达的把握程度与实际正确率的一致性。基础模型校准通常很好,对齐后常变差,因为标注者偏爱肯定的语气。于是「自信」不再对应「正确」。实用建议:把语气当噪声,把多次回答的一致性当信号。