laoyao_2b_moe
这个 repo 用来把 Jiayi/Laoyao 的 2B MoE 小模型实验重构成更可复现的预训练项目:数据配比更合理,模型定义迁移到 NeMo/Megatron 风格配置,训练入口从手写 PyTorch 逻辑迁移到 Megatron/Nemo 体系。
当前目标不是继续沿用旧的手写 trainer,而是把数据、模型、训练、评测和导出几个边界拆开,形成一个可以反复运行和审计的 ML project。
Repo 结构
| 路径 | 功能 |
|---|---|
dataset/pretrain/ |
200B 级预训练数据的下载、清洗、配比、manifest 和 parquet -> Megatron indexed dataset 转换。 |
dataset/val/ |
heldout 2.8k 验证集源数据和 Megatron validation 数据说明。 |
model/ |
2B MoE 架构定义和 Megatron/NeMo 配置说明。 |
training/ |
Megatron-Bridge 训练 recipe、模型构建参数、数据 blend、validation、并行和优化配置。 |
docker/ |
NeMo/Megatron 训练镜像,当前使用 flash-attn4 修复后的镜像。 |
scripts/ |
数据下载、tokenization、镜像构建、训练启动/恢复、Megatron inference server、查询 smoke。 |
tools/ |
checkpoint 探测、DCP 元数据检查、Megatron -> HF 导出、HF custom model 生成和 heldout eval。 |
docs/ |
训练、推理、导出过程中遇到的问题和修复记录。 |
runs/ |
checkpoint、TensorBoard、HF export、eval 输出等运行产物;默认不进 git。 |
给 agent 的更详细操作手册见根目录 AGENTS.md。
当前数据计划
预训练目标规模为 200B tokens,随机种子固定为 42。核心配比:
| 类别 | 目标比例 | 说明 |
|---|---|---|
| English Web | 40% | Ultra-FineWeb/FineWeb 类英文网页文本 |
| English Edu | 20% | FineWeb-Edu/高质量教育文本;science 不足时也从这里补齐 |
| Chinese Clean | 10% | Ultra-FineWeb zh / CCI3-HQ / SkyPile 类中文干净文本 |
| Science | 10% | medmcqa、proofwriter、scienceqa、sciq、qasc、openbookqa;不足则 edu 补齐 |
| Logic | 10% | 从高质量 scored/education 数据中抽取逻辑类文本 |
| Math | 5% | 使用 Jiayi 已清洗/评分的数学来源 |
| Code | 5% | 使用 Jiayi 已去重的多语言代码数据 |
验证集为 2,800 条,七个能力维度各 400 条:science_reasoning、logic、code、chinese_exam、math、chinese_dialogue、english_dialogue。它会用于预训练过程中的 accuracy、perplexity 和 nll 评估。
当前主训练配置
g0050 上当前主训练入口:
cd /ssd/workspace/yi/laoyao_2b_moe
bash scripts/resume_pretrain_8192_8gpu_mbs14.sh
核心配置:
- Megatron-Bridge / Megatron-Core backend。
- Docker image:
laoyao/nemo-megatron:26.06-flashattn4。 seq_length=8192。micro_batch_size=14。global_batch_size=112。DP=8, TP=1, PP=1, EP=1, CP=1。- distributed optimizer 开启。
- grad reduce / param gather overlap 开启。
- full activation recompute:
uniform,recompute_num_layers=1。 - 每
2500iter 保存 checkpoint,保留最近10个。 - 每
15000iter 做 heldout validation,eval_iters=10。
当前 run 名称:
pretrain_8192_8gpu_dp8_mbs14_full_recompute_weighted_heldoutval_resume10000
Tokenizer 设计
为了兼容 GLM-5.2 生态,本模型的 tokenizer/vocab 直接采用 GLM-5.2 同款词表,而不是旧 Laoyao 65K BPE。当前 g0033 上的引用路径是:
/mnt/beegfs/yi/laoyao_2b_moe/tokenizer/glm5.2/tokenizer.json
该 tokenizer 从 ModelScope zai-org/GLM-5.2 下载,当前训练配置使用的 vocab size 为 154,856,tokenizer.json sha256 为 19e773648cb4e65de8660ea6365e10acca112d42a854923df93db4a6f333a82d。后续训练数据应按这个 tokenizer 重新统计/切分 token budget。
g0050 训练状态入口
g0050 上的实际训练 repo 路径:
/ssd/workspace/yi/laoyao_2b_moe
当前主训练入口为:
bash scripts/resume_pretrain_8192_8gpu_mbs14.sh
该入口默认从 runs/pretrain_8192_8gpu_dp8_mbs14_full_recompute_weighted_heldoutval_resume10000/checkpoints 恢复,使用:
seq_length=8192micro_batch_size=14global_batch_size=112tensor/pipeline/expert/context parallel = 1/1/1/1distributed optimizer + overlap grad reduce + overlap param gatherfull recompute, uniform, recompute_num_layers=1save_interval=2500eval_interval=15000- heldout validation prefix:
dataset/val/megatron_8192_glm52/heldout_2p8k_text_document
Megatron indexed validation 数据是本地派生产物,被 .gitignore 忽略;需要在目标机器上从 dataset/val/data/heldout_2p8k_packed_text.jsonl 重新生成或从训练机器同步。
g0033 路径约定
repo 路径:
/mnt/beegfs/yi/laoyao_2b_moe
预训练数据实际读取路径:
/mnt/beegfs/yi/laoyao_2b_moe_pretraining_dataset/train/pretrain_rebalanced_web40_edu20_chinese10_science10_logic10_math5_code5_200b_v1_20260701
数据不再复制到 repo 内;训练直接读取上面的源输出目录。dataset/pretrain/data/ 仍被 .gitignore 忽略,仅用于小规模临时样本。
模型导出与 heldout 评测
Megatron DCP checkpoint 可导出为 HuggingFace custom model:
python3 tools/hf_laoyao_moe/convert_laoyao_dcp_to_hf.py \
--checkpoint-dir runs/pretrain_8192_8gpu_dp8_mbs14_full_recompute_weighted_heldoutval_resume10000/checkpoints/iter_0107500 \
--tokenizer-dir tokenizer/glm5.2 \
--output-dir runs/hf_exports/iter_0107500
HF custom model 当前没有实现 KV cache,因此生成和评测脚本均显式 use_cache=False。
heldout 2.8k HF 评测入口:
python3 tools/hf_laoyao_moe/eval_heldout_2p8k.py \
--model-dir runs/hf_exports/iter_0107500 \
--data dataset/val/data/heldout_2p8k_sft_prompt_completion.jsonl \
--out-dir runs/hf_eval/heldout_2p8k/iter_0107500 \
--device cuda \
--max-length 2048
评测逻辑沿用 tokenizer-swap 实验的口径:
- 所有样本计算 prompt-conditioned completion NLL/PPL、NLL/token、bits/byte。
- 对能解析出候选项的 MCQ 样本,按每个候选 continuation 的 logprob 打分。
- 主 accuracy 是平均 token logprob 归一化后的
mcq_acc_avg_norm。 mcq_acc_sum作为辅助指标,因为它更容易偏向短选项。