稠密模型的墙:参数翻倍,计算翻倍
稠密模型(dense model)里每个参数都参与每次推理——参数翻倍,计算量与显存同步翻倍,这堵墙在千亿参数之后变得难以逾越。MoE(Mixture of Experts,混合专家)换了一种思路:把模型做成「很多个专家 + 一个路由器」,每个 token 只被路由到少数几个专家处理——参数总量可以继续膨胀(存着所有专家),但单次推理的计算量只由被激活的那部分决定。
这就是「万亿参数」叙事的真相:当代旗舰开源模型的参数规模动辄数千亿,靠的几乎全是稀疏激活——参数量与计算量解耦。MoE 不是新概念(1991 年的 Jacobs 与 Jordan 就提出了混合专家思想,2017 年 Shazeer 的 Sparsely-Gated MoE 把它带进 LSTM 时代),它的爆发依赖两个工程前提:大模型的规模压力(稠密路线撞墙)与并行基础设施(专家并行让分布在不同设备上的专家协同工作)。
路由机制:一个 token 怎么「选专家」
MoE 层的结构:一个标准 Transformer 的前馈层(FFN)被替换成 N 个并行的「专家 FFN」加一个门控网络。每个 token 进来,门控(路由器)计算它对每个专家的匹配分数,取分数最高的 Top-K 个专家处理,输出按门控权重加权合并。主流配置 K=1 或 K=2:Switch Transformer(2021)用 K=1 验证了极简路由的可行性,把万亿参数首次拉进训练范围;后续主流回到 K=2 或更细的配置。
关键的理解点:路由是逐 token 的,不是逐句的——同一段话里的不同 token 会去不同的专家,甚至同一个词在不同上下文里路由结果都不同。路由由门控网络的 softmax 打分决定,而门控参数与专家参数一起端到端训练——这是 MoE 最微妙的地方:路由本身不可导(选 Top-K 是离散操作),工程上用「分数取 Top-K 再 softmax」的可导近似绕过,训练才能稳定进行。
flowchart LR
T["输入 token"] --> G["门控路由器<br>softmax 打分"]
G -->|"Top-K 选择"| E1["专家 1<br>FFN"]
G -->|"未被选中(不计算)"| X["专家 2-64<br>休眠"]
G --> E8["专家 64<br>FFN"]
E1 --> W["门控权重加权合并"]
E8 --> W
W --> O["输出"]
负载均衡:MoE 训练的生死线
如果放任模型自由学路由,会出现路由崩塌(routing collapse):少数「明星专家」被频繁选中越练越强,多数专家无人问津越练越弱——稀疏激活的算力优势荡然无存,还白白占了参数。负载均衡因此是 MoE 训练的核心工程题,主流解法是辅助损失(auxiliary loss):在训练目标之外加一项惩罚,约束各专家接收的 token 数量尽量均匀——Switch Transformer 的均衡损失把每个专家的「负载份额」与均匀分布的偏离计入损失。
但辅助损失是个双刃剑:均衡约束太强,会强迫路由「为均匀而均匀」,损害模型按语义匹配专家的质量。后续研究在这对矛盾里持续微调——Dropless MoE(token 超容量时丢弃)、容量因子调节、以及 DeepSeek 系列的无辅助损失均衡(用动态偏置调整路由分数,绕开辅助损失对梯度的人为干扰)都是这条线的演进。负载均衡的水平,直接决定一个 MoE 模型的实际算力利用效率——论文里 MoE 的「性价比」差异,一多半藏在均衡策略里。
专家到底学到了什么:可解释性的实证答案
「专家是不是按领域分工的?」——直观假设是数学专家、代码专家、语言专家各管一摊。实证研究(对 Mixtral 等开源 MoE 的分析)给出了更微妙的答案:专家的分工是语法与 token 级的模式,而非高层语义领域——有的专家专注标点与数字,有的偏好特定语言的特定词缀,同一段专业文本的路由分布相当分散。这意味着「专家数 = 能力多样性」的直觉不成立:MoE 的收益更多来自参数容量扩大的通用效应(更多参数记住更多知识)而非「专家智能」。
这个实证结论有工程后果:既然专家不是语义分工的,跨专家的通信与组合就是能力的关键路径——DeepSeek-V3 的细粒度专家 + 共享专家设计(把大专家拆小、增加选中专家数,同时保留少量始终激活的共享专家承载通用知识)正是对这一认识的工程回应:更细的路由粒度让组合表达更灵活,共享专家兜底通用计算。
MoE 的代价与适用边界
稀疏激活不是免费的。显存代价:所有专家都要常驻显存——MoE 是「计算省、显存贵」的架构,单卡跑不动大 MoE,专家并行与 offload 是部署的必要功课。通信代价:专家分布在多卡时,token 要跨设备路由(all-to-all 通信),通信开销在推理延迟里占比可观——这正是 DeepSeek-V3 等模型在推理引擎层面优化路由调度的原因。微调代价:MoE 的微调比稠密模型更挑剔(均衡损失的权重、路由的稳定性都要重新调),开源 MoE 的微调生态因此落后于同规模稠密模型。
适用边界由此清晰:预训练规模竞赛与高吞吐服务场景,MoE 几乎是唯一解(同等推理成本下容量更大);资源受限的本地部署与频繁微调的场景,中等规模稠密模型反而省心。理解了这一点,就能看懂开源社区的分工:旗舰研究模型纷纷 MoE 化,本地小模型生态依然是稠密的天下——不是技术先进与否,是两种架构对应两种约束。
细粒度专家与共享专家:DeepSeek 系的路线细化
把 MoE 的演进推到当前工艺,DeepSeek 系列的两次架构决策是最佳教材。决策一:细粒度专家(fine-grained experts)。传统配置是「少量大专家、每个选 2 个」——专家粒度粗,组合表达的灵活性受限。DeepSeek-V2/V3 把大专家拆成更多小专家、同时提高选中数(如 256 选 8)——同样的激活计算量下,「小专家多选几」的组合空间指数级大于「大专家少选几个」,路由的表达精度提升。这背后是对专家分工本质的回应(正文讲过:专家是 token 级模式而非语义领域)——既然专家本来就是细粒度模式的容器,那就把容器做小做密,让组合自由度扛下表达需求。决策二:共享专家(shared experts)。每 token 除了路由到若干「路由专家」,还固定通过少量「共享专家」——它们不经路由、每个 token 都会激活,承载所有 token 都需要的通用计算。这个设计直接对冲路由的「混乱税」:既然实证发现某些通用模式被所有 token 需要,与其让路由器反复地把它们分给各个专家(浪费路由容量),不如显式隔离出来常驻。两决策合并的效果写进了报告:更高的「参数效率」(同等推理成本下更强的基准表现)。对观察者的启示:MoE 的竞争已经从「能不能训大」进入「怎么训得聪明」的工艺竞争——路由粒度、均衡策略、共享隔离,每个旋钮都有论文级的收益空间,这也是为什么 MoE 模型的报告要读架构附录而不只看 benchmark。
MoE 的推理侧工程:专家并行与 all-to-all 的税
MoE 的服务部署有一笔正文没展开的税:跨设备路由的通信成本。专家分布在多张卡上(单卡装不下全部专家),每个 token 要被送往它选中的专家所在的设备——这就是 all-to-all 通信:每个设备同时收发到所有其他设备的数据。它的开销与「专家分布的散乱度」成正比:token 的路由结果越分散,通信越多。工程优化的三个方向:按亲和性重排路由(在训练约束内让相邻层/相关 token 的路由倾向同设备专家,减少跨设备流量)、通信与计算重叠(把 all-to-all 与前一层计算并行流水,让等待被算力填满)、专家副本冗余(热点专家多卡复制,分散负载也缩短通信半径)。推理框架(vLLM/SGLang 等)对 MoE 的支持成熟度,直接决定「同参数量 MoE 与稠密模型谁跑得快」的实测答案——论文里 MoE 的每 token 计算量低,部署里通信税可能吃掉优势。选型时的实操建议:MoE 模型的吞吐基准要在自己的部署拓扑(卡数、卡型、batch 配置)下实测,公开 benchmark 的推理数字自带作者的拓扑假设,直接套用会失真。MoE 的「理论经济性 → 实际经济性」的转化率,是开源推理引擎下一阶段的竞争焦点。
给观察者:读 MoE 模型报告的三个数字
评估一个开源 MoE 模型,报告里的三个数字比 benchmark 更有信息量。激活参数占比(激活参数 ÷ 总参数):比值越低稀疏度越高——同样的激活量下总参数越大,「记忆容量」的潜力越大,但训练与部署的难度同步上升;主流旗舰的比值在 5%–10% 区间。专家粒度配置(专家数 × Top-K + 是否有共享专家):细粒度多选加共享专家是当前的最优工艺基线——沿用「8 选 2 大专家」老配置的模型,架构上已落后一代。均衡策略的代际:是否还在用辅助损失(上一代工艺)、还是动态偏置/无损均衡(新一代)——这直接影响实际训练出的路由质量与算力利用效率。三个数字合读,基本能判断这个 MoE 的「架构代际」,进而校准对它 benchmark 成绩的预期:架构落后一代的模型需要更多的数据与算力才能追平——报告读得细,预测就准。
小结
MoE 用「路由器 + 专家群 + Top-K 激活」把参数量与计算量解耦,是规模竞赛从千亿走向万亿的架构基石。它的三个核心技术点——可导近似的 Top-K 路由、防路由崩塌的负载均衡(辅助损失及其替代方案)、显存与通信的工程代价——共同决定了「论文 MoE」与「能用 MoE」的距离。可解释性实证提醒我们专家分工是 token 级模式而非语义领域,细粒度专家与共享专家的设计是对这一认识的回应。理解了 MoE 的稀疏逻辑,再看模型报告里的「激活参数 / 总参数」两个数字,就知道它们分别对应计算账单与显存账单——下一篇继续拆第三个账单:长上下文时代的 KV Cache 内存经济学。
读者留言
COMMENTS 暂无还没有留言,来说第一句?