Skip to content

认识 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 GiB95 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 MoE52,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 吞吐

必须加的三个限定条件:

  1. 万亿规模的测试用的是随机路由,测的是系统性能上限,不反映真实模型的训练质量
  2. 2.7 倍那个是 Ai2 自己标的 preliminary(初步) 测试
  3. 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 这套是最近才合进来的):

bash
git clone https://github.com/allenai/olmo-core.git
cd olmo-core
pip install -e .[all]

或者 PyPI 直接来:

bash
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 loss
  • torchao —— float8 训练
  • grouped_gemm —— dropless MoE 需要
  • QuACK —— 部分 CuTe kernel

嫌麻烦也可以用官方 Docker 镜像,依赖齐了但不带 olmo-core 本体(方便你迭代代码)。注意镜像是在 Ai2 自家的 H100 集群上测的,硬件或驱动/CUDA 版本不同的话不一定能用,那就照着 Dockerfile 自己改。

先别急着训:用 dry-run 校验配置 ​

这一步不需要 GPU,强烈建议先跑一遍,搞明白这套配置 override 的机制:

bash
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 覆盖。这是这套框架最好用的地方——改学习率不用改代码:

bash
--train_module.optim.lr=6e-3

真跑起来 ​

单节点 8 卡,官方脚本用 torchrun 起,这里先只跑 100 步验证链路通不通:

bash
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 的真实出处——比看文档准,以它为准。

摸完脚本还想快速验证模型可用不想训,可以直接聊两句:

bash
python -m olmo_core.generate.chat \
  https://olmo-checkpoints.org/ai2-llm/Olmo-3-1025-7B/stage3/step11921/ \
  --max-new-tokens 512

下一步去哪儿 ​

  1. 先把 --dry-run 玩明白,搞清楚配置覆盖机制
  2. 读官方那份 all-in-one researcher 指南(仓库里 make docs 本地起服务,开 http://127.0.0.1:8000/guides/all_in_one_for_researchers.html)
  3. 去啃技术报告 allenai.org/papers/olmocore3,重点读"负面结果"那节
  4. 配 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 该怎么训"这件事,从少数几家公司的内部知识,变成了任何人可以读的一行行代码。

进阶 ​

更多开源技术干货和学习资料,关注公众号「遇码」,领取专属福利。

遇码MeetCoding 开源技术社区