32T Tokens — 预训练的活水
V4 如何扩展网页、多语言、数学、代码与长文档语料,为什么在 mid-training 加入 agentic data,sample-level attention mask 与 V3 有何不同,以及训练长度如何从 4K 逐步扩展到 1M。
32T Tokens = V4-Flash 32 万亿 / V4-Pro 33 万亿训练 token,长文档优先 + 采样级 mask + 阶梯式扩长上下文 + mid-training 注入 agentic 数据
一句话:把"先用 4K 短样本喂 dense 主干、再扩到 1M 让 sparse attention 接管"做成一条阶梯,每段长度都对应不同的数据混合 + 不同的 attention 模式。 数据构造包括过滤批量自动生成和模板化网页内容、扩大多语言语料、强调长文档,并在 mid-training 加入 agentic data。
- 32T Tokens(与 V3 的 14.8T 比)
- Flash 使用 32T tokens,Pro 使用 33T tokens,明显高于 V3 的 14.8T。报告说明数据扩展包括更严格的网页过滤、更大的多语言语料、数学与代码数据,以及长文档优先;没有披露合成或翻译 token 的占比,也不能仅凭 benchmark 提升证明“每 token 信息密度更高”。
- FIM(Fill-In-the-Middle,OpenAI 2022)
- 训练时把文本重排为 prefix / suffix / middle,让模型预测中间内容。V4 沿用 V3 的 FIM 策略;本报告没有披露约 10% 之类的采样比例。
- Packing(样本拼接)
- 训练时把多个短样本拼到同一个 sequence 长度(如 4K)填满 batch,避免 padding 浪费。问题:默认 attention 让样本 A 的 token 能看到样本 B 的 token,引入 cross-sample 关联噪声。这就是接下来 sample-level mask 要解决的事。
- Sample-level Attention Masking(采样级注意力屏蔽)
- V4 与 V3 的关键差异:packed sequence 内部,每个样本只能看自己内部的 token,跨样本一律 mask 掉。等价于"打包但语义独立"。在长文档加权的前提下尤其重要 —— 单个文档可能占满整个 4K,跨样本污染会让长上下文学习被短样本主导。
- Model Collapse(模型崩塌,Shumailov 2024)
- V4 对网页数据增加过滤规则,以移除批量自动生成和模板化内容,降低模型坍塌风险。报告没有说明所用检测器,也没有给出“压到 3% 以下”的比例。
- Long-Document Priority(长文档优先)
- 报告特别强调科学论文、技术报告等具有独特学术价值的长文档。它没有把这一选择与 FACTS、Simple-QA、Indexer 学习或 mHC 层间依赖逐项建立因果关系。
- Mid-Training(中段训练)
- 报告称在 mid-training 阶段加入 agentic data,以增强编码能力;没有进一步披露数据是否由工具调用或 code-agent trajectories 构成,也没有给出该阶段的 token 数。
- 序列长度阶梯:4K → 16K → 64K → 1M
- 训练长度依次扩展为 4K → 16K → 64K → 1M。Flash 前 1T tokens 使用 dense attention,并在 64K 阶段先 warm up Lightning Indexer、再启用 sparse attention;Pro 的 dense 阶段更长。报告没有给出各长度阶段占总 token 的百分比。
- Tokenizer(沿用 V3 + 几个特殊 token)
- V4 基于 V3 tokenizer 增加少量用于 context construction 的特殊 token,词表仍为 128K。报告没有将它们列为
<|tool_call|>或<|tool_result|>,也没有声称这样可以直接复用 V3 的 KV cache。
1. 为什么 V3 的数据策略需要重做
V3 时代的数据 pipeline 已经很成熟:14.8T tokens、CommonCrawl + GitHub + 学术 + 中文 + 多语言混合,含 FIM、tokenizer 128K BBPE。V4 要把百万 token 上下文做成默认,原 pipeline 有三个不再适配的地方:
- 长上下文训练需要长样本:报告强调长文档策展,但没有披露 V3 样本平均约 600 token 的数字。
- 模板化数据混入:网页中的批量自动生成与模板化内容会提高 model-collapse 风险,因此 V4 增加了相应过滤策略;报告没有估计其在互联网中的占比。
- 样本边界:把不同来源文档打包进同一训练序列可减少截断,但若只使用普通 causal mask,后面的样本可以看到前面样本。V4 因而改用 sample-level attention mask;报告没有量化此前的噪声比例。
- 只有 causal mask:B 中的 token 可以看到 A,因为 A 位于序列中更早的位置;
- 叠加 sample-level mask:B 只能看到 B 内更早的 token,A 与 B 在语义上彼此隔离。
2. Sample-level Attention Masking
做法很简单:在 packed sequence 上额外维护一个 sample id 数组,attention mask 在因果 mask 之上再叠一层"$i$ 与 $j$ 同样本才可见"。
这条 mask 翻成大白话就是在标准因果 mask 上多加一条"同源"过滤:
- $j \le i$:标准因果约束 —— 当前 token 只能看历史 token,不能偷看未来;
- $\mathrm{sid}(i) = \mathrm{sid}(j)$:新增的同源约束 —— 即便 $j$ 在 $i$ 前面、且都在同一 packed window 里,只要它们属于不同样本就 mask 掉;
- $M_{ij} = -\infty$:把不可见位置的 attention logit 拍到负无穷,softmax 后权重为 0。
报告明确指出 V4 与 V3 的差异是采用 sample-level attention masking,但没有说明 V3 中该策略只是“可选项”,也没有给出跨样本污染的定量分析。直观上,这一 mask 让为了提高利用率而打包到同一序列的不同样本保持语义隔离。
读图法:方块 = (query, key) 对。绿格是同样本且 $j \le i$ 的合法 attention;黄格是 V3 默认看见、但 V4 sample-level mask 切断的 cross-sample 因果对;灰格是因果 mask 切掉的未来。
把样本数从 1 拉到 8 你会看到黄色块迅速增多(块状对角阵)。点切换按钮看 V4 把所有黄格变灰 —— 每个样本各自一块独立三角,互不可见。
右侧比例只是当前等长分块示意中被 sample-level mask 额外屏蔽的 pair 占比,不能等同于 V3 的训练“污染比例”或模型质量损失。
3. 4K → 16K → 64K → 1M 序列长度阶梯
训练序列长度不是从头到尾固定的。V4 走四段阶梯,每段对应不同 attention 模式:
| 段 | 序列长度 | token 占比 | 主要 attention 模式 | 主要任务 |
|---|---|---|---|---|
| ① 起始 | 4K | 未披露 | dense | Flash 的 dense warmup 从这里开始 |
| ② 扩长 | 16K | 未披露 | dense | 继续扩展上下文 |
| ③ 引入稀疏 | 64K | 未披露 | Indexer warmup → sparse | 两阶段启用 sparse attention |
| ④ 长上下文 | 1M | 未披露 | sparse | 百万 token 训练 |
有三个根本原因让"一开始就 1M"不可行:
- 计算与缓存:dense attention 的 score 数量随序列长度二次增长,1M 上下文代价很高;报告没有给出“单层 60MB / 全模型 3.6GB”的统一缓存数字。
- 稀疏 selection 需要 warmup:V4 先训练 dense 模型,再短暂 warm up Lightning Indexer,随后进行 sparse attention 训练。报告没有说未 warmup 一定发散,也没有给出前 60% token 的比例。
- 长样本稀缺:可用的 1M 长样本(书籍、超长仓库)token 数远少于短样本。把它放最后一段精修是 token 效率最优。
长序列训练会结合 Ch11 的 contextual parallelism。报告说明了 two-stage CP 如何处理压缩边界,但没有披露 4K/16K/64K/1M 分别对应的 CP 并行度。
4. Mid-Training:把 agentic 数据延后注入
V4 报告说明数学与编程语料仍是预训练核心,并在 mid-training 阶段加入 agentic data 以增强编码能力。它没有详细披露 V3 的混合方式,也没有列出 agentic data 的具体组成。
- 论文事实:agentic data 在 mid-training 阶段加入,用于进一步增强 coding capabilities。
- 合理解释:在主干能力形成后再加入结构化 agentic 数据,可能有利于控制数据配比和能力注入;这是本文解读,不是报告给出的因果实验。
- 报告没有披露这一阶段的 learning rate、token 数、工具 schema 或对 OPD 的消融影响。
因此,这一节只保留报告明确披露的训练位置与目标,不再推测其它公司的内部流程或宣称“首次”。
5. V4-Flash / V4-Pro 关键超参对比
| 项 | V4-Flash (284B / 13B 激活) | V4-Pro (1.6T / 49B 激活) |
|---|---|---|
| Transformer 层数 $L$ | 43 | 61 |
| hidden size $d$ | 4096 | 7168 |
| CSA 压缩率 $m$ / top-k | 4 / 512 | 4 / 1024 |
| HCA 压缩率 $m'$ | 128 | 128 |
| 核心 head 数 / dim $c$ | 64 / 512 | 128 / 512 |
| SWA window $n_{\text{win}}$ | 128 | 128 |
| routed experts (激活 $K$) | 256 (6) | 384 (6) |
| MoE 中间维 $d_{\text{ff}}$ | 2048 | 3072 |
| mHC 扩展因子 $n_{\text{hc}}$ | 4 | 4 |
| Sinkhorn 步数 | 20 | 20 |
| 训练 token | 32T | 33T |
| 峰值 LR | $2.7 \times 10^{-4}$ | $2.0 \times 10^{-4}$ |
| 序列长度调度 | 4K → 16K → 64K → 1M | 4K → 16K → 64K → 1M |
- 每 token 训练计算约 $6 \cdot 49\text{B} = 2.94 \times 10^{11}$ FLOPs;
- 33T tokens × $2.94 \times 10^{11}$ ≈ $9.7 \times 10^{24}$ FLOPs;
- 报告没有披露训练所用 GPU 数、MFU、总 H100-hours 或训练天数,因此不对 wall-time 作反推。
6. 一句话总结
Flash 与 Pro 分别训练 32T 和 33T tokens。数据侧扩大并清理网页、多语言、数学、代码与长文档语料,并在 mid-training 加入 agentic data;训练侧采用 sample-level attention mask,将序列长度从 4K 逐步扩展到 16K、64K 和 1M,并分阶段引入 sparse attention。