开发者仅用865亿预训练 tokens 从零训练出MoE大模型Apex-2
首先,感谢您的阅读。
我完全从零开始训练了一个小型MoE模型(无外部基础权重),并希望分享结果及几条经验。
Apex-2
- 架构:仅解码器MoE,每一层都是MoE(无稠密层)
- 规模:总计38.7亿参数,每个token激活14.5亿参数
- 32层,d_model 2048,GQA 16Q/4KV,16个专家,top-4
- 上下文长度:4096
- 分词器:Qwen3(151k)
- Hugging Face:https://huggingface.co/YOON1v/Apex-2
(通过Qwen3MoeForCausalLM映射,可使用transformers / vLLM加载)
训练
- 预训练:865亿个token(GH200 ×1 → ×2,使用DiLoCo)
- SFT:约25亿个token(以代码为主 + 数学 + 指令)
- DPO:尝试过,但分数下降,因此丢弃了该检查点
关键数据(SFT,贪心解码,聊天模板)
基准测试
HumanEval 43.9
HumanEval+ 41.5
MBPP 56.3
MBPP+ 48.9
GSM8K(0-shot CoT) 32.4
MATH-500 21.0
IFEval(提示严格) 44.7
MMLU(5-shot) 28.6
有趣对比
仅使用约0.087万亿预训练token,基础模型的HumanEval+就与Qwen2.5-1.5B(使用了18万亿token)相当。
知识(MMLU)和数学仍远远落后,这符合数据差距的预期。
未奏效的方法
DPO(22万对,长度归一化)使回答变得更长,并损害了代码/数学/IFEval性能。
我停止了DPO,保留了SFT检查点。完整日志见基准测试报告。
局限性(如实说明)
- 以英语为中心(几乎没有多语言能力)
- 知识薄弱 → 频繁产生幻觉
- LiveCodeBench中/难级别接近零
- 仅支持4k上下文
欢迎就MoE设置、DiLoCo或DPO为何适得其反提出问题。
―― 高票评论(帖子共14条讨论)――
[+11] u/MehTheHedgehog:看到其他人尝试从零构建SML,而不是另一个Qwen微调,这很令人鼓舞。已加星标以备将来查看。
你计划进一步使用自蒸馏进行后训练吗?这是我最感兴趣的部分。
[+6] u/FullOf_Bad_Ideas:这真的很酷。我有一个类似的项目,一个4B A1.15B MoE,仅使用波兰语数据从零训练。你的结果很好。达到这个水平需要多少计算量,吞吐量如何?既然你复用了Qwen 3分词器,你可以从使用该分词器的其他Qwen 3模型进行离策略或在线策略蒸馏。这正是我计划在我的项目中做的,使用我采用的APT4分词器共享模型。
> "max_position_embeddings": 4096,
> "rope_theta": 10000.0,
对于4096上下文,这个theta是错误的,请阅读 https://arxiv.org/abs/2405.14591v1
10k仅对约1500个token足够。
[+3] u/wizard_of_menlo_park:干得好!训练很难。
训练模型的总硬件成本是多少?花了多长时间?你是从零开始训练的吗?
[+2] u/Healthy_Dependent854:也许你可以使用带可验证奖励的强化学习,而不是DPO?我听说一篇论文说这相当便宜 https://arxiv.org/pdf/2605.06241
免责声明:我自己从未尝试过这篇论文,所以不知道它是否真的有效,或者只是基准测试优化。我只是提供一个可能值得尝试的建议。
[+2] u/qaf23:如何了解更多关于训练MoE模型的知识?从哪里开始?
[+1] u/Equivalent_Bit_461:很酷,继续保持好工作!
[+1] u/Feeling-Schedule5369:成本多少,花了多长时间?
[+1] u/sn2006gy:喜欢看到这个。好奇你是否构建了一个稠密模型进行比较?然后我想知道你是否可以利用差异,用所学优化MoE的改进。
[+1] u/Creative_Bottle_3225:问题是,上下文长度4096只能写一首诗。