文章

LLM 预训练数据配比生产实战:用 Mixture Manifest、Token Budget 与 Domain Loss Feedback 控制能力偏置

系统讲解大模型预训练数据配比的工程化治理方法:以不可变 Mixture Manifest 固化域权重与语料版本,用 Token Budget 精确记账,结合代理模型搜索、域损失反馈、饥饿保护与回放门禁持续校准能力结构,让配比从概率参数升级为可审计可复现的训练契约。

背景:数据总量相同,能力结构可能完全不同

大模型预训练通常混合网页、代码、论文、书籍、百科、数学和多语言语料。工程上最容易被低估的变量不是”有没有这些数据”,而是每个域最终贡献了多少有效训练 Token

同样是一万亿 Token:代码比例从 5% 调整到 20%,模型的编程能力、自然语言流畅性和多语言表现都可能重新分配;在持续预训练中,如果专业域占比过高,还可能出现通用能力遗忘。

因此,数据配比不能只是启动参数中的一串权重。它应被治理成可审计、可复现、可灰度、可回滚的训练制品。

核心原则:把”配比”从概率参数升级为训练契约

1. 用不可变 Mixture Manifest 固化输入空间

一次训练必须绑定唯一的 Mixture Manifest。Manifest 至少应记录:

  • 域标识与语义定义;
  • 数据快照、过滤版本和 Tokenizer 版本;
  • 目标权重、最小权重和最大权重;
  • 计划 Token 数、允许重复轮次与耗尽策略;
  • 采样算法、随机种子和训练阶段;
  • 代理实验、审批记录及制品哈希。
mixture_id: pretrain-mix-2026-07-v3
total_token_budget: 1000000000000
sampler: weighted_token_sampler_v2
seed: 20260728
domains:
  - id: web_en
    snapshot: web-en-2026-06-clean-v4
    tokenizer: tokenizer-sha256-7a91
    target_weight: 0.42
    min_weight: 0.30
    max_weight: 0.50
  - id: code
    snapshot: code-2026-06-license-v2
    tokenizer: tokenizer-sha256-7a91
    target_weight: 0.18
    min_weight: 0.10
    max_weight: 0.25
  - id: math
    snapshot: math-2026-05-dedup-v3
    tokenizer: tokenizer-sha256-7a91
    target_weight: 0.10
    min_weight: 0.05
    max_weight: 0.16

Manifest 一旦发布不得原地修改。任何权重、快照或采样规则变化都应生成新版本。

2. 以有效 Token 而不是文档数记账

设总训练预算为 T,第 i 个域权重为 p_i,其计划预算为:

T_i = round(T × p_i)

实际系统还应记录:

指标含义
consumed_tokens_i已消费 Token 数
accepted_tokens_i有效通过过滤的 Token 数
repeated_tokens_i重复读取的 Token 数
remaining_unique_tokens_i剩余唯一 Token 数

文档数不适合作为主账本。不同域的平均长度、过滤比例、语言 Token 密度和 Sequence Packing 效率差异很大;按文档采样很容易导致实际 Token 比例偏离配置。

3. 区分静态配比与动态配比

静态配比在训练开始前确定全程权重,易复现、易审计,适合首次大规模训练。

动态配比按训练阶段调整权重,例如前期提高通用网页覆盖,中后期增加代码、数学或高质量长文本。它更灵活,但必须引入:

  • 阶段边界;
  • 权重变化速率限制;
  • 域权重上下限;
  • 固定回放集;
  • 通用能力遗忘门禁。

近期 RegMix-D 等工作开始利用代理训练完整 Loss 轨迹,而不是只看最终点,为不同训练阶段预测不同配比。该方向值得关注,但论文结果不能直接当作任意模型的默认生产配置。

如何选择配比:从经验权重走向代理模型搜索

DoReMi:关注各域的超额损失

DoReMi 使用参考模型与代理模型的域损失差异进行重加权。简化表示为:

excess_loss_i = loss_proxy_i - loss_reference_i

系统更关注仍未学好的域,而不是单纯提高高熵、噪声大的域。论文中,代理模型用于搜索权重,再把权重迁移到更大的目标模型。

生产落地时必须绑定:

  • Reference Model 指纹;
  • Proxy Model 配置;
  • 域验证集版本;
  • Loss 聚合方式;
  • 平滑窗口和权重裁剪规则。

缺少这些信息,只保存最终权重,无法解释下一次为什么得不到相同结果。

RegMix 与 Data Mixing Laws:用小规模实验预测大规模结果

RegMix 通过多组小模型和不同数据混合训练,拟合”配比到性能”的映射,再搜索候选比例。Data Mixing Laws 则研究配比、模型规模、训练步数与性能之间的可预测关系。

这类方法适合成本高昂的大模型预训练,但代理实验必须覆盖真实的不确定性:

  • 不同随机种子;
  • 不同 Token Horizon;
  • 不同模型宽度或深度;
  • 域之间的交互项;
  • 目标任务和通用任务的权衡。

代理模型给出的应是候选区域,而不是无需复核的单点答案。

工程落地:建立可重放的数据混合控制面

1. 域定义先于权重优化

数据域必须具有稳定语义。不要把域直接等同于文件目录或供应商名称。推荐同时保留:

维度示例
来源域网页、书籍、代码仓库、论文
能力域数学、代码、法律、多语言
质量层高、中、低置信度
合规层许可类型、地区限制、敏感等级

同一文档可携带多个标签,但用于采样的主域必须确定,否则权重统计会重复记账。

2. 采样器必须确定性可回放

给定 Manifest、数据快照、Seed、全局步数和数据并行规模,采样器应能生成一致的域选择和样本序列。

from dataclasses import dataclass
import random

@dataclass(frozen=True)
class Domain:
    name: str
    weight: float

def choose_domain(domains: list[Domain], seed: int, global_sample_id: int) -> str:
    rng = random.Random(f"{seed}:{global_sample_id}")
    names = [d.name for d in domains]
    weights = [d.weight for d in domains]
    return rng.choices(names, weights=weights, k=1)[0]

真实实现还需要处理多 Rank 切分、断点恢复和数据耗尽,但核心要求不变:样本选择不能依赖不可追踪的进程局部随机状态

3. 为每个域建立 Token Ledger

训练监控至少包括:

  • 计划权重与实际权重;
  • 每小时、每十亿 Token 的偏差;
  • 域数据耗尽率和重复率;
  • 域级训练 Loss 与固定验证 Loss;
  • 数据读取失败、过滤失败和解码失败率;
  • 每域有效 Token 成本。

权重正确不代表执行正确。某个域如果频繁读取失败,系统可能悄悄用其他域补位,最终训练比例已发生漂移。

4. 设置域饥饿与过采样保护

低权重域可能长时间没有进入 Batch,导致域级指标失去更新;小规模高权重域则可能快速重复多轮。

应设置以下保护机制:

参数作用
min_tokens_per_window时间窗口内最低 Token 供给
max_repeat_epochs最大重复轮次
max_weight_delta相邻阶段最大权重变化
staleness_limit域指标最长陈旧时间
fallback_policy域不可用时停止、降权或切换备用快照

不要默认”缺哪个域就按比例补到其他域”。这种补偿会破坏训练契约。

5. 动态调权必须走发布流程

动态数据调度不应由监控脚本直接修改训练参数。推荐流程:

域级信号采集 → 候选权重计算 → 上下限与变化率校验
→ 固定回放集模拟 → 生成新 Mixture Manifest → 审批
→ 在阶段边界切换 → 观察并可回滚

正在运行的训练 Job 只消费已发布 Manifest,不接受无版本的临时权重。

适用场景

这套治理特别适合:

  • 多域通用模型预训练;
  • 数学、代码、金融等专业域持续预训练;
  • 多语言模型的语言比例控制;
  • 数据持续新增、质量分层经常变化的训练平台;
  • 需要审计数据贡献和能力变化来源的企业模型工程。

小规模单域微调通常不需要复杂的动态混合系统,但仍建议使用 Manifest 固化数据快照和 Token 预算。

常见误区

误区一:高质量域越多越好

单域质量高不等于混合后整体最优。域之间存在互补、竞争和训练阶段差异,必须通过代理实验和多能力评测确认。

误区二:只看总体训练 Loss

总体 Loss 可能下降,而某个低权重域已经恶化。必须保留域级 Loss、固定验证集和能力分组指标。

误区三:按样本比例配置就是 Token 比例

长文、代码和不同语言的 Token 密度差异显著,必须以 Token Ledger 核对实际贡献。

误区四:代理模型最优权重可以无条件迁移

架构、规模、Token Horizon、Tokenizer 和优化器变化都可能改变最优区域。代理结果只能缩小搜索空间。

误区五:动态调权越频繁越智能

Loss 信号本身有噪声。过度频繁调整会让数据分布和优化过程同时非平稳,难以诊断和复现。

上线检查清单

  • 每个域具有稳定 ID、定义和负责人;
  • 数据快照、过滤器和 Tokenizer 均已固化哈希;
  • Mixture Manifest 不可变且可回滚;
  • 权重之和、上下限和阶段计划通过校验;
  • 计划 Token 与实际 Token 可逐域对账;
  • 采样器在多 Rank 和断点恢复后可重放;
  • 设置域饥饿、重复率和数据耗尽门禁;
  • 代理实验包含多 Seed 和多个 Token Horizon;
  • 通用、专业、多语言和安全能力分别回归;
  • 动态调权只能在明确阶段边界发布;
  • 训练异常时能还原当时生效的 Manifest;
  • 任何权重变化都有审批、理由和证据链接。

参考资料

  1. DoReMi: Optimizing Data Mixtures Speeds Up Language Model Pretraining
  2. Stanford CRFM: DoReMi
  3. RegMix: Data Mixture as Regression for Language Model Pre-training
  4. RegMix-D: Dynamic Data Mixing via Proxy Training Trajectories
  5. Data Mixing Laws: Optimizing Data Mixtures by Predicting Language Modeling Performance
  6. Megatron-LM Data Arguments and Blended Dataset Support
  7. DataComp-LM

常见问题

数据配比应该按文档数、样本数还是 Token 数计算?
生产环境应以有效训练 Token 为主账本。文档长度、过滤率和打包效率差异会让文档数或样本数严重偏离真实训练贡献。
数据域权重可以在训练过程中动态修改吗?
可以,但应通过版本化阶段计划、最小与最大权重、平滑变化和回放验证控制,不能直接依据单次 Loss 波动在线调权。
小模型上找到的最优配比能直接用于大模型吗?
只能作为候选。代理模型能显著降低搜索成本,但仍需在目标架构和目标 Token Horizon 上进行短跑验证与能力回归。
如何判断某个域被过采样?
同时观察实际 Token 占比、唯一 Token 覆盖率、重复轮次、近重复率和该域验证 Loss。只看权重配置无法发现小语料被循环消费的问题。