预训练原理与工程实践
预训练(Pre-training)是大模型能力的根基。通过在海量无标注文本上进行自监督学习,模型习得了语言的语法、语义、逻辑推理和世界知识。本章深入剖析预训练的目标函数、数据工程、训练策略和分布式训练技术。
预训练(Pre-training)是大模型能力的根基。通过在海量无标注文本上进行自监督学习,模型习得了语言的语法、语义、逻辑推理和世界知识。本章深入剖析预训练的目标函数、数据工程、训练策略和分布式训练技术。
建议先阅读第 01 章
预训练目标、训练数据、训练策略
技术地基 · 大模型核心原理
文章导航
- 引言
- 1. 预训练目标
- 1.1 自监督学习的核心思想
- 1.2 因果语言建模(Causal Language Modeling, CLM)
- 1.3 掩码语言建模(Masked Language Modeling, MLM)
- 1.4 CLM vs MLM 对比
- 2. 训练数据
- 2.1 数据来源
- 2.2 数据清洗流程
- 2.3 数据规模对比
- 2.4 数据质量 vs 数据数量
- 3. 训练策略
- 3.1 学习率调度
- 3.2 混合精度训练
- 3.3 Batch Size 与梯度累积
- 3.4 优化器
- 4. 分布式训练
- 4.1 四种并行策略
- 4.2 3D 并行
- 4.3 训练基础设施
- 4.4 训练稳定性
- 5. 训练完成后的模型状态
- 6. 本章小结
- 相关章节
- 延伸阅读
点击图中节点可定位到对应正文。
引言
预训练(Pre-training)是大模型能力的根基。通过在海量无标注文本上进行自监督学习,模型习得了语言的语法、语义、逻辑推理和世界知识。本章深入剖析预训练的目标函数、数据工程、训练策略和分布式训练技术。
1. 预训练目标
1.1 自监督学习的核心思想
预训练的精妙之处在于——不需要人工标注的数据。模型利用文本本身的结构作为监督信号:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
有监督学习:输入 → 模型 → 预测 → 与人工标注的标签比较 → 更新权重
自监督学习:输入 → 模型 → 预测 → 与文本自身的后续内容比较 → 更新权重1.2 因果语言建模(Causal Language Modeling, CLM)
纯解码器 Transformer(GPT 类)的训练目标:
给定前面的 token 序列,预测下一个 token
输入: "The cat sat on the"
目标: 预测下一个 token 是 "mat"(概率分布中 "mat" 的概率应尽可能高)
损失函数:交叉熵损失
Loss = -Σ log P(正确token | 上下文)
在实际训练中,对序列中的每个位置同时计算损失:
输入: [The, cat, sat, on, the, mat]
目标: [cat, sat, on, the, mat, <eos>]
每个位置都用前面所有的 token 来预测下一个
(通过因果掩码确保只能看到前面的 token)1.3 掩码语言建模(Masked Language Modeling, MLM)
编码器 Transformer(BERT 类)的训练目标:
随机遮盖输入中的某些 token,让模型预测被遮盖的 token
输入: "The [MASK] sat on the mat"
目标: 预测 [MASK] 是 "cat"
遮盖策略(BERT 原始方案):
- 15% 的 token 被选中遮盖
- 其中 80% 替换为 [MASK]
- 10% 替换为随机 token
- 10% 保持不变1.4 CLM vs MLM 对比
| 维度 | CLM(GPT 类) | MLM(BERT 类) |
|---|---|---|
| 注意力方向 | 单向(只能看前面) | 双向(可以看前后) |
| 训练效率 | 每个 token 产生一次损失 | 只有 15% 的 token 产生损失 |
| 生成能力 | 天然支持自回归生成 | 不直接支持生成 |
| 理解能力 | 受限于单向上下文 | 双向上下文,理解更强 |
| 扩展性 | Scaling Laws 验证充分 | 大规模效果不如 CLM |
| 当前地位 | LLM 主流 | 仅用于编码器模型 |
2. 训练数据
2.1 数据来源
| 数据源 | 说明 | 占比(典型) |
|---|---|---|
| Common Crawl | 互联网网页爬取,最大的数据源 | 60-70% |
| Wikipedia | 高质量百科知识 | 5-10% |
| Books | 长文本、文学作品 | 5-10% |
| 代码仓库 | GitHub 等开源代码 | 5-10% |
| 学术论文 | arXiv、Semantic Scholar | 2-5% |
| 社交媒体 | Reddit、论坛等 | 2-5% |
| 专业数据 | 法律、医学、金融等 | 按需 |
2.2 数据清洗流程
原始网页数据包含大量噪声,需要严格的清洗流程:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
原始网页 → HTML 解析 → 去除广告/导航 → 语言检测 → 去重 → 质量过滤 → 敏感内容过滤 → 清洗后文本2.3 数据规模对比
| 模型 | 训练数据量 | 说明 |
|---|---|---|
| GPT-3 (175B) | 300B tokens | Common Crawl + Wikipedia + Books |
| Chinchilla (70B) | 1.4T tokens | Chinchilla 最优数据量 |
| LLaMA 2 (70B) | 2T tokens | 增加 40% 数据 |
| LLaMA 3 (405B) | 15T+ tokens | 7x 于 LLaMA 2 |
| GPT-4 | 未公开 | 估计 > 10T tokens |
2.4 数据质量 vs 数据数量
Phi 系列的启示(Microsoft, 2023):
- Phi-1.5(1.3B 参数)仅用 20B tokens 训练
- 但数据全部是"教科书质量"的合成数据
- 在数学和推理任务上超过了用 10x 数据训练的更大模型
- 结论:数据质量可以部分弥补模型规模的不足
**LLaMA 3 的策略:**
- 15T tokens 的训练数据
- 大量使用数据分类器过滤低质量内容
- 合成数据(Synthetic Data)作为补充
3. 训练策略
3.1 学习率调度
大模型训练通常使用带预热的余弦退火学习率:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
学习率
↑
│ ╱╲
│ ╱ ╲────────────────╲
│ ╱ warmup ╲ cosine decay
│ ╱ ╲
│ ╱ ╲_____
└──────────────────────────────── 训练步数3.2 混合精度训练
使用 BF16(BFloat16)进行训练:
| 精度 | 位宽 | 指数位 | 尾数位 | 数值范围 | 精度 |
|---|---|---|---|---|---|
| FP32 | 32 | 8 | 23 | ±3.4×10^38 | 高 |
| FP16 | 16 | 5 | 10 | ±65504 | 中 |
| BF16 | 16 | 8 | 7 | ±3.4×10^38 | 低 |
- BF16 的数值范围与 FP32 相同,不容易溢出
- 但精度低于 FP16,需要更多训练步数来弥补
- 是当前大模型训练的标准精度
3.3 Batch Size 与梯度累积
有效 Batch Size = 每 GPU 的 batch_size × GPU 数量 × 梯度累积步数
以 LLaMA 3 405B 为例:
每 GPU batch_size = 2
GPU 数量 = 16,384
梯度累积步数 = 1
有效 Batch Size = 32,768(约 64M tokens per step)3.4 优化器
AdamW 是大模型训练的标准优化器:
把公式、变量和含义拆开呈现,便于对照阅读。
AdamW = Adam + 权重衰减(Weight Decay)m_t = β₁m_{t-1} + (1-β₁)g_t一阶动量v_t = β₂v_{t-1} + (1-β₂)g_t²二阶动量θ_t = θ_{t-1} - η(m_t/√v_t + λθ_{t-1})参数更新 + 权重衰减典型超参数:β₁ = 0.9, β₂ = 0.95, λ = 0.1学习率 η: 根据模型规模调整(通常 1e-4 到 3e-4)4. 分布式训练
大模型训练需要数千甚至数万张 GPU,分布式训练是核心工程挑战。
4.1 四种并行策略
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
数据并行(Data Parallelism, DP):
每个 GPU 持有完整模型副本
不同的 GPU 处理不同的数据
梯度在所有 GPU 间同步
→ 适合模型能放进单 GPU 显存的情况根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
模型并行 / 张量并行(Tensor Parallelism, TP):
将模型的每一层拆分到多个 GPU
例如:注意力头的不同头在不同 GPU 上计算
→ 适合单层太大无法放进单 GPU 的情况根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
流水线并行(Pipeline Parallelism, PP):
将模型的不同层分配到不同 GPU
GPU 1: 层 1-20
GPU 2: 层 21-40
GPU 3: 层 41-60
→ 通过微批次(micro-batch)减少流水线气泡根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
零冗余优化器(ZeRO):
将优化器状态、梯度、参数分布到多个 GPU
ZeRO-1: 分布优化器状态
ZeRO-2: 分布优化器状态 + 梯度
ZeRO-3: 分布优化器状态 + 梯度 + 参数
→ DeepSpeed 的核心技术4.2 3D 并行
实际的大模型训练通常同时使用多种并行策略:
3D 并行 = 数据并行 × 张量并行 × 流水线并行
以 LLaMA 3 405B 训练为例(16,384 张 H100 GPU):
张量并行:8-way(一个 8-GPU 节点内的张量并行)
流水线并行:4-way(4 个节点间的流水线)
数据并行:512-way(512 组之间的数据并行)
总 GPU = 8 × 4 × 512 = 16,3844.3 训练基础设施
| 模型 | GPU 数量 | GPU 类型 | 训练时间 | 估计成本 |
|---|---|---|---|---|
| GPT-3 (175B) | ~1,000 | V100 | ~1 个月 | $500 万 |
| LLaMA 2 (70B) | ~2,000 | A100 | ~6 个月 | $2,600 万 |
| LLaMA 3 (405B) | ~16,000 | H100 | ~3 个月 | $1 亿+ |
| GPT-4 | 未公开 | 未公开 | 未公开 | $1 亿+ |
4.4 训练稳定性
大规模训练中的常见故障:
- GPU 故障:万卡集群中 GPU 故障是常态(每天约 1-2 次)
- 梯度爆炸/消失:通过梯度裁剪(gradient clipping)和 RMSNorm 缓解
- Loss Spike:损失突然飙升,通常通过降低学习率或跳过该批次恢复
- Checkpoint 策略:定期保存模型状态,故障时从最近的 checkpoint 恢复
5. 训练完成后的模型状态
预训练完成后,模型具备的能力:
根据原图的箭头、并列、分层与循环关系选择对应图形;可展开核对原文结构。
查看原文结构
→ 这就是为什么需要对齐(Alignment)
→ 详见下一章:对齐技术6. 本章小结
| 环节 | 关键要点 |
|---|---|
| 训练目标 | CLM(预测下一个 token)是主流 |
| 数据 | 互联网规模文本,清洗是关键挑战 |
| 数据规模 | 从 300B tokens (GPT-3) 到 15T+ (LLaMA 3) |
| 训练策略 | 混合精度 BF16 + AdamW + 余弦学习率 |
| 分布式训练 | 3D 并行(数据 + 张量 + 流水线) |
| 训练成本 | 从数百万到数亿美元 |
相关章节
- 什么是大语言模型 — 从整体理解预训练在 LLM 中的位置
- 对齐技术(SFT / RLHF / DPO) — 预训练之后的关键步骤
- 开源模型(LLaMA-Mistral-Qwen-DeepSeek) — 预训练技术孕育的开源成果
延伸阅读
- Radford, A. et al. (2019). "Language Models are Unsupervised Multitask Learners". OpenAI
- Touvron, H. et al. (2023). "LLaMA 2: Open Foundation and Fine-Tuned Chat Models". arXiv:2307.09288
- Gunasekar, S. et al. (2023). "Textbooks Are All You Need". arXiv:2306.11644
- Rajbhandari, S. et al. (2020). "ZeRO: Memory Optimizations Toward Training Trillion Parameter Models". SC