扩展:LLM 训练过程
在线 Notebook
对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。
所属章节: 第 5 章:LLM 基础
数据到 batch
预训练数据通常经过来源登记、解析、去重、过滤、分词和样本拼接。每一步都应版本化,因为同一模型配置在不同数据管线下可能得到不同结果。
原始文档
→ 清洗与去重
→ tokenizer
→ token 序列
→ 截断、拼接与抽样
→ 训练 batch样本拼接可以减少 padding,但要明确文档边界是否允许相互注意。数据抽样比例应按实际 token 统计,而不是只看文件数量。
因果语言建模目标
给定 token 序列
训练时可并行计算各位置损失,因为真实前缀已经给出;生成时必须逐步把新 token 写回上下文。两阶段共享模型,但计算模式不同。
一次训练更新
batch
→ 前向传播与 token loss
→ 反向传播
→ 梯度聚合 / 裁剪
→ 优化器更新
→ 学习率调度
→ 日志与检查点分布式训练还需要在数据并行、张量并行、流水线并行和参数分片之间选择。选择依据是模型状态、激活、通信带宽和硬件拓扑,不是模型参数量单一指标。
训练预算与 Scaling Laws
一些实验观察到模型规模、数据量、计算量与验证损失之间近似幂律关系:
实际规划还要考虑模型推理成本:训练上更省计算的模型,不一定在目标请求量下更省总成本。
能力变化与阈值
某些评测会在规模增加后出现非线性跃升,但这可能来自指标阈值、提示方式、采样误差或真实能力变化。分析时应查看连续指标、多个模型规模和置信区间,避免把单个 Benchmark 的过线描述成统一“涌现机制”。
In-Context Learning 表示模型根据上下文示例改变当前预测,而不更新参数。它的效果受示例选择、顺序、标签分布和上下文长度影响。
训练监控
至少记录:
- 训练与验证 loss、学习率和梯度范数;
- 每秒 token、硬件利用率和通信时间;
- 非有限值、跳过更新和数据异常;
- 不同语言、领域与任务的定期评测;
- 检查点、代码、依赖、数据版本和随机种子。
训练 loss 下降只说明对训练目标的拟合改善,不自动代表事实性、指令遵循或安全性改善。
常见失败
| 现象 | 排查方向 |
|---|---|
| loss 突然发散 | 学习率、异常 batch、梯度范数、数值精度 |
| 验证 loss 不改善 | 数据重复、分布偏差、容量或优化不足 |
| 下游指标退化 | 数据配比、评测污染、能力干扰 |
| 吞吐下降 | batch 形状、通信、数据加载和重计算 |
| 恢复训练不一致 | 优化器、调度器、随机状态和数据游标 |
与后续训练阶段的边界
预训练学习一般的条件 token 分布;SFT 用示范调整任务行为;偏好优化使用回答比较或奖励。三者都更新参数,但数据结构、目标函数和评价方式不同。
返回: 第 5 章:LLM 基础
