认识 Olmo-core 3 —— 专家池从 8 扩到 128 只慢 5%,Ai2 把万亿 MoE 训练栈开源了
先说个让我有点憋屈的事实。
这两年大模型的参数一路往上涨,从千亿卷到万亿。但能亲手训一遍的人,反而越来越少了。不是技术退步了,是钱把它挤出去了——万卡集群按亿美元计价,电费单子比很多公司的全年营收还长。到今天,真正有资格做前沿预训练的团队,两只手大概数得过来。学术界基本被请出了牌桌。
MoE(混合专家)本来是救场的。它的承诺很诱人:装很多参数,但每个 token 只唤醒一小撮,算力不用跟着参数线性涨。可这承诺里有个隐蔽的坑——模型再稀疏,全部权重还是得塞进显存、每个 step 还得更新;而你把一个 token 路由到正确专家的通信和协调开销,会随着专家数量暴涨。专家一多,省下来的算力又被原样吃了回去。
所以你看到的现象是:MoE 理论上省,实际上贵。
就在昨天,2026 年 10 月 1 日,Ai2(Allen Institute for AI)把补这个洞的整套方案开源了:Olmo-core 3。
先亮一个我觉得最离谱的数字:在他们的实验里,专家数量从 8 个扩到 128 个(每 token 仍只选 4 个),激活参数基本没动(约 32 亿),总参数从 46 亿涨到 470 亿——训练吞吐只掉了不到 5%。
容量涨了十倍,速度几乎没变。这句话如果成立,MoE 才第一次兑现了它十几年前许下的承诺。
先把丑话说在前面(后面还会说):这些是 Ai2 自己的测量,万亿规模的测试用的是随机路由,只验证系统性能、不代表训出来的模型质量。而且人家把失败的实验也一并写进技术报告了。这一点我特别respect,后文会讲。
什么是 Olmo-core 3
一句话:Olmo-core 3 是 Ai2 开源的大模型训练框架 v3.0.0,专门重写过一遍用来训大规模 MoE。
注意容易混淆的点:它不是模型权重,是训练框架。 你要是想"下载下来跑个聊天",走错门了。
把 Olmo 家族的时间线捋一下就清楚了:
| 项目 | 是什么 | 架构 |
|---|---|---|
| OlmoE | 稀疏模型系列,64 个路由专家 | MoE |
| Olmo 3(2025 年 11 月) | 7B / 32B 模型家族 | Dense(密集),几乎全部参数对每个 token 都激活 |
| Olmo-core 3(2026-10-01) | 不是模型,是训练框架新版 | 为下一代 MoE 版的 Olmo 铺路 |
也就是说,Olmo 3 从 MoE 退回 Dense,是因为当时的训练栈是围绕 Dense 设计的;而 Olmo-core 3 是把基础设施先补上,下一代 Olmo 确定走 MoE,用 Ai2 最大的数据集和史上最长的上下文窗口。参数规模、上下文长度、发布日期都没公布。
这是一次"把方法先于模型公开"的发布:万亿参数 MoE 怎么训,牌先亮出来,模型后到。这个顺序,比反过来体面多了。
基本盘:
| 项目 | 情况 |
|---|---|
| 仓库 | github.com/allenai/olmo-core |
| 最新版本 | v3.0.0(2026-10-01 发布) |
| 开源协议 | Apache 2.0 |
| 安装 | pip install ai2-olmo-core(或源码 pip install -e .[all]) |
| Python | ≥ 3.10 |
| PyTorch | ≥ 2.10(v3 把最低版本要求提到了 2.10) |
| 技术报告 | allenai.org/papers/olmocore3 |
| 交互式讲解 | narrative.allen.ai/scaling-up-training |
| 定位 | 训练和微调 Olmo 系列模型的 PyTorch 构建块 |
顺带一提,Ai2 这套东西一直是"完全开放"路线的代表:不只放权重,连数据(Dolma)、配方、中间 checkpoint、训练日志都往外掏。在一堆"开放权重但数据闭源"的厂商中间,这属于稀有物种。
核心特点
一、最大的改动:从 FSDP 换成 DDP
这是本次的灵魂。
上一版 Olmo-core 的 MoE 实现用的是 FSDP(全分片数据并行),配置成"每喂进一小批数据,就把权重聚拢起来再分片一次"。批次一碎,搬权重的时间比算的时间还多。
Olmo-core 3 换成 DDP(分布式数据并行) 思路,一句话概括差别:
- 旧:每个 micro-batch 反复搬运权重(gather → reshard → gather → reshard……)
- 新:专家常驻在各自的 GPU 上不动,把数据路由过去
在 8 张 NVIDIA B300 的初步测试中,一个 470 亿参数的 MoE:
| 方案 | 吞吐(每 GPU 每秒 token 数) |
|---|---|
| 旧 FSDP 实现 | 19,400 |
| Olmo-core 3(DDP) | 52,000 |
| 提升 | 约 2.7 倍 |
别小看这个改动描述得这么"朴素"。分布式训练里最贵的优化往往不是数学上的聪明,是别做不该做的搬运。
二、三种并行 + 三个路由优化
模型怎么切到一堆 GPU 上,靠三件事:
- 专家并行(Expert Parallelism):把专家摊到不同 GPU,每张卡只存一部分专家
- 流水线并行(Pipeline Parallelism):把模型的层切成若干组,分摊到不同 GPU 组,每张卡要记住的模型就少了
- 分布式优化器(Distributed Optimizer):优化器状态也摊开存,而不是每张卡都留一份完整副本
这三者合起来,让 MoE 能长大,而不必要求每张 GPU 都装得下整个模型和它的训练状态。
在此之上还有三个专门为 MoE 打磨的优化:
- Rowwise 专家并行:把路由后的数据直接写进专家的输入缓冲区,少做一次重排。技术报告里的版本基于 NVSHMEM,配合 device-scheduled 的分组矩阵乘,做到专家并行全程无同步
- GPU-resident routing:路由元数据留在 GPU 上,CPU 排队干活时不用等数据拷回来
- Grouped GEMM:把一堆小的专家矩阵乘合并成一次大的,GPU 才吃得饱
第三点看着最不起眼,实际最要命。128 个专家如果各算一次小 GEMM,GPU 基本在空转;合并之后,利用率才回到正常水平。
三、MXFP8:便宜且省显存
Olmo-core 3 支持 MXFP8 低精度格式。在 4 张 B300 上、负载均匀分布的受控对比中:
| 指标 | BF16 基线 | MXFP8 |
|---|---|---|
| 训练吞吐 | 基线 | +约 21% |
| 峰值活跃显存 | 103 GiB | 95 GiB |
Ai2 特别说明,收益大头来自前馈网络和专家之间的数据搬运,不是注意力部分——这也侧面印证了前面那个判断:MoE 的瓶颈从来不在算力,在搬运。
四、几个"生产友好"的细节
这些不上头条,但真到用的时候会救命:
- 拓扑无关的检查点(topology-agnostic checkpoints):全局 FP32 张量独立于并行布局来记录,换个集群拓扑也能接着训。谁经历过"换个并行策略就得重头再来",谁知道这个多值钱
- 激活重计算(activation recompute):受控对比里砍掉近 2/3 的激活显存、峰值显存降约 1/4,代价是约 1/5 的吞吐
- HuggingFace 互操作:新增
olmo3moe模型与 checkpoint 转换工具,并对 Qwen-MoE、GPT-OSS 做了 logit 对齐测试 - 现成的配置模板:仓库里直接给了 Qwen3-MoE、GPT-OSS、Nemotron 三种 config-builder 变体;v2 路由器支持全局负载均衡与 EMO routing,还有共享专家、rowwise FP8 路由专家
- Beaker 启动 CLI:
python -m olmo_core.launch.beaker,给已在 Ai2 集群上的同学(轻量版 gantry)
关键数据一览
把散在各处的数字汇总一下,方便你转发的时候直接抄:
| 场景 | 配置 | 结果 |
|---|---|---|
| 专家规模效应 | 专家 8 → 128,top-4,激活约 3.2B | 总参数 4.6B → 47B,吞吐掉不到 5% |
| vs 旧实现 | 8× B300,47B MoE | 52,000 vs 19,400 tokens/s/GPU,约 2.7×(官方称初步测试) |
| 低精度收益 | 4× B300,负载均匀 | MXFP8 较 BF16 吞吐 +21%,峰值活跃显存 103 → 95 GiB |
| 万亿规模 | 1.2 万亿参数、每 token 激活 583.6 亿,512 张 B300 | 观测最高吞吐 858 TFLOP/s/GPU |
| 极限试探 | DeepEP v2 实验配置 | 达 2.38 万亿总参数(官方标注为短时容量测试,非持续训练) |
| 显存优化 | 激活重计算 | 激活显存减近 2/3、峰值降约 1/4,代价约 1/5 吞吐 |
必须加的三个限定条件:
- 万亿规模的测试用的是随机路由,测的是系统性能上限,不反映真实模型的训练质量
- 2.7 倍那个是 Ai2 自己标的 preliminary(初步) 测试
- Ai2 没有发布与 NVIDIA Megatron-Core 的正面对比数据。官方说法是"Megatron-Core 是训大 MoE 的成熟选项,而 Olmo-core 3 给 Olmo 框架带来了一套集成的 MoE 训练栈"——定位清楚,但没有头对头的分数
技术报告里的"翻车记录",比benchmark更值得读
这一段是我今天最想聊的。
技术报告里除了吹的部分,还老实写了几条反直觉的负面结果:
- "Token gerrymandering"(token 杰利蝾螈):负载均衡的评分在变好,但实际的工作负载分布反而在变差。也就是说你盯着的那条 loss 曲线在骗你——这个发现对任何做 MoE 路由的人都是一记闷棍
- 降专家学习率没用:因为每个专家分到的 token 变少了,直觉上应该调低学习率补偿一下。实测在测试的模型家族里没有改善
- kernel 计时会因为输入数值而变:矩阵乘的维度完全相同,只要里面的数值不同,耗时就不一样。所以 benchmark 不但要对齐 shape,还得对齐 value
- 通信与计算分stream重叠,有时会拖慢端到端:经典的"我明明优化了它怎么变慢了"
大部分开源模型的技术报告是广告,这份是实验记录。有多少团队会把自己"以为有用、结果没用"的实验写进报告? 就冲这一点,我认为它比那几个漂亮的吞吐量数字更值得读。
什么时候该用它
说人话,Olmo-core 3 的适用面比 vLLM / SGLang 这种"人人可装"的东西窄得多,但在窄的地方它几乎没对手:
- 你是高校实验室或小团队,想研究 MoE 的路由、负载均衡、并行策略的取舍,又不想依赖闭源训练栈——这是目前为数不多的开放选项,连踩过的坑都给你写好了
- 你要训的是自己的 MoE 基座,且手上有 8 张以上较新的 GPU(注意:官方基准跑的是 B300,H100 能跑但性能自己测)
- 你关心"完全开放"这件事本身:数据、代码、中间 checkpoint、配方全开放,可以拿去做模型可复现性研究
- 你想复现别人的 MoE:仓库直接给了 Qwen3-MoE / GPT-OSS / Nemotron 的 config-builder,起点比从零搭高不少
不适合的情况也直说:
- 只是想本地跑个模型——出门左拐找 vLLM / SGLang / Ollama
- 只有一两张消费级显卡——这套东西是为多机多卡设计的,"在自己的 Mac 上试试"不在射程内
- 想要开箱即用的中文支持——Olmo 系列是英文为主的科学语料训练出来的,中文能力别抱幻想
- 想要第三方背书——发布才一天,目前一个外部落地案例都没有。 我知道这话不好听,但这就是事实,我不想拿"Ai2 自己说很强"包装成"业界广泛采用"
顺脖子说一句大实话:这类"训练基础设施"的开源,受益面永远是小众的那几千人。但它决定了剩下那几十万人能用什么模型、以及能不能验证那些模型说的话。
它是地基,不是装修。
初体验:从零跑到第一个 checkpoint
老规矩,先泼冷水:完整体验需要多张高端 GPU。 但你完全可以只花十分钟把安装、配置校验这步走完,搞清楚门槛在哪。
装
推荐源码装(要跟着 main 走,MoE 这套是最近才合进来的):
git clone https://github.com/allenai/olmo-core.git
cd olmo-core
pip install -e .[all]或者 PyPI 直接来:
pip install ai2-olmo-core环境要求:Python ≥ 3.10、PyTorch ≥ 2.10(v3 把最低 PyTorch 版本提到了 2.10,先确认你的版本)。
有一批可选依赖要按需补,官方 README 点名的:
flash-attn/ring-flash-attn/TransformerEngine—— 对应不同的注意力后端Liger-Kernel—— 低显存的 fused-linear losstorchao—— float8 训练grouped_gemm—— dropless MoE 需要QuACK—— 部分 CuTe kernel
嫌麻烦也可以用官方 Docker 镜像,依赖齐了但不带 olmo-core 本体(方便你迭代代码)。注意镜像是在 Ai2 自家的 H100 集群上测的,硬件或驱动/CUDA 版本不同的话不一定能用,那就照着 Dockerfile 自己改。
先别急着训:用 dry-run 校验配置
这一步不需要 GPU,强烈建议先跑一遍,搞明白这套配置 override 的机制:
python src/scripts/official/OLMo3/OLMo-3-1025-7B-pretrain-1.py \
--save-folder=models/tutorial-run-01 \
--train_module.rank_microbatch_size=8192 \
--dry-run关键概念:所有超参数都在 ExperimentConfig 里,可以在命令行用 --xxx.yyy=value 覆盖。这是这套框架最好用的地方——改学习率不用改代码:
--train_module.optim.lr=6e-3真跑起来
单节点 8 卡,官方脚本用 torchrun 起,这里先只跑 100 步验证链路通不通:
torchrun --nproc-per-node=8 \
src/scripts/official/OLMo3/OLMo-3-1025-7B-pretrain-1.py \
--save-folder=models/tutorial-run-01 \
--train_module.rank_microbatch_size=8192 \
--trainer.callbacks.lm_evaluator.enabled=false \
--trainer.callbacks.downstream_evaluator.enabled=false \
--trainer.hard_stop='{value: 100, unit: steps}'checkpoint 会落到 --save-folder 指定的目录,脚本会自动从最新 checkpoint 续训(中断之后想接着跑很方便)。
想 MoE 怎么配:v3.0.0 专门加了 tech-report 参考脚本,在 src/examples/olmo_ddp 下。里面的 ExpertParallelConfig、MoEV2TransformerTrainModule 这些抽象,就是前面那些 benchmark 的真实出处——比看文档准,以它为准。
摸完脚本还想快速验证模型可用不想训,可以直接聊两句:
python -m olmo_core.generate.chat \
https://olmo-checkpoints.org/ai2-llm/Olmo-3-1025-7B/stage3/step11921/ \
--max-new-tokens 512下一步去哪儿
- 先把
--dry-run玩明白,搞清楚配置覆盖机制 - 读官方那份 all-in-one researcher 指南(仓库里
make docs本地起服务,开http://127.0.0.1:8000/guides/all_in_one_for_researchers.html) - 去啃技术报告 allenai.org/papers/olmocore3,重点读"负面结果"那节
- 配
narrative.allen.ai/scaling-up-training那个交互式讲解一起看,比干读代码直观
几句必须说的丑话
- 版本号虽是 3.0.0,但 breaking change 不少:v3 里 model ladder 框架和一批旧训练脚本被直接删掉了(
Remove model ladder framework and retired training scripts),FusedAttention也被FusedAttentionV2取代。老代码升级过来大概率要改 - MoE 这套依赖很重:专家并行的关键技术路径依赖 NVSHMEM + 支持 RMA 的 NCCL,以及 CUDA 12.8 / 13.0 的 kernel 构建。镜像里才省事,裸机上你会踩不少坑
- 数据是用 B300 跑出来的:H100 / A100 能跑,但别指望复现那几个数字
flash-linear-attention被钉在 0.4.1(main 上已是 0.5.2),因为 0.5.2 要求 Triton ≥ 3.7.1 和更新的 torch。这是官方明知故犯的妥协,升级依赖时记得- 万亿规模数字用随机路由测的:再说一遍,它证明的是"系统撑得住",不是"模型训得好"
- 下一代 Olmo 的规格一个都没公布:参数规模、上下文长度、发布时间全是未知数,别拿现在的消息当期货炒
最后一句个人立场。过去两年整个行业的注意力都在模型排行榜上,谁跑分高谁开发布会。
但真正决定"这个领域还有多少人有资格参与"的,是训练栈是不是开源的。模型可以被下载,基建不能。
Olmo-core 3 这种东西的价值,不在那个 2.7 倍,在于它让"万亿参数 MoE 该怎么训"这件事,从少数几家公司的内部知识,变成了任何人可以读的一行行代码。
进阶
更多开源技术干货和学习资料,关注公众号「遇码」,领取专属福利。
