跳转至

第五章 预训练:从 GPT 到 Llama

导读

预训练(Pretraining)是 LLM 成本最高、最关键的阶段。本章解释:模型在预训练时到底在做什么数据流水线如何搭建Scaling Laws 怎么指导决策现代预训练 recipe 的关键演进

5.1 预训练任务:Next-Token Prediction

预训练任务极其简单——预测下一个 token

# 训练样本:(x_1, ..., x_L) -> 预测 x_2, ..., x_{L+1}
logits = model(input_ids[:, :-1])              # [B, L-1, V]
target = input_ids[:, 1:]                       # 错位一位
loss = cross_entropy(logits.view(-1, V), target.reshape(-1))

这个看似简单的任务之所以能产生"通用智能",是因为:

  1. 任务足够通用:所有文本都可用作训练数据,无需标注;
  2. 任务足够难:要预测下一 token,模型必须学语法、知识、推理、风格;
  3. 数据规模无上限:互联网提供 TB 级语料;
  4. Scaling 友好:越大越准,没有饱和迹象。

5.2 数据流水线

数据是预训练的第一性原理。Llama-3 用了 15T tokens,DeepSeek-V3 用了 14.8T tokens。数据流水线大致四步:

预训练数据流水线

1. 数据采集

来源 用途 备注
Common Crawl 网页主体 占比最大,质量参差
GitHub 代码 推理能力、结构化输出
ArXiv / PubMed 学术 数学、推理
Wikipedia / Books 高质量知识 占比小但价值高
数学题集(OpenMath、SigmaMath) 数学能力 关键
多语言语料 多语言能力 占比 5-10%

2. 数据清洗

  • 去重:MinHash / SimHash,去除重复网页(CC 重复率 30-50%);
  • 语言识别:fastText / cld3,过滤非目标语言;
  • 质量评分:用一个轻量 LM 给文本打 perplexity,过高/过低都剔除;
  • 安全 / PII 过滤:去电话、邮箱、身份证号;
  • 低质剔除:占位文本、广告、SEO 垃圾。

清洗后通常保留 10-30%,即 100T 原始 → 15T 高质。

3. 配比与采样

不同来源对模型能力影响巨大:

配比 影响
代码 15% 显著提升推理 / 结构化输出能力
数学 5-8% 数学能力主要来源
学术 10% 长文本推理
多语言 5-10% 多语言能力

Phi 系列(Microsoft)的实验显示:用教材级数据(小而精)训 1.4B 模型,性能可逼近 7B 通用模型——证明**数据质量 > 数据量**。

4. 打包与训练

  • 序列打包:把多文档拼到 max_len,避免 padding 浪费;
  • document mask:在 attention 中加 mask 隔离不同文档(避免 A 文档"看见" B 文档);
  • 动态 batch:WSD 或 cosine 学习率衰减;
  • 数据课程(curriculum):先训通用,后增加高质量数据比例。

5.3 Scaling Laws

Scaling Laws曲线

Kaplan 2020(OpenAI)首次系统化提出:Loss 与算力、参数、数据呈幂律关系:

\[L(N, D, C) = A + \left(\frac{N^*}{N}\right)^{0.34} + \left(\frac{D^*}{D}\right)^{0.28} + \left(\frac{C^*}{C}\right)^{0.05}\]

Hoffmann 2022(Chinchilla,DeepMind)修正:compute-optimal 边界上,数据应约为参数的 20 倍:

\[D_{\text{opt}} \approx 20 \times N\]
模型参数 Chinchilla 最优 tokens
1B 20B
7B 140B
70B 1.4T

实际情况:Llama-3 70B 训了 ~15T tokens(10 倍 Chinchilla),仍继续降 loss——说明**过训练(over-training)**对小模型仍然有效,模型质量不饱和。

5.4 训练超参 recipe

7B 典型 70B 典型
优化器 AdamW AdamW
lr 3e-4 2e-4
warmup 2000 steps 2000 steps
schedule cosine WSD
batch 4M tokens 8-16M tokens
seq_len 4096 → 8192 8192
weight_decay 0.1 0.1
β1, β2 0.9, 0.95 0.9, 0.95
grad_clip 1.0 1.0
精度 bf16 bf16

3D 并行(第 10 章详述):

  • 7B:DP=8 通常够;
  • 70B:DP × TP × PP(如 64 × 8 × 1);
  • 405B:DP × TP × PP(如 256 × 8 × 8)。

5.5 训练监控

预训练一次几十万 step,必须实时监控:

  • loss curve:应平滑下降;突然飙升 = 数据问题或数值不稳定;
  • grad_norm:稳定在 0.1-10;>100 = 爆炸;
  • tokens/s:集群吞吐量,与理论峰值对比找瓶颈;
  • MFU(Model FLOPs Utilization):实际算力 / 峰值算力,40-55% 算优秀;
  • loss spike:偶发,要能定位(数据 / 优化器 / 数值精度)。

5.6 Checkpoint 管理

预训练动辄上千 GPU·天,必须支持:

  • 周期性 checkpoint:每 1-2 小时存一次;
  • 分布式存储:checkpoint 大(70B fp32 = 280GB),需高吞吐存储;
  • 断点续训:故障率不可忽略,必须能从最近 ckpt 恢复;
  • 版本管理:每个 ckpt 评测、记录超参,便于回滚。

5.7 训练成本

模型 算力 H100·天(粗估)
1.4B (Phi-2) ~1e21 FLOPs ~250
7B (Llama-2) ~1.5e22 ~3000
70B (Llama-3) ~6e23 ~120000
405B (Llama-3) ~1.6e25 ~3.2M

按 H100 $3/小时 计:70B 约 $9M,405B 约 $230M——这就是为什么只有少数公司能预训练前沿模型。

5.8 现代预训练的演进

演进 之前 现代
数据 自然分布 课程式 + 高质合成
架构 MHA + LN GQA + RMSNorm + SwiGLU
长度 2K 8K-128K(RoPE 外推)
Tokenizer BPE 32K BBPE 128K+
优化 Adam AdamW + WSD + 长训
稀疏 MoE(Mixtral/DeepSeek)

MoE 路线:DeepSeek-V3 用 256 个 expert、激活 8 个,总参数 671B 但激活仅 37B——用相对小的算力达到 dense 大模型质量。

5.9 微调 vs 继续预训练 vs 从零训

选项 数据 算力 何时用
从零预训练 10T+ tokens 巨大 只有前沿 lab
继续预训练(CPT) 100B+ tokens 中等 领域适配(医疗/法律)
SFT 10K-1M 样本 极小 通用对齐(第 6 章)
LoRA / QLoRA 1K-100K 样本 几乎零 业务定制

90% 工程师场景应选 SFT 或 LoRA,不要从零训或继续预训练——投入产出比差。

工程实战要点

  • 数据 > 算力 > 模型:在数据上花的功夫回报最高;
  • 过训练仍有效:7B 训 5T 比 70B 训 1T 在同等算力下可能更强;
  • MoE 是性价比路线:但工程复杂度大幅上升;
  • 监控 loss spike:偶发不可怕,可怕的是定位不了;
  • checkpoint 是命根:分布式存储 + 定期校验;
  • 从零预训练只在前沿 lab:工程师业务场景应该走 SFT / RAG 路线。

小结

  • 预训练任务 = next-token prediction,简单但通用;
  • 数据流水线:采集 → 清洗(去重/质量)→ 配比 → 打包训练;
  • Chinchilla 定律:D ≈ 20 × N;现代过训练仍有效;
  • 现代 recipe:AdamW + cosine/WSD + bf16 + 3D 并行;
  • 训练成本:7B ~\(1M、70B ~\)10M、405B ~$200M;
  • MoE 是性价比路线,但工程复杂度上升;
  • 工程师场景应走 SFT/RAG 路线,不要从零训。

练习题

  1. 解释为什么"预测下一个 token"如此简单的任务能产生通用能力。
  2. Chinchilla 定律建议 70B 模型训多少 tokens?Llama-3 实际训了多少?
  3. 数据清洗的 4 个关键步骤是什么?分别解决什么问题?
  4. 估算训练 7B 模型 + 1T tokens 需要多少 H100·天。
  5. 解释 MoE 的"总参数大但激活参数小"特点。
  6. Phi-2 实验说明了什么关于数据 vs 规模的结论?
  7. 为什么"过训练"在 Llama-3 后变得流行?
  8. 工程师做业务定制应该选 CPT、SFT、LoRA 还是预训练?为什么?

下一章:第六章 后训练SFT/RLHF/DPO