目录
  1. 1. 目录
  2. 2. 一、预训练的本质:在文本海洋中学习世界模型
  3. 3. 二、训练数据:规模、质量与配比
    1. 3.1. 2.1 数据来源
    2. 3.2. 2.2 数据配比(Data Mixture)
    3. 3.3. 2.3 分词:BPE 的完整流程
  4. 4. 三、Scaling Laws:规模法则是 LLM 时代的基石
    1. 4.1. 3.1 Kaplan et al. 2020 的 Scaling Laws
    2. 4.2. 3.2 Chinchilla 的修正
  5. 5. 四、优化器与训练动力学
    1. 5.1. 4.1 AdamW 优化器
    2. 5.2. 4.2 学习率调度
    3. 5.3. 4.3 梯度裁剪(Gradient Clipping)
    4. 5.4. 4.4 批次大小(Batch Size)与线性缩放法则
  6. 6. 五、分布式训练:如何在数千张 GPU 上训练 LLM
    1. 6.1. 5.1 数据并行(Data Parallelism)
    2. 6.2. 5.2 ZeRO:Zero Redundancy Optimizer
    3. 6.3. 5.3 张量并行(Tensor Parallelism)
    4. 6.4. 5.4 流水线并行(Pipeline Parallelism)
    5. 6.5. 5.5 3D 并行
    6. 6.6. 5.6 FP8 混合精度训练(DeepSeek-V3 的创新)
  7. 7. 六、训练稳定性:Loss Spike 与恢复策略
  8. 8. 七、训练数据的多轮过滤与合成数据
    1. 8.1. 7.1 数据质量过滤的多层次设计
    2. 8.2. 7.2 合成数据(Synthetic Data)
  9. 9. 八、预训练结果评估:困惑度与 Benchmark
    1. 9.1. 8.1 困惑度(Perplexity)
    2. 9.2. 8.2 主要评测 Benchmark
  10. 10. 九、LLaMA 3 预训练:最完整的公开案例
  11. 11. 十、预训练的本质局限与后训练的必要性
  12. 12. 十一、混合精度训练与数据质量保证
    1. 12.1. BF16/FP16 混合精度训练
    2. 12.2. 数据去污(Decontamination)
    3. 12.3. Tokenizer 训练
大模型预训练技术全景

核心论文:

  • Scaling Laws for Neural Language Models(Kaplan et al., 2020)arXiv:2001.08361
  • Training Compute-Optimal Large Language Models / Chinchilla(Hoffmann et al., 2022)arXiv:2203.15556
  • LLaMA: Open and Efficient Foundation Language Models(Touvron et al., 2023)arXiv:2302.13971
  • The Llama 3 Herd of Models(Grattafiori et al., 2024)arXiv:2407.21783
  • DeepSeek-V3 Technical Report(DeepSeek-AI, 2024)arXiv:2412.19437
  • Language Models are Few-Shot Learners / GPT-3(Brown et al., 2020)arXiv:2005.14165

目录

  1. 一、预训练的本质:在文本海洋中学习世界模型
  2. 二、训练数据:规模、质量与配比
  3. 三、Scaling Laws:规模法则是 LLM 时代的基石
  4. 四、优化器与训练动力学
  5. 五、分布式训练:如何在数千张 GPU 上训练 LLM
  6. 六、训练稳定性:Loss Spike 与恢复策略
  7. 七、训练数据的多轮过滤与合成数据
  8. 八、预训练结果评估:困惑度与 Benchmark
  9. 九、LLaMA 3 预训练:最完整的公开案例
  10. 十、预训练的本质局限与后训练的必要性

一、预训练的本质:在文本海洋中学习世界模型

预训练(Pre-training)是 LLM 能力的根基。直觉上,这个过程是让模型在互联网规模的文本上,通过预测每个 token 来”压缩”人类的知识和语言规律。

从信息论的角度看,一个完美的语言模型等价于一个完美的世界模型:要准确预测”爱因斯坦在哪个大学工作”这句话的下一个词,模型必须储存关于爱因斯坦的历史知识;要预测一段 Python 代码的下一行,模型必须理解 Python 语法和编程逻辑。

这就是为什么预训练后的模型(基础模型)具有如此广泛的能力——并非因为特别设计,而是因为准确预测自然语言在数学上等价于理解语言背后的世界

预训练任务的形式化表达:

$$\mathcal{L}_{\text{pretrain}} = -\sum_{i=1}^{T} \log P_\theta(x_i | x_1, x_2, \ldots, x_{i-1})$$

模型参数 $\theta$ 通过最小化这个损失(最大化训练语料的对数似然)来更新。

二、训练数据:规模、质量与配比

2.1 数据来源

现代 LLM 的训练数据通常来自以下几类来源,按规模从大到小:

网页文本(主体,60-80%)

Common Crawl 是最大的公开网页爬取数据集,包含了对整个互联网的历史抓取,数据量达 PB 级别。但原始爬取数据质量极低(包含大量垃圾内容、重复内容、低质量页面),必须经过严格过滤。

主要过滤步骤(以 LLaMA 3 技术报告披露为参考):

  • 语言过滤:使用 fastText 等语言识别器,保留高置信度的目标语言
  • 质量过滤:训练一个分类器区分高质量(类似 Wikipedia)和低质量内容,过滤低分样本
  • 安全过滤:过滤包含个人身份信息(PII)、有害内容的页面
  • 去重:在文档级别和段落级别做哈希去重,避免记忆特定文本

经过过滤后,Common Crawl 的数据量通常缩减 70-90%,但质量大幅提升。

代码(5-20%)

代码对 LLM 的推理能力贡献极大,这一发现来自 Codex 论文(Chen et al., 2021)和后续大量实验。代码的结构化特性(函数、类、注释、变量命名)帮助模型学习逻辑推理。

来源包括 GitHub 公开代码库(各种编程语言)。DeepSeek-V3 技术报告特别提到,他们在训练数据中加入了大量高质量代码,并发现这显著提升了数学推理能力。

书籍(5-10%)

书籍提供了长篇、结构化、高质量的文本。Books3(Pile 数据集的一部分)和 Project Gutenberg 是常用来源。书籍的平均文本质量高于网页,有助于模型学习长程连贯性。

学术论文(1-5%)

arXiv、PubMed 等学术数据库提供的科学论文,对提升科学推理能力有重要作用。

Wikipedia 和百科全书类(2-5%)

Wikipedia 是高质量、结构化事实知识的重要来源,通常在训练中被过采样(给予比其实际比例更高的权重)。

多语言数据

现代 LLM 普遍在多语言数据上训练,英语通常占 60-75%,中文、德语、法语、西班牙语等其他语言占剩余部分。LLaMA 3 特别提到他们增加了超过 100 种语言的数据。

2.2 数据配比(Data Mixture)

不同类型数据按比例混合。LLaMA 3 技术报告是目前公开细节最详细的,披露了其 15T token 数据集的大致配比:

数据类型 占比
通用英语网页 ~50%
多语言数据 ~5%
代码 ~17%
高质量数据(书籍/Wiki/论文) ~28%

关键实践:高质量数据通常被过采样。例如,Wikipedia 在互联网数据中的实际比例可能不足 1%,但在训练中可能给予 2-5% 的权重(即训练时多次”复习”这些数据)。

但过采样有风险:如果一个数据集被过多地重复(通常超过 4 轮),模型会开始”记忆”这些文本而不是学习泛化规律,表现在测试集上的 perplexity 反而上升。

DeepSeek-V3 的一个重要贡献是使用了数学推理过滤器:通过一个专门训练的分类器,识别并保留训练数据中具有推理价值的片段,有针对性地提升模型的数学能力。

2.3 分词:BPE 的完整流程

Byte Pair Encoding(BPE) 是最广泛使用的分词算法,由 Sennrich et al.(2016)引入 NLP 领域(原始算法来自数据压缩领域)。

训练阶段:

  1. 初始化词汇表为所有字节(256 个,或所有 Unicode 字符)
  2. 统计所有相邻字节对的出现频率
  3. 将频率最高的字节对合并为一个新 token,加入词汇表
  4. 重复步骤 2-3,直到词汇表大小达到预设值

例如,如果”e”和”r”频繁相邻出现,则合并为”er”;如果”er”和”s”频繁相邻,则合并为”ers”。

推理阶段:使用贪心算法将文本分割为已知 token 的组合,最长匹配优先。

GPT-4 使用的 cl100k_base tokenizer 包含约 100K token;LLaMA 3 扩展到 128K token,主要是增加了更多的多语言 token 和代码相关 token,这使得相同文本所需的 token 数量减少,提高了处理效率。

三、Scaling Laws:规模法则是 LLM 时代的基石

3.1 Kaplan et al. 2020 的 Scaling Laws

论文: Scaling Laws for Neural Language Models(Kaplan et al., OpenAI, 2020)arXiv:2001.08361

这篇论文首次系统地研究了 LLM 的性能如何随以下三个因素扩展:

  • $N$:模型参数量
  • $D$:训练数据量(tokens)
  • $C$:计算量(FLOPs)

核心发现(幂律关系):

$$L(N) \approx \left(\frac{N_c}{N}\right)^{\alpha_N}, \quad \alpha_N \approx 0.076$$

$$L(D) \approx \left(\frac{D_c}{D}\right)^{\alpha_D}, \quad \alpha_D \approx 0.095$$

$$L(C) \approx \left(\frac{C_c}{C}\right)^{\alpha_C}, \quad \alpha_C \approx 0.050$$

其中 $L$ 是验证集上的交叉熵损失,$N_c$、$D_c$、$C_c$ 是拟合的常数。

这意味着什么: 每增加 10 倍的参数量,损失降低 $10^{0.076} \approx 1.19$ 倍;每增加 10 倍的数据量,损失降低 $10^{0.095} \approx 1.24$ 倍。

错误的结论(被 Chinchilla 推翻): Kaplan 等人基于上述规律得出结论:在固定计算预算下,应优先扩大模型参数量,数据可以相对较少(即大模型用较少 tokens 训练)。这导致了 GPT-3(175B 参数,300B tokens)等”训练不足的大模型”。

3.2 Chinchilla 的修正

论文: Training Compute-Optimal Large Language Models(Hoffmann et al., DeepMind, 2022)arXiv:2203.15556

Chinchilla 论文发现,Kaplan 的实验存在方法论问题:他们在比较不同规模模型时,没有统一训练到最优。通过更严格的实验设计,Chinchilla 得出了完全不同的结论:

Chinchilla Scaling Laws 的核心方程:

对于给定的计算预算 $C = 6ND$(假设每个 token 每个参数约 6 次 FLOPs),最优模型参数量 $N_{opt}$ 和训练数据量 $D_{opt}$ 满足:

$$N_{opt} \propto C^{0.5}, \quad D_{opt} \propto C^{0.5}$$

核心结论: 最优的参数量和 token 数量比例约为 1:20,即每个参数应该见到约 20 个训练 tokens。

验证: 在同等计算预算下,训练了参数量是 Gopher(280B)四分之一但 tokens 数量四倍多的 Chinchilla 模型(70B 参数,1.4T tokens),结果 Chinchilla 在几乎所有 benchmark 上超越了 Gopher。

对后续模型的影响:

  • LLaMA 1(2023):7B 参数模型训练了 1T tokens(比 Chinchilla 最优的 140B tokens 多得多),证明了”超出最优比例继续训练对推理效率有利”——推理时参数量决定成本,而不是训练时的 tokens 量
  • LLaMA 3(2024):更极端地用 15T tokens 训练了各尺寸模型,明显”过训练”(相对 Chinchilla 最优比例),但推理效率更高
  • DeepSeek-V3(2024):用 14.8T tokens 训练

深层含义: Chinchilla 定律适合”训练一次、推理多次”的场景。如果你的目标是得到一个最终模型用于大规模推理,应该训练一个比 Chinchilla 最优更小的模型但用更多 tokens。这样推理成本更低,而性能几乎不受影响。

四、优化器与训练动力学

4.1 AdamW 优化器

现代 LLM 训练普遍使用 AdamW(Loshchilov & Hutter, 2017)。

Adam 更新规则:

$$m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t \quad \text{(一阶矩,梯度的指数移动平均)}$$
$$v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 \quad \text{(二阶矩,梯度平方的指数移动平均)}$$
$$\hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 - \beta_2^t} \quad \text{(偏差修正)}$$
$$\theta_t = \theta_{t-1} - \frac{\alpha \hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon}$$

Adam 的直觉: 使用梯度的历史信息来自适应地调整每个参数的学习率。梯度持续指向同一方向的参数会被更大幅度更新(累积动量),而梯度噪声大(方向多变)的参数更新幅度会被抑制。

AdamW 的修正: 原始 Adam 将权重衰减(weight decay)纳入梯度更新,但这与 Adam 的自适应学习率机制相互干扰。AdamW 将权重衰减独立出来:

$$\theta_t = \theta_{t-1} - \alpha \left(\frac{\hat{m}_t}{\sqrt{\hat{v}_t} + \epsilon} + \lambda \theta_{t-1}\right)$$

这样权重衰减不受自适应学习率的影响,相当于纯粹的 L2 正则化。

典型超参数(以 LLaMA 3 为参考):

  • $\beta_1 = 0.9$(一阶矩衰减系数)
  • $\beta_2 = 0.95$(二阶矩衰减系数,比常用的 0.999 更小,因为 LLM 训练梯度噪声更大)
  • $\epsilon = 10^{-8}$(数值稳定性项)
  • $\lambda = 0.1$(权重衰减系数)
  • 梯度裁剪(gradient clipping):最大范数 1.0

4.2 学习率调度

Warmup + Cosine Decay 是标准配置。

Warmup 阶段: 训练初期,学习率从极小值线性增加到峰值学习率。这是因为初始参数是随机的,梯度噪声很大,如果一开始就用大学习率,容易让训练发散。

$$\text{lr}(t) = \text{lr}_{max} \cdot \frac{t}{T_{warmup}} \quad \text{for } t \leq T_{warmup}$$

Cosine Decay 阶段: Warmup 之后,学习率按余弦曲线从峰值降到最小值:

$$\text{lr}(t) = \text{lr}_{min} + \frac{1}{2}(\text{lr}_{max} - \text{lr}_{min})\left(1 + \cos\frac{\pi (t - T_{warmup})}{T_{total} - T_{warmup}}\right)$$

典型峰值学习率:

  • 较小模型(7B):$3 \times 10^{-4}$
  • 较大模型(70B):$1 \times 10^{-4}$(通常更大模型用更小学习率)
  • LLaMA 3 405B:$8 \times 10^{-5}$

学习率的选择经验法则:模型越大,峰值学习率越小;Warmup 步数通常是总步数的 1-3%。

4.3 梯度裁剪(Gradient Clipping)

在训练过程中,某些时刻梯度可能突然变得非常大(梯度爆炸),导致参数更新过大,破坏训练稳定性。梯度裁剪将梯度的全局范数限制在阈值内:

$$g_{clipped} = g \cdot \frac{\min(\text{max\_norm}, \|g\|)}{\|g\|}$$

LLM 训练中通常使用 max_norm = 1.0。

4.4 批次大小(Batch Size)与线性缩放法则

批次大小(tokens per step)是重要的训练超参数。批次越大:

  • 梯度估计的方差越小(信噪比越高)
  • 每步更新更稳定
  • GPU 利用率更高

但批次过大会导致泛化性下降(有研究表明超过某个”临界批次大小”后,额外增大批次对最终性能没有帮助)。

线性缩放法则(Linear Scaling Rule):当批次大小增大 $k$ 倍时,学习率也应增大 $k$ 倍(或等效地,训练步数减少 $k$ 倍)。这在小批次时通常成立,在极大批次时可能需要调整。

LLaMA 3 405B 的训练批次大小为 16M tokens per step(16,384 sequences × 8,192 tokens per sequence)。

五、分布式训练:如何在数千张 GPU 上训练 LLM

训练一个 405B 参数的模型需要数千张 A100/H100 GPU,单张 GPU 远不够放置模型参数,更别提梯度和优化器状态。分布式训练解决了这个问题。

5.1 数据并行(Data Parallelism)

最简单的并行策略:每个 GPU 有完整的模型副本,处理不同的数据批次,然后对梯度求平均。

每个 GPU 需要存储:

  • 模型参数(fp16):$2N$ bytes
  • 梯度(fp16):$2N$ bytes
  • 优化器状态(fp32,包括参数副本 + Adam 的一阶矩 + 二阶矩):$12N$ bytes

总计约 $16N$ bytes。对于 70B 参数模型:$16 \times 70 \times 10^9 = 1120$ GB,远超单张 GPU 的 80GB 显存。

5.2 ZeRO:Zero Redundancy Optimizer

论文: ZeRO: Memory Optimizations Toward Training Trillion Parameter Models(Rajbhandari et al., 微软, 2020)arXiv:1910.02054

ZeRO 将数据并行中的冗余存储分片化:

ZeRO Stage 1: 分片优化器状态($12N$ bytes 分给 $K$ 个 GPU,每个 GPU 存储 $3N/K$ 的优化器状态)
ZeRO Stage 2: 分片梯度(额外减少 $2N/K$ 每 GPU 内存)
ZeRO Stage 3: 分片模型参数(每个 GPU 只存储 $2N/K$ 的参数)

ZeRO Stage 3 时,每个 GPU 只需要 $16N/K$ bytes($K$ 是 GPU 数量),理论上可以无限扩展。代价是需要额外的 GPU 间通信来收集完整的参数用于前向/反向传播。

PyTorch FSDP(Fully Sharded Data Parallel) 是 Meta 对 ZeRO 的开源实现,用于训练 LLaMA 系列模型。

5.3 张量并行(Tensor Parallelism)

论文: Megatron-LM(Shoeybi et al., NVIDIA, 2019)arXiv:1909.08053

将单个矩阵运算(如 $Q = XW^Q$)分割到多个 GPU 上并行执行。

对于注意力层,将 $h$ 个头分给 $K$ 个 GPU,每个 GPU 处理 $h/K$ 个头。对于 FFN 层,将内层维度 $d_{ff}$ 按列/行切分。

张量并行需要频繁的 GPU 间 all-reduce 通信(每层都需要),因此通常只在同一台机器的 GPU 之间(NVLink 速度快)使用,而不跨机器。

5.4 流水线并行(Pipeline Parallelism)

将模型的不同层分配到不同 GPU。GPU 0 处理第 1-20 层,GPU 1 处理第 21-40 层,以此类推。

问题: 朴素流水线并行中,每个 GPU 必须等待前一个 GPU 完成才能开始计算,导致大量”气泡”(bubble,GPU 空闲时间)。

GPipe / PipeDream 通过微批次(micro-batch)流水线调度来减少气泡:将一个大批次分成若干微批次,GPU 1 处理微批次 1 时,GPU 2 已经开始处理微批次 2 的前向传播。

5.5 3D 并行

在大规模训练中,通常同时使用数据并行 + 张量并行 + 流水线并行(Megatron-LM v3 论文,Narayanan et al., 2021)。

以 LLaMA 3 405B 训练为例(16K H100 GPU):

  • 张量并行:8(同一节点内 8 张 GPU)
  • 流水线并行:16(跨节点)
  • 数据并行:16K / (8 × 16) = 128

5.6 FP8 混合精度训练(DeepSeek-V3 的创新)

传统做法: 前向和反向传播用 BF16 或 FP16,优化器状态用 FP32(”混合精度”,Mixed Precision Training,Micikevicius et al., 2018)。

DeepSeek-V3 的创新: 首次在顶级模型训练中大规模应用 FP8(8位浮点数)精度,将主要的矩阵乘法(GEMM)降低到 FP8,而保持累加(accumulation)为 FP32,实现了几乎无损的精度同时将计算量减半。

FP8 有两种格式:

  • E4M3(1 位符号,4 位指数,3 位尾数):范围较小但精度较高,用于前向传播的激活值
  • E5M2(1 位符号,5 位指数,2 位尾数):范围更大但精度较低,用于梯度

DeepSeek-V3 技术报告详细描述了他们如何解决 FP8 训练中的数值稳定性问题(主要通过细粒度量化和高精度累加)。这使得他们的训练成本只有约 550 万美元(2.788M H800 GPU 小时),远低于同类模型的估计训练成本。

六、训练稳定性:Loss Spike 与恢复策略

大规模训练中,训练损失偶尔会突然上升(Loss Spike),这是一个已知的工程挑战。

Loss Spike 的表现: 训练损失在某个时刻突然跳升,然后逐渐恢复。如果不处理,可能导致训练发散。

可能的原因:

  1. 特定批次包含异常数据(极长序列、特殊 token 分布)
  2. 学习率过大导致某次更新过于激进
  3. 梯度估计不准确(批次太小时随机性大)

工程应对策略(来自各技术报告的实践):

  1. 梯度裁剪(最常见):防止单次更新过大
  2. 从检查点恢复(Checkpoint Recovery):如果 Loss Spike 严重,从上一个正常检查点重新开始,跳过导致问题的数据
  3. 数据过滤后处理:识别并从数据集中删除导致 Loss Spike 的数据批次

Meta 在 LLaMA 3 报告中提到,他们在 405B 模型训练期间遇到了若干 Loss Spike,通过跳过训练步骤(skip problematic training batches)和从检查点恢复来解决。

DeepSeek-V3 的工程进步: 整个训练过程只需要从检查点恢复不超过 3 次(相比之前模型训练经历更多次)。

七、训练数据的多轮过滤与合成数据

7.1 数据质量过滤的多层次设计

单次过滤不够,现代 LLM 训练通常采用多轮数据过滤:

第一轮(规则过滤):

  • 去除长度异常的文档(过短或过长)
  • 去除包含超过阈值的特殊字符比例的文档
  • 去除重复 n-gram 比例过高的文档(文档内部重复)

第二轮(模型过滤):

  • 用一个已训练的小型 LLM 给每个文档打分(困惑度)
  • 困惑度过高的文档可能是乱码或非自然语言,过滤掉
  • 困惑度过低可能是高度重复的模板文本,也过滤

第三轮(去重):

  • MinHash LSH(局部敏感哈希)用于文档级别模糊去重
  • 精确哈希用于段落/句子级别精确去重

LLaMA 3 技术报告披露,他们通过三轮过滤将原始的 Common Crawl 数据从约 100T tokens 压缩到约 10T tokens(丢弃了 90%),最终使用其中的 15T tokens(包含部分高质量数据的重复)。

7.2 合成数据(Synthetic Data)

合成数据的动机: 高质量的人工标注数据获取成本极高,且有天花板。用已有的 LLM 生成高质量训练数据(用大模型生成数据训练小模型,或自迭代)已成为主流做法。

在预训练中的应用(较新):

DeepSeek 技术报告和 LLaMA 3 技术报告都提到,在预训练数据中加入了一定比例的合成数学推理数据和代码数据。

具体做法(以代码为例):

  1. 用一个已有的代码模型(如 DeepSeek-Coder)生成大量代码样本
  2. 用静态分析器或运行测试来验证代码的正确性
  3. 将通过验证的代码加入预训练数据集

这类”可验证正确性”的合成数据质量较高,对提升模型的代码和数学能力有显著效果。

Self-Instruct 和 Constitutional AI 中的合成数据(用于后训练,详见第 03、04 篇)

八、预训练结果评估:困惑度与 Benchmark

8.1 困惑度(Perplexity)

困惑度是评估语言模型质量最基本的指标,定义为测试集上的指数化平均交叉熵损失:

$$\text{PPL}(X) = \exp\left(-\frac{1}{T} \sum_{t=1}^T \log P_\theta(x_t | x_{

直觉上,PPL 可以理解为模型在预测每个 token 时平均有多少个等可能的选项。PPL=1 表示模型完美预测,PPL=10 表示平均有 10 个等概率候选。

对于英语文本,现代大型 LLM 的 PPL(在 WikiText-2 等标准测试集上)通常在 3-6 之间。

重要注意: 困惑度是模型无关的,不同分词方式的困惑度无法直接比较(字符级 vs 词级 vs BPE)。在比较模型时,必须使用相同的分词器。

8.2 主要评测 Benchmark

评测集 能力 说明
MMLU 世界知识+推理 57 个学科的选择题,涵盖数学/科学/人文等
HellaSwag 常识推理 选择正确的句子延续
HumanEval 代码生成 164 个 Python 编程问题
MATH 数学推理 AMC/AIME 级别数学题,需要多步推理
GSM8K 小学数学 8500 道小学数学应用题
ARC-Challenge 科学推理 小学/中学难度科学问题
TruthfulQA 真实性 测试模型是否输出虚假信息
BBH (BIG-Bench Hard) 复杂推理 23 个需要多步推理的任务子集

重要说明: 随着越来越多的基准被用于评测,研究者发现模型可能在这些评测集上过拟合(benchmark contamination,基准污染)——如果训练数据包含了评测集的数据,评测结果就失去参考价值。

这是目前评测 LLM 能力的一个重要挑战。解决方案包括:使用新题目(如 GPQA Diamond),或采用人类评估(如 Chatbot Arena 的 ELO 评分)。

九、LLaMA 3 预训练:最完整的公开案例

LLaMA 3 技术报告是目前公开披露预训练细节最完整的文档,以下是关键数据点(来源:arXiv:2407.21783):

训练数据:

  • 总量:15.6T tokens
  • 高质量过滤比例:从 Common Crawl 原始数据的约 10% 留存
  • 代码数据:约 17%,通过专门的代码质量过滤器处理
  • 多语言数据:超过 5%,覆盖 100+ 种语言

405B 模型超参数:

  • 架构:Decoder-only Transformer,126 层,$d_{model} = 16384$,$h_Q = 128$,$h_{KV} = 8$(GQA)
  • 上下文长度:首先在 8K context 训练,后期通过连续预训练扩展到 128K
  • 峰值学习率:$8 \times 10^{-5}$
  • 批次大小:16M tokens/step
  • 总训练步数:约 9.4M steps

训练基础设施:

  • GPU:16K H100(80GB SBM)
  • 并行策略:张量并行 8 × 流水线并行 16 × 上下文并行 8 × 数据并行 16
  • 通信:单节点内 NVLink,跨节点 RoCE(400Gb/s)

训练稳定性:

  • 全程遇到若干 Loss Spike,均通过检查点恢复处理
  • 关键工程:自动检测异常训练步骤并跳过

十、预训练的本质局限与后训练的必要性

预训练完成后,模型具备了丰富的语言知识和理解能力,但它仍然只是一个”下一个 token 预测器”——它会照着训练数据的分布生成内容,这意味着:

  1. 不会遵循指令:如果让它”翻译这段文字”,它可能继续生成更多类似的翻译请求,而不是真正翻译
  2. 会输出有害内容:训练数据包含互联网上的全部内容,其中包括有害、虚假、偏见内容
  3. 不会对话:没有”用户-助手”的对话格式意识

这就是后训练(Post-training)的必要性,包括指令微调(SFT)和强化学习对齐(RLHF/DPO/Constitutional AI),这是第 03 篇和第 04 篇的主题。

预训练提供了能力(capability),后训练决定了行为(behavior)。两者同等重要,缺一不可。

十一、混合精度训练与数据质量保证

BF16/FP16 混合精度训练

现代 LLM 预训练普遍使用混合精度。数值格式对比:

格式 总位数 指数位 尾数位 动态范围
FP32 32 8 23 $\sim 10^{38}$
FP16 16 5 10 $\sim 65504$
BF16 16 8 7 $\sim 10^{38}$

BF16(Brain Float 16,Google 为 TPU 设计)与 FP32 共享相同的指数位宽(8 位),动态范围一致,无需 loss scaling 即可直接训练。LLaMA 3、DeepSeek-V3 全部使用 BF16。

混合精度流程: 前向传播用 BF16 矩阵乘法(速度快、显存减半);权重主副本保持 FP32 精度;反向传播用 BF16 计算梯度,FP32 更新权重。FP16(非 BF16)额外需要 loss scaling——将梯度放大后缩小,防止小梯度在 FP16 中下溢为 0。

数据去污(Decontamination)

预训练数据与评测基准的重叠(contamination)是 LLM 评估的核心挑战——模型可能在”考试”前已见过”题目”。

检测方法: N-gram 重叠检测(提取 8-gram 或 13-gram,检测精确匹配)、语义嵌入去重(sentence embedding 检测语义高度相似的段落)、最长公共子串(LCS)匹配。

LLaMA 3 技术报告披露:对训练数据与所有已知评测基准(MMLU、HellaSwag、ARC 等)进行了严格的 n-gram 去污,删除任何显著重叠的文档。DeepSeek-V3 也执行了类似去污流程。

Tokenizer 训练

BPE Tokenizer 本身需要在预训练之前训练。训练过程(以 LLaMA 3 128K 词汇表为例):

  1. 从训练语料采样数亿条文本
  2. 设定目标词汇量(LLaMA 3:128K,DeepSeek-V3:102.4K)
  3. BPE 迭代合并:统计所有相邻 token 对频率 → 合并最高频对 → 重复直到达到目标词汇量

词汇表大小的权衡: 大词汇表(128K)每个 token 含更多信息 → 推理更快,但嵌入矩阵 $|V| \times d_{model}$ 更大。小词汇表(32K)嵌入矩阵小,但序列更长 → 注意力 $O(n^2)$ 成本更高。LLaMA 3 从 32K 扩到 128K,将多语言文本的 token 数量减少了约 30%。

文章作者: Leo·Cheung
文章链接: http://tufusi.com/2025/03/01/%E5%A4%A7%E6%A8%A1%E5%9E%8B%E9%A2%84%E8%AE%AD%E7%BB%83%E6%8A%80%E6%9C%AF%E5%85%A8%E6%99%AF/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ONE·PIECE
打赏
  • 微信
  • 支付宝

评论