Files

Pretrain Dataset

本目录保存 laoyao 2B MoE 预训练数据的构建代码和元数据。数据集按 curriculum stage 分开维护,避免 Stage 1 的基础预训练配比和 Stage 2 的能力增强配比混用。

Stage 1: base pretraining

Stage 1 是已经用于当前 base model 训练的 200B 级别 rebalanced 预训练数据。

目标配比

类别 比例 主要来源
english_web 40% ModelScope Ultra-FineWeb/FineWeb 英文 shard
english_edu 20% FineWeb-Edu / Ultra-FineWeb 高质量教育文本
chinese_clean 10% Ultra-FineWeb zh,后续可接 CCI3-HQ/SkyPile
science 10% medmcqa、proofwriter、scienceqa、sciq、qasc、openbookqa;不足由 english_edu 补齐
logic 10% Jiayi scored education/text 数据中的逻辑类样本 + Proof-Pile-2/OpenWebMath/arXiv/AlgebraicStack 的高推理密度文本
math 5% Jiayi scored math/knowledge 数据
code 5% Jiayi cleaned multilingual code 数据

数据本体

真实数据实际保留在:

/mnt/beegfs/yi/laoyao_2b_moe_pretraining_dataset/train/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701

不要再把 405G 数据复制到 repo 内。BeegFS hardlink 不被允许,rsync 会造成空间翻倍并可能失败。训练脚本应直接读取该源目录。

Logic 补充源

wait_and_build_rebalanced_pretrain_200b.sh 默认将以下本地 Proof-Pile-2 子集作为显式 --logic-input

/mnt/beegfs/cjy/cjy-training/laoyao_model/data/raw/hf_datasets/EleutherAI__proof-pile-2/open-web-math/train/*.jsonl.zst
/mnt/beegfs/cjy/cjy-training/laoyao_model/data/raw/hf_datasets/EleutherAI__proof-pile-2/arxiv/train/*.jsonl.zst
/mnt/beegfs/cjy/cjy-training/laoyao_model/data/raw/hf_datasets/EleutherAI__proof-pile-2/algebraic-stack/train/*.jsonl.zst

这些 .jsonl.zst 文件由 build_rebalanced_pretrain_dataset.py 通过系统 zstd -dc 流式读取,不需要先解压到 BeegFS。后续如果下载了 StackExchange 或 PhilPapers,可用冒号分隔的 LOGIC_INPUT_EXTRA 追加:

LOGIC_INPUT_EXTRA='/path/to/stackexchange/**/*.jsonl.zst:/path/to/philpapers/**/*.jsonl.zst' \
bash dataset/pretrain/scripts/wait_and_build_rebalanced_pretrain_200b.sh

Stage 2: capability-focused continued pretraining

早期 general55/code15/math15/science15 配方和不含中文的 Stage 2-1/2-2 v1 配方只用于历史复现。2026-07-19 的 zh10 v3 用于保留历史实验;当前训练使用 2026-07-22 的 plain-QA CPT v4。v4 保留每阶段 10% 中文,同时去掉 QA 文本中的 GLM chat role/control token,使这一阶段保持纯 continuation pretraining 语义。

Stage 2 的目标是 100B tokens,面向继续预训练而不是 QA/SFT。该阶段不使用旧的 science QA 数据;Science 优先使用 Darwin-Science 这类连续科学文本、refined text 或 cognitive completion。

当前目标配比

阶段 General Code Science QA 中文 knowledge 中文 QA
Stage 2-1 10% 30% 30% 30% 5% 5%
Stage 2-2 18% 2% 10% 70% 5% 5%

中文 knowledge 使用 CCI3-HQ 和 SkyPile;中文 QA 使用 OpenBMB Ultra-FineWeb-L3 zh QA。每阶段中文 token 合计 10%。完整来源、重放策略和 GLM QA 格式见 docs/stage2_data_and_glm_qa_policy_20260717.md

Stage 2 数据源策略

  • General English 使用 DaVinci classified HQ 和 Nemotron Wiki Rewrite。
  • 中文 knowledge 使用 CCI3-HQ 与 SkyPile,两个来源各占每阶段 2.5%。
  • 中文 QA 使用 Ultra-FineWeb-L3 zh QA,占每阶段 5%;它是唯一允许的高质量语义重放例外。
  • Code、Science 和英文 QA 沿用 v1 下载池,但全部使用新 recipe 重新分区。
  • QA 使用 GLM role template 并计算 full-sequence causal LM loss;这不是 assistant-only SFT。

Stage 2 入口

下载、构建、审计并转换两个阶段:

HF_TOKEN=... MODELSCOPE_TOKEN=... \
bash scripts/rebuild_stage2_curriculum_plainqa_cpt.sh all

单独传入 12 只处理一个阶段。脚本会先运行 strict normalized audit,再做 Megatron 8192-token 转换;审计不通过时不会生成可训练入口。需要复现 zh10 v3 时使用 scripts/rebuild_stage2_curriculum_zh10.sh

Stage 2-1/2-2 文件级并行构建

build_stage2_curriculum_dataset.py 使用文件级多进程。推荐在 256 CPU 机器上配置为 32 个文件进程、每进程 8 个 tokenizer 线程:

python3 dataset/pretrain/scripts/build_stage2_curriculum_dataset.py \
  --recipe dataset/pretrain/configs/stage2_1_general10_zh10_code30_science30_qa30_50b_v3_20260719.json \
  --catalog dataset/pretrain/configs/stage2_source_catalog_20260717.json \
  --raw-root /data/yi/laoyao-2b-pretraining/raw/stage2_curriculum_v1 \
  --output-dir /data/yi/laoyao-2b-pretraining/normalized/stage2_1_zh10_50b_v3_20260719 \
  --tokenizer tokenizer/glm5.2 \
  --exclude-hash-db /data/yi/laoyao-2b-pretraining/no_replay/stage1_2_text_hashes.sqlite3 \
  --exclude-hash-mode memory \
  --parallel-files 32 \
  --tokenizer-threads-per-file 8 \
  --tokenizer-batch-size 1024 \
  --output-shard-rows 100000

这里的总 tokenizer 并行度是 32 x 8 = 256。不要把单个进程的 RAYON_NUM_THREADS 设为 224GLM tokenizer 实测会因线程调度和内存带宽 竞争而显著变慢。Stage 1 排除哈希在父进程中载入一次,并通过 Linux fork 只读共享给文件 worker,不会产生 32 份约 7 GiB 的哈希集合。

父进程按 source 文件顺序提交 worker 产物,并在 source quota 的最后一个 shard 上截断。build_state.json 在每个已提交文件后更新,因此同一命令可 直接断点续跑;只有退出时正在处理、尚未提交的一批文件会重算。