大模型训练流水线总览

从数据准备、预训练、指令微调、偏好对齐到评测上线,建立一条完整、可落地的大模型训练工程地图。

难度

进阶

阅读时长

约 100 分钟

更新日期

2026/03/24

主题

训练工程 / 预训练 / SFT / RLHF / DPO

先修知识

深度学习基础GPU 训练常识Transformer 基础

学习目标

这篇文章不是教你一次性训练出顶级基础模型,而是帮你建立一张完整地图。读完后,你应该能回答:

  1. 一个大模型训练项目通常分成哪些阶段。
  2. 每个阶段的输入、输出、关键指标分别是什么。
  3. 为什么“数据质量、训练稳定性、评测体系”常常比单次调参更重要。
  4. RLHF 和 DPO 处在流水线中的什么位置,各自解决什么问题。

如果你把大模型训练想成造一条生产线,那么模型参数只是最终出厂的产品,真正决定成败的是整条线是否顺畅。

一张总览图:从原始数据到可上线模型

一个典型的大模型训练流程大致可以拆成六段:

  1. 数据准备:采集、清洗、去重、过滤、混合、切分。
  2. 预训练:用海量 token 做下一词预测,学到通用语言建模能力。
  3. 指令微调(SFT):把“会续写”变成“会按要求回答”。
  4. 偏好对齐(RLHF 或 DPO):让模型更符合人类偏好、拒答策略和产品风格。
  5. 评测与安全审查:确认模型在能力、安全和稳定性上达到上线门槛。
  6. 推理部署与回流:把线上反馈重新纳入数据闭环,驱动下一轮迭代。

这六段不是完全线性的。成熟团队通常会边训练边评测、边上线边回流数据,所以它更像一个循环系统,而不是一次性的瀑布流程。

先把这条主线放进同一张图里,会更容易理解各阶段的角色分工:

大模型训练流水线闭环示意图 从数据准备开始,经过预训练、SFT、偏好对齐、评测审查和部署回流,再通过线上日志与失败样本重新回到数据准备的闭环。 离线训练主线 上线后重新进入数据闭环
  <g>
    <rect x="30" y="92" width="140" height="84" rx="18" fill="#e8f1ff" stroke="#98b7e1" />
    <text x="100" y="125" text-anchor="middle" font-size="20" font-weight="700">数据准备</text>
    <text x="100" y="150" text-anchor="middle" font-size="14" fill="#4b5563">清洗 / 去重 / 配比</text>
  </g>
  <g>
    <rect x="186" y="92" width="140" height="84" rx="18" fill="#fef3c7" stroke="#e7c66f" />
    <text x="256" y="125" text-anchor="middle" font-size="20" font-weight="700">预训练</text>
    <text x="256" y="150" text-anchor="middle" font-size="14" fill="#4b5563">下一词预测</text>
  </g>
  <g>
    <rect x="342" y="92" width="140" height="84" rx="18" fill="#e0f2e5" stroke="#8bc09b" />
    <text x="412" y="125" text-anchor="middle" font-size="20" font-weight="700">SFT</text>
    <text x="412" y="150" text-anchor="middle" font-size="14" fill="#4b5563">指令跟随 / 风格统一</text>
  </g>
  <g>
    <rect x="498" y="92" width="140" height="84" rx="18" fill="#fce7ef" stroke="#e2a8bd" />
    <text x="568" y="125" text-anchor="middle" font-size="20" font-weight="700">偏好对齐</text>
    <text x="568" y="150" text-anchor="middle" font-size="14" fill="#4b5563">RLHF / DPO</text>
  </g>
  <g>
    <rect x="654" y="92" width="140" height="84" rx="18" fill="#ece8ff" stroke="#b5abef" />
    <text x="724" y="125" text-anchor="middle" font-size="20" font-weight="700">评测审查</text>
    <text x="724" y="150" text-anchor="middle" font-size="14" fill="#4b5563">能力 / 安全 / 稳定性</text>
  </g>
  <g>
    <rect x="810" y="92" width="140" height="84" rx="18" fill="#dff4f0" stroke="#8dc7bd" />
    <text x="880" y="125" text-anchor="middle" font-size="20" font-weight="700">部署回流</text>
    <text x="880" y="150" text-anchor="middle" font-size="14" fill="#4b5563">线上反馈 / 版本迭代</text>
  </g>

  <line x1="170" y1="134" x2="186" y2="134" stroke="#5b6b7f" stroke-width="3" marker-end="url(#train-arrow)" />
  <line x1="326" y1="134" x2="342" y2="134" stroke="#5b6b7f" stroke-width="3" marker-end="url(#train-arrow)" />
  <line x1="482" y1="134" x2="498" y2="134" stroke="#5b6b7f" stroke-width="3" marker-end="url(#train-arrow)" />
  <line x1="638" y1="134" x2="654" y2="134" stroke="#5b6b7f" stroke-width="3" marker-end="url(#train-arrow)" />
  <line x1="794" y1="134" x2="810" y2="134" stroke="#5b6b7f" stroke-width="3" marker-end="url(#train-arrow)" />

  <path d="M 880 176 C 920 252, 108 252, 100 176" fill="none" stroke="#5b6b7f" stroke-width="3" marker-end="url(#train-arrow)" />
  <text x="490" y="246" text-anchor="middle" font-size="16" fill="#5b6b7f">日志 / 失败样本 / 新数据重新进入数据准备</text>
</g>
训练不是一次性直线流程,而是“训练、评测、部署、回流”持续闭环。

第一阶段:数据准备是整条流水线的地基

很多新手会把训练理解成“模型架构 + GPU 数量”,但真正决定上限的往往是数据。

数据准备通常包含什么

  • 数据采集:网页、书籍、代码、问答、对话、领域文档等。
  • 数据清洗:去除乱码、模板噪声、低质量重复内容。
  • 数据去重:减少模型重复记忆和训练浪费。
  • 质量过滤:用规则、分类器或小模型判断内容是否值得保留。
  • 配比混合:平衡通用语料、代码、数学、对话、领域数据的占比。

为什么“质量”常常比“数量”更关键

当数据规模已经很大时,继续加入低质量样本,带来的往往不是纯收益,而是:

  • 风格漂移
  • 噪声放大
  • 安全风险增加
  • 训练 token 被低价值内容稀释

所以现实工程里,很多团队会把大量精力放在数据评分、采样权重和混合策略上,而不是单纯追求更多 token。

一个最小指令数据格式示例

SFT 阶段常见的单轮对话格式大致如下:

{
  "messages": [
    { "role": "system", "content": "你是一个严谨的中文 AI 助手。" },
    { "role": "user", "content": "解释一下什么是 KV Cache。" },
    { "role": "assistant", "content": "KV Cache 是在自回归解码时缓存历史 Key/Value 的机制..." }
  ]
}

真正项目里,数据格式统一非常重要,因为模板一旦混乱,训练和评测都会出现难以定位的问题。

第二阶段:预训练负责学“世界知识”和“语言结构”

预训练通常使用自回归目标,也就是让模型根据前文预测下一个 token。这个目标看似简单,却足够强大,因为语言中的语法、事实、模式、风格、推理线索都会被压进这个预测任务里。

预训练阶段主要关注哪些指标

  • training loss 和 validation loss
  • token throughput
  • GPU 利用率与显存占用
  • 梯度稳定性
  • checkpoint 恢复是否可靠

工程上最容易踩的坑

  • 数据混合不稳定,导致 loss 曲线异常波动。
  • 学习率或 warmup 设置不合适,早期训练直接发散。
  • tokenizer 不匹配任务,造成 token 利用率低。
  • 只看 loss,不看不同领域样本的表现,导致“平均看起来没问题,关键场景却很差”。

如果你对“为什么规模化训练会有规律”感兴趣,可以配合阅读 Scaling Laws for Neural Language Models

第三阶段:SFT 让模型从“会续写”变成“会执行指令”

仅靠预训练,模型通常更像一个会补全文本的系统。SFT 的目标,是让它学会遵循用户意图、输出更稳定的格式,并适应产品场景中的交互方式。

SFT 常见的数据来源

  • 人工编写的高质量指令样本
  • 专家标注的领域问答
  • 历史客服或业务对话整理
  • 用强模型蒸馏得到的合成数据

SFT 阶段最需要关注什么

  1. 回答风格是否统一。
  2. 输出结构是否稳定,例如 JSON、Markdown、工具调用格式。
  3. 模型是否学会拒答超出能力或高风险请求。
  4. 领域数据是否把通用能力压坏。

很多团队在这一步就会发现:少量高质量数据,常常比大批量低质量指令样本更有效。

第四阶段:偏好对齐解决“会答”之后的“答得像不像人想要的”

SFT 能让模型学会任务格式,但未必能保证回答风格、风险偏好、帮助性和安全性都符合产品目标。这时就需要偏好对齐。

RLHF 的基本流程

RLHF 可以粗略拆成三步:

  1. 让标注者对多个回答做偏好排序。
  2. 用这些偏好数据训练奖励模型。
  3. 用强化学习方法更新主模型,让它倾向于产生高奖励回答。

RLHF 的优点是表达力强,能显式建模“人更喜欢哪种回答”;缺点是流程复杂、成本高、训练稳定性要求高。

DPO 的思路为什么更轻量

DPO(Direct Preference Optimization)尝试跳过显式奖励模型和强化学习优化,直接利用偏好对来更新模型。它的吸引力在于:

  • 实现链路更短。
  • 训练更接近普通监督学习。
  • 实验迭代速度通常更快。

但 DPO 也不是万能药。若偏好数据本身质量不高,或者产品目标非常复杂,DPO 同样会受到限制。

在实际项目中,比较务实的做法是:

  • 当你还在快速迭代阶段,优先用 SFT + DPO 建立基础对齐能力。
  • 当你需要更细粒度地控制行为边界,再考虑更完整的 RLHF 流程。

第五阶段:评测必须独立于训练集

训练流水线最危险的错觉,就是“loss 降了,所以模型更好了”。真实情况往往复杂得多。

评测至少要覆盖三类问题:

1. 能力评测

  • 通用问答
  • 代码生成
  • 数学推理
  • 领域任务

2. 行为评测

  • 指令遵循
  • 结构化输出稳定性
  • 长上下文使用能力
  • 工具调用成功率

3. 安全评测

  • 有害请求处理
  • 幻觉率
  • 越权信息输出
  • 敏感领域拒答策略

一个成熟的评测体系,往往既包括自动基准,也包括人工抽检。两者缺一不可,因为自动指标更快,人工评审更接近真实体验。

第六阶段:上线不是结束,而是新一轮数据回流的开始

模型部署后,你会看到大量训练阶段感知不到的问题:

  • 用户提问方式与离线数据分布不同。
  • 工具调用链在真实网络环境中更脆弱。
  • 某些拒答策略过严,伤害正常体验。
  • 热门场景的格式要求比想象中更固定。

所以线上日志、失败案例、用户反馈和人工复盘,都会变成下一轮训练和评测的重要来源。真正成熟的团队做的不是“一次训练”,而是“持续闭环”。

一个适合小团队的最小可行流程

如果你不是在训练百亿参数基础模型,而是想为业务快速搭一个可落地流程,可以参考这个缩小版:

  1. 先选一个开源底座模型。
  2. 准备一小批高质量领域 SFT 数据。
  3. 建立最基本的自动评测集和人工 review 清单。
  4. 先做 SFT,再看是否需要 DPO。
  5. 把线上失败样本滚动回灌,持续更新数据集。

这个流程虽然简单,但比“直接堆数据、盲目训练”更有效,也更接近真实项目节奏。

工程重点清单

  • 数据质量通常比盲目扩充 token 更关键。
  • 预训练、SFT、对齐、评测应该有各自独立的数据切分。
  • 训练监控不能只看 loss,还要看吞吐、稳定性、样本分布和恢复能力。
  • 对齐阶段必须设计独立评测集,否则很容易出现“看起来更听话,实际更会迎合”的问题。
  • 上线后的失败样本,是下一轮训练最有价值的数据之一。

推荐阅读顺序

如果你想把这篇总览拆成更具体的学习路线,可以继续阅读:

练习题

  1. 为什么说高质量数据混合策略会直接影响预训练上限?
  2. SFT 和 DPO 分别主要解决什么问题,它们的输入数据格式有什么不同?
  3. 如果一个模型 loss 更低,但结构化输出更不稳定,你会如何解释?
  4. 设计一个你所在业务场景下最小可行的离线评测集,需要包含哪些维度?

延伸思考

当你真正参与一个训练项目时,最有帮助的问题往往不是“最先进的算法是什么”,而是:

我们的数据、目标、预算和评测方式,是否形成了一条闭环?

能把这条闭环跑起来,往往比单点模型改进更重要。

相关阅读

从相近主题继续深入,建立连续学习链路。