跳到主要内容

训练循环与数据

预训练数据集演化、AdamW 配置、学习率调度与 loss spike 应对

核心要点

  • 数据集 C4 → The Pile → RedPajama → RefinedWeb → FineWeb 15T 演化
  • MinHash LSH 模糊去重是主流,去重让背诵概率降 10×
  • Llama 3 配比:50% Web / 25% 数学+推理 / 17% 代码 / 8% 多语言
  • AdamW 大模型标准:β₁=0.9, β₂=0.95 (非默认 0.999),wd=0.1, grad clip 1.0
  • LR: linear warmup 0.1-2% step + cosine decay 至 peak 10%
  • BF16 是 A100/H100 时代事实标准,FP16 在 100B+ 频繁溢出
  • PaLM 540B 训练 20+ loss spike,对策回退 + skip; Llama 3 几乎无 spike
  • 数据墙 (Villalobos 2024):高质量文本 2026-2028 耗尽

名词定义

本篇共享名词在 6.1 总览 已定义 (Token budget D / Compute budget C / Loss spike)。本篇新引入:

名词定义
MinHash LSH模糊去重算法,用 256 个哈希排列构造文档指纹,Jaccard 相似度 > 阈值 (典型 0.7) 视为重复
Critical batch size ($B^*$)McCandlish 2018 定义,超过此 batch size 后训练效率边际递减
Gradient accumulation用多个小 batch 模拟一个大 batch,跨多个 step 累加梯度后更新一次
BF16Brain Floating Point 16-bit,保留 FP32 的 8 位指数 (动态范围与 FP32 同),牺牲尾数精度
Loss spike训练过程中 loss 突然飙升的现象,大模型训练常见,即使有 gradient clipping 仍发生
ZClip自适应 gradient clipping,主动防御 loss spike

@tbl-loop-glossary 本篇新引入名词

训练数据从哪里来?

核心问题:GPT-3 训了 300B token, Llama 3 训了 15T token, DeepSeek-V3 训了 14.8T token——这些天文数字 token 从哪里来?怎么选?

几乎所有大模型的训练数据起点都是 CommonCrawl (全球互联网爬取),经过去重、过滤、分类、配比后变成训练集

主流数据集的演化

数据集大小来源关键贡献
C4 (2019, T5)156B tokens / 750GBCommonCrawl段落级哈希去重 + 启发式过滤,范式开启 (但过滤太激进)
The Pile (2020, EleutherAI)~300B tokens / 825GB22 个子集 (含 GitHub / arXiv / 书籍)多来源多领域混合范式
RedPajama-v1 (2023, Together)1.2T tokens复现 LLaMA-1 训练集开源版"Llama 训练数据"
RefinedWeb (2023, Falcon/TII)5T tokensCommonCrawl关键结论:纯 Web + 严格过滤性能超过精选混合;仅保留 CommonCrawl ~23% 文档
FineWeb (2024, HuggingFace)15T tokens96 个 CommonCrawl 快照多 benchmark 超过 C4/SlimPajama/The Pile
FineWeb-Edu (子集)1.3T tokensLlama-3-70B 打分训练分类器过滤"高质量教育文本" 子集,Phi 系思路

@tbl-loop-datasets 主流预训练数据集演化

核心趋势:数据集越来越大,质量过滤越来越严,RefinedWeb 实证 "纯 Web + 严过滤"足以超过精心混合,颠覆了"必须加 GitHub + arXiv"的 The Pile 范式。

去重:让模型不"背书"

重复数据让模型直接背诵,占用容量,不产生泛化。Lee et al. ACL 2022[1] 实证:

  • 去重让模型背诵概率降低 10×
  • 同等精度所需训练步骤减少

主流去重方法

  • Exact dedup:字符级哈希,找完全相同文档
  • MinHash LSH (模糊):256 个哈希排列,Jaccard 相似度 > 0.7 视为重复;抓"基本相同但有小改动"的文档 (转载 / 镜像 / 模板生成)

BigCode StarCoder 用 MinHash LSH 把 6TB 代码库压缩到 3TB; FineWeb 全流程用类似 MinHash 去重。

数据配比:不是平均混

不同来源的数据贡献不同能力,配比直接影响下游表现。Llama 3 tech report §3.1 公布大致比例:

类别Llama 3 占比
通用 Web (FineWeb 类)~50%
数学 + 推理~25%
代码~17%
多语言~8%

@tbl-loop-llama3-mix Llama 3 训练数据配比 (官方 §3.1)

配比是 scaling law 扫描小模型决定的:不是工程师拍脑袋,而是训练几个不同配比的小模型,看哪个配比下大模型表现最好。

其他模型公开信息:

  • DeepSeek-V3 (14.8T tokens):大幅提升数学 + 代码比例,具体百分比未公开
  • Qwen2.5 (18T tokens):含 1T 数学合成语料 + 5.5T 代码语料

Synthetic data: Phi 系的颠覆

Microsoft Phi-1 (1.3B 参数,仅 7B 训练 tokens,用 GPT-3.5 合成"教科书风格" 数据)[2] 在 HumanEval 上达到 50.6%,超过比它大 10× 的模型——证明质量 > 规模,至少在某些任务上。

DeepSeek-Math 用 fastText 从 CommonCrawl 提取 120B 数学 tokens,另用 RL 生成 CoT 合成数据。

数据墙:2026-2028 耗尽

Villalobos et al. ICML 2024[3] 估算:

  • 互联网上高质量人类文本预计 2026-2028 年耗尽
  • 过训练 (overtraining) 可能让上限提前至 2026
  • 之后的扩展只能靠 synthetic data / 多模态 / 反复使用同一数据

Llama 3 / GPT-4 已接近高质量数据上限,这是 scaling 进入新阶段的根本信号。

AdamW 与超参数:大模型实测配置

核心问题:PyTorch AdamW 默认 $\beta_1=0.9, \beta_2=0.999$,大模型训练直接用默认行不行?

不行。大模型训练有一套实测配置,与默认值差异大,是十年训练大模型积累的工程经验

大模型 AdamW 标准配置

GPT-3 / LLaMA 2/3 / nanoGPT 全采用相同配置[4]:

超参默认大模型标准备注
$\beta_1$0.90.9一致
$\beta_2$0.9990.95关键改变
Weight decay$10^{-2}$0.1大模型更重正则
$\epsilon$$10^{-8}$$10^{-8}$一致
Gradient clip max norm1.0关键添加

@tbl-loop-adamw 大模型 AdamW 超参 (与 PyTorch 默认对比)

$\beta_2$ 从 0.999 降到 0.95 是最关键的非显然改动:允许二阶矩估计更快响应训练中梯度量级的大幅变化。

LR Schedule: warmup + cosine decay

现代 LLM 训练用统一 recipe:

  1. Linear warmup:前 0.1% - 2% 总 step 从 0 线性升到 peak LR
  2. Cosine decay:之后按 cosine 曲线衰减到 peak 的 10%

Peak LR 随模型规模降低

模型Peak LR
Llama 3 8B$3 \times 10^{-4}$
Llama 3 70B$1.5 \times 10^{-4}$
Llama 3 405B$8 \times 10^{-5}$
GPT-3 175B$6 \times 10^{-5}$

@tbl-loop-peak-lr 主流大模型 Peak LR (随模型变大而降)

直觉:模型越大梯度方差越大,用更小 LR 让训练稳。

Batch size: McCandlish 2018 + 渐进增大

McCandlish 2018[5] 定义 critical batch size:

$$\begin{equation} B^* = \frac{\mathrm{tr}(\Sigma)}{\|\mathbf{G}\|^2} \label{eq:loop-critical-batch} \end{equation}$$

超过 $B^*$,增加 batch 收益边际递减。

大模型采用渐进增大策略,不是固定 batch

模型Batch 策略
Llama 34M tokens 起步 → 252M tokens 后增到 8M → 2.87T tokens 后增到 16M
GPT-332K → 3.2M (训练中渐进增大)

@tbl-loop-batch Llama 3 / GPT-3 渐进增大 batch 策略

直觉:训练早期梯度信号清晰小 batch 够,训练后期信号弱需要大 batch 平均噪声。

混合精度:BF16 是事实标准

核心问题:训练大模型用 fp32 内存翻 2 倍,用 fp16 容易溢出,现代用什么?

BF16 (Brain Float 16) 是 A100/H100 时代事实标准,保留 fp32 的指数范围只降尾数精度,解决了 fp16 在大模型上频繁溢出的问题

BF16 vs FP16 vs FP32 数据格式

格式总位数指数位尾数位动态范围最大值
FP3232823$\sim 10^{-38}$$10^{38}$$3.4 \times 10^{38}$
FP1616510$\sim 10^{-5}$$6.5 \times 10^4$$65504$
BF161687同 FP32$\sim 3.4 \times 10^{38}$

@tbl-loop-precision BF16 / FP16 / FP32 格式对比

关键:BF16 保留 FP32 的 8 位指数,动态范围一致——100B+ 大模型训练梯度量级跨越很大,FP16 频繁溢出 (max 65504 不够),BF16 几乎不会溢出。

Llama 3 的混合精度方案

BF16 前向 / 反向 + FP32 梯度累积 (Llama 3 tech report):

  • 前向 / 反向矩阵乘用 BF16,算得快内存省
  • 梯度累积 (跨多 step 求和) 用 FP32,避免精度损失
  • 无需 loss scaling (fp16 需要 loss scaling 防溢出),训练稳定性大幅提升

这是 A100/H100 时代的事实标准,GPT-4 / Llama / DeepSeek 都用。

Loss spike:大模型训练的常态

核心问题:训练几千亿参数模型时,loss 经常突然从 2.5 跳到 5.0 再慢慢回落。这是 bug 还是常态?怎么处理?

Loss spike 是大模型训练的常态,大模型从业者用回退 + skip 的"恢复 recipe" 处理,不能依赖完美训练直接走完

PaLM 540B 的 20 次 spike

PaLM tech report (Chowdhery 2022)[6] 公开报告:

  • 训练过程中记录约 20 次 loss spike
  • 即使开启 gradient clipping 仍发生
  • 标准对策:
    1. 回退到 spike 前 ~100 步 的 checkpoint (含 optimizer states)
    2. 跳过 200-500 个 batch 数据后继续训练
    3. 通常 spike 不会在跳过的数据 + 后续数据上重新发生

@tbl-loop-spike-strategy PaLM 540B 的 loss spike 处理策略

这条 recipe 是公开秘密:业界大模型团队都有类似机制,训练过程不是"按下 start 走完",需要人工值守。

Llama 3 几乎无 spike

Llama 3 tech report 报告训练极为稳定,几乎无 spike,无需人工干预。这归功于:

  • 严格的数据质量过滤 (脏数据触发 spike)
  • BF16 替代 FP16,数值稳定性提升
  • 优化的 lr schedule
  • Pre-RMSNorm 架构的训练友好性

主动防御:ZClip / SPAM

最新工作给出主动防御方案:

  • ZClip:自适应 gradient clipping,根据梯度量级历史动态调整阈值
  • SPAM: spike 后重置 Adam momentum,避免 momentum 把 spike 影响放大到后续 step

工业应用仍有限,主流仍依赖事后回退 + skip。

Takeaway

知识点核心结论
数据集演化C4 (156B) → Pile (300B) → RedPajama (1.2T) → RefinedWeb (5T) → FineWeb (15T)
RefinedWeb 颠覆纯 Web + 严过滤性能超过精选混合,仅保留 CommonCrawl 23%
去重收益MinHash LSH 让背诵概率降 10× (Lee 2022)
Llama 3 配比50% Web / 25% 数学+推理 / 17% 代码 / 8% 多语言
Phi-1 反例1.3B 参数 + 7B 合成 token, HumanEval 50.6%,质量 > 规模
数据墙高质量人类文本 2026-2028 耗尽 (Villalobos 2024)
AdamW 标准β₁=0.9, β₂=0.95 (非默认 0.999),wd=0.1, grad clip 1.0
LR Schedulelinear warmup 0.1-2% step + cosine decay 至 peak 10%
Peak LR随模型规模降,Llama 3 8B 3e-4 / 70B 1.5e-4 / 405B 8e-5
Batch 渐进Llama 3 从 4M → 8M → 16M,不固定
BF16 标准保留 FP32 的 8 位指数,100B+ 必用;FP16 频繁溢出
Loss spikePaLM 540B 训练 20+ spike,回退 100 步 + skip 200-500 batch
Llama 3 稳定几乎无 spike,归功于数据 + BF16 + 优化 schedule + Pre-RMSNorm

开放问题

  • 数据墙之后怎么办:2026-2028 高质量文本耗尽,synthetic data + 多模态 + 反复使用同一数据中哪个会主导,尚无共识
  • Phi 系合成数据是否可大规模复制:Phi-1/2/3 在小规模上证明质量 > 规模,大规模 (>100B) 上是否仍 work 待验证
  • Loss spike 的根因:数据 / 优化器 / 架构哪个是主因?业界共识是综合,但精确原因仍开放
  • Llama 3 几乎无 spike 是否可复现:其他团队复制 Llama 3 配置训练 70B+ 是否同样稳定,工业内部数据有限
  • Critical batch size 在大模型上是否仍是好指标:McCandlish 2018 用小模型实验,大模型上是否仍有效,学术界仍在研究

延伸阅读

参考资料

  1. Lee et al. Deduplicating Training Data Makes Language Models Better. ACL 2022. https://aclanthology.org/2022.acl-long.577/
  2. Gunasekar et al. Textbooks Are All You Need. 2023. https://arxiv.org/abs/2306.11644
  3. Villalobos et al. Will we run out of data? Limits of LLM scaling based on human-generated data. ICML 2024. https://proceedings.mlr.press/v235/villalobos24a.html
  4. Meta AI. The Llama 3 Herd of Models. 2024. https://arxiv.org/abs/2407.21783
  5. McCandlish et al. An Empirical Model of Large-Batch Training. 2018. https://arxiv.org/abs/1812.06162
  6. Chowdhery et al. PaLM: Scaling Language Modeling with Pathways. 2022. https://arxiv.org/abs/2204.02311