从 Bit 到 AGI第七章:训练(Training)

数据配比

从 Bit 到 AGI · 第七章:训练 · 预训练与 SFT 语料混合比例如何影响能力

作者 David更新于 第 106 篇(共 186 篇)

数据配比(Data Mixing)决定模型擅长什么、弱什么:代码太多可能损文学性,中文太少则中文差,低质网页太多则胡言乱语。预训练阶段要在 数 T token 上定比例;SFT 阶段要在 指令、对话、安全拒答 之间平衡。没有银弹,只有可量化的 trade-off。

直觉:每日食谱的营养比例

只吃蛋白粉练肌肉,缺维生素;只吃沙拉缺能量。LLM 的「营养」= 各域 token 比例。Llama 3 技术报告公开了大致 mix;多数闭源模型 mix 是核心机密。

定义

预训练 mix 通常表示为各域 token 占比,且 ∑iwi=1\sum_i w_i = 1:

L=∑iwi⋅LDi\mathcal{L} = \sum_i w_i \cdot \mathcal{L}_{\mathcal{D}_i}

实现上:每个 batch 按权重采样来源(web / code / math / multilingual),而非先拼一个大 shuffle 文件。

域典型权重(7B 开源参考)作用
通用网页50–70%广度、事实
代码5–20%编程、逻辑
数学/STEM2–10%推理
书籍/高质量文本2–10%语法、长文
多语言5–30%依目标市场

例子 1:1T token 预训练 mix

目标:中英双语 7B,总 1.2T token。

域比例token 数约合纯文本
英文网页(过滤后)45%540B~1.1 TB
中文网页20%240B~400 GB(汉字更省 token)
代码15%180B~350 GB
英文书籍/论文10%120B~250 GB
数学/Wiki5%60B~120 GB
合成/对话 seed5%60B—

GPU·小时与总 token 线性相关(见 预训练):1.2T × 7B ≈ 35k GPU·小时(512 卡 ~3 天量级,含 overhead 更久)。

调整 code 15%→25%:HumanEval 可能 +5–10 pt,MMLU 人文可能 -1–2 pt——需在 eval 矩阵上测,不能凭直觉。

例子 2:SFT 三源混合

100 万条 SFT,总 800M token,三源:

来源条数占比token
通用指令(Alpaca 类)520k52%416M
多轮对话300k30%240M
安全拒答 / 红队180k18%144M

安全占比 低于 10% 时 jailbreak 易升;>30% 时过度拒答(「无法回答如何煮鸡蛋」)。开源经验:15–25% 安全 + 高质量通用。

SFT 800M token,7B LoRA:~80–120 GPU·小时(8×A100)。

量化:质量过滤对有效 token 的影响

原始 Common Crawl ~100T+ token;可用经 dedup + 质量分类后 ~5–10%:

阶段输入 token输出 token算力浪费
无过滤10T 扫一遍300B 高质量等价97% 算在垃圾上
FineWeb / DCLM 管线10T1.5T 进训练15% 利用率

数据工程与 mix 设计同等重要:1T 高质量 > 3T 未洗。

深入:课程学习与 SFT 安全配比

课程学习(Curriculum) 在预训练中越来越常见:前 30% token 以 web 为主 学语言广度,后 70% 逐步提高 code/math/books 比例,使 loss 曲线更稳。 abrupt 把 code 从 5% 拉到 30% 可能导致 100B token 的 loss spike,浪费 ~2,900 GPU·小时(7B×1T 比例的 1/10)。WSD 调度(见 学习率)常与 curriculum 联用:stable 阶段固定 mix,anneal 阶段加高质量子集。

SFT 安全样本(拒答、 red team)占比是产品敏感旋钮:15% 通常平衡 jailbreak 与过度拒答;金融/医疗合规场景可拉到 25%,但需配 正例(如何合法回答)否则模型「万事皆拒」。20M token 安全 SFT 在 7B LoRA 上 ~5 GPU·小时——便宜,却决定上线风险;值得单独 A/B 评估指标 里的 HarmBench。

多语言 mix 的中文站(daiw.net 读者常见需求):纯中文预训练 弱 code 与英文 STEM;推荐 中文 20–30% + 英文/code 70–80%,SFT 阶段再加重中文指令。C-Eval 与 CMMLU 会随中文占比升,但 HumanEval 可能 -5 pt 若 code 低于 10%——用表格同时盯 三条 benchmark,别单看中文榜。

动手试一试:加权采样

import random

domains = ["web", "code", "math", "zh"]
weights = [0.50, 0.15, 0.10, 0.25]

def sample_domain(n=100_000):
    counts = {d: 0 for d in domains}
    for _ in range(n):
        d = random.choices(domains, weights=weights, k=1)[0]
        counts[d] += 1
    return {d: c / n for d, c in counts.items()}

print(sample_domain())  # 接近 weights
# 训练框架:WebDataset / Megatron blendable dataset

常见误区

  1. 「中文模型 = 100% 中文语料」 — 代码、数学英文占比高;纯中文弱推理与 coding。
  2. 「SFT mix 与预训练无关」 — 预训练缺 code,SFT 难补编程;能力天花板在预训练。
  3. 「比例固定全程不变」 — 课程学习(course curriculum):前期 web,后期加 math/code,更稳。

小结

数据配比用 权重 × token 预算 分配能力;1.2T 预训练需先定 mix 再算 ~35k GPU·小时;SFT 800M token 注意 15–25% 安全样本。改 mix 后必须用 评估指标 验证。

下一篇:学习率调度——warmup 与 cosine 衰减。

延伸:The Pile、FineWeb 与合规

历史语料 The Pile(825 GB)推动了 GPT-Neo 时代;2024+ 主流转向 FineWeb、DCLM 等重洗 Common Crawl 版本,有效 token 密度更高。Mix 设计还涉及 合规:书籍/论文子集需 license;代码用 GitHub 许可过滤(MIT/Apache vs GPL);多语言站注意 PII 去标识。违规语料可导致 模型发布撤回——数据 bill 不仅是存储 TB 级,还有法务 review。中文站 ICP 备案(daiw.net)若用用户数据微调,需隐私政策与 opt-out;这与 mix 比例无关,却是训练数据 来源合法性 的一部分。

本页目录