arganzheng · 2026-04-13
预训练的每个决定都能算账,算不出来的部分靠小模型消融外推。
| 决定 | 换的是什么 | 篇 |
|---|---|---|
| 词表多大 | 每 token 的成本 ↔ 每段文字的 token 数 | 02 |
| 参数 vs 数据 | 训练算力 ↔ 推理算力 | 03 |
| 过滤多严 | token 量 ↔ 质量;配比 = epoch 数 | 04 |
| 学习率与 batch | 收敛速度 ↔ 稳定性 | 05 |
同一套方法:推导 → 代入 Llama 3 与 DeepSeek-V3 → 解释数字;第一篇先把整条流水线实跑一遍。
%%{init: {"flowchart": {"wrappingWidth": 150}}}%%
flowchart TB
subgraph D["数据侧:决定模型学什么"]
direction LR
D1["① 原料<br/>网页"] --> D2["② 过滤<br/>四道筛子"] --> D3["③ 去重<br/>精确 + MinHash"] --> D4["④ tokenizer<br/>训 BPE"]
end
subgraph T["模型侧:决定学得多好"]
direction LR
T1["⑤ 打包<br/>定长序列"] --> T2["⑥ 选尺寸<br/>迷你 iso-FLOP"] --> T3["⑦ 训练<br/>七条曲线"] --> T4["⑧ 评<br/>bits/byte"]
end
D --> T
T --> M["一个会续写英文、但不是助手的模型 → 交给后训练"]
四道过滤只剩 16%——Llama 3 的 240T → 15T
词表 32K→128K:每字符便宜 15%、KV 少 20%
| 位置 | 公式 | Llama-3-8B |
|---|---|---|
| 参数 | 2Vd(tied 为 Vd) | 1.05B,13.1%;训练状态 16.8 GB |
lm_head FLOPs |
每 token (2Vd) | 7.0%;Qwen2.5-0.5B 占 28% |
| decode 字节 | 每步读一遍 lm_head |
1 GB / 步 |
| 训练显存 | logits = tokens × V × 4 B | 8K 序列 3.9 GiB,softmax 前后两份 |
Chinchilla 只算训练算力——算上推理,最优点移向小模型多数据

| 固定 C,把 N 缩小 k = 10 倍 | |
|---|---|
| 训练 loss | 只 +0.053 nats(\(\Delta L \propto (\ln k)^2\)) |
| 推理成本 | 1/10 |
| 服务 100T token 的最优点 | 81B / 1.5T → 24B / 13.8T |
| 2024 年后的 D/N | 200–2000(「过训练」) |
240T → 15T → 1.3–5.4T;重复是控制分布不是消灭

| 筛子 | 规则 | 被删的样子 |
|---|---|---|
| 语言 | 英文功能词(the / of / and …)≥ 12%;生产上用 fastText | 非英文页(英文只占 46%) |
| Gopher 文档级 | 词数 50–100K、平均词长 3–10、含字母的词 ≥ 80%、≥ 2 个停用词 | 博客侧边栏(一半是日期和符号)、22 个词的 Redirecting 页 |
| C4 行级 | 只留以句末标点结尾、≥ 3 词、不含 { / javascript 的行 |
导航、按钮、页脚、版权行——删掉一半字符 |
| Gopher 重复度 | 重复行 ≤ 30%、高频 n-gram 占比上限 | 关键词堆砌、模板文字 |
峰值 lr 随宽度降:7B 3e-4 → 405B 8e-5
| 第一篇(MacBook,12 分钟) | Llama 3 405B(16K 张 H100,54 天) | DeepSeek-V3 | |
|---|---|---|---|
| 模型 · 数据 | 4 层 × 192,2.61M;10.9M × 3 epoch | 126 层 × 16384,405B;15.6T × 1 | 37B 激活;14.8T |
| 峰值 lr | 1.15e-3 | 8e-5 | 2.2e-4 |
| batch(token) | 16K | 4M → 8M → 16M ramp | 12.6M → 63M ramp |
| warmup | 59 步(3%) | 8,000 步(约 1%) | 2,000 步 |
| 调度 | cosine → 10% | cosine → 10% | 常数 10T → cosine → 两段常数 |
| AdamW | β = (0.9, 0.95)、wd 0.1、clip 1.0 | 同 | 同 |
| 精度 | FP32 | BF16 + FP32 主权重 | FP8 分块 + FP32 累加 |
| 机制 | 监控曲线 | 开关 |
|---|---|---|
| attention logit 增长 | attention logit 最大值 | QK-norm:12,592 → 22 |
| 输出 logit 漂移 | \(\lvert\log Z\rvert\) | z-loss 1e-4 |
| 单步过大 | 梯度范数 | 裁剪 1.0、warmup、β₂ = 0.95 |
| 线 | 落点 |
|---|---|
| 按字符算账 | 每个「token 数」背后隐含一个词表;15T token 在 Llama 3 里多读 24% 字符;跨 tokenizer 比 bits/byte |
| 算力怎么分 | 6ND 的三个变量分别被三篇约束:N 里有 2Vd,D 的上限是漏斗,定下后算步数与 checkpoint;推理 \(2ND_{inf}\) 把最优点推向小模型 |
| 重复、epoch 与有效数据 | 同一个 D′ 公式:总量不够(4 epoch 值 93%)与某一类不够(25% ≈ 7.5 epoch);去重要控制分布不是消灭 |
| 消融外推 | 词表、常数、阈值、配比、超参——公式推不出的都靠小模型:03 给方法、04 给价格(2700 H100 小时)、05 给 μP 迁移 |
| 篇 | 一个数 / 一个公式 |
|---|---|
| 01 | 68,834 网页 → 16% → 38 MB;bits/byte 1.88 vs GPT-2 的 1.06 |
| 02 | \(\text{FLOPs/字符} = \text{FLOPs/token} \div \text{字符/token}\);128K 词表每字符 −15% |
| 03 | \(L = E + A/N^\alpha + B/D^\beta\)、(C=6ND);k = 10 时 +0.053 nats、推理 1/10 |
| 04 | 240T → 15T → 1.3–5.4T;LSH 14 × 8 阈值 0.72;25% ≈ 7.5 epoch |
| 05 | lr ∝ (1/d);\(\tau = 1/(\eta\lambda)\);QK-norm 12,592 → 22;\(T_{opt} = \sqrt{2\delta\cdot\text{MTBF}}\) |
/pretraining-from-tokenizer-to-training-recipe.html;通关自测 22 题在系列总结;代码在 labs transformer-and-llm/pretrain_e2e/