1.6 混合专家(MoE):参数量与计算量的解耦#

稠密 Transformer 的每个 token 都需经过全部参数,参数量越大,单 token 的计算成本越高。混合专家(Mixture of Experts, MoE)将前馈层替换为多个并列的专家子网络与一个路由器,每个 token 仅激活其中少数专家,从而使模型的总参数量(容量)与单 token 计算量(成本)成为两个可独立调节的量[^shazeer][^switch]。

核心问题

  • 能解释稠密前馈网络中参数量与单 token 算力为何强耦合,以及 MoE 如何将二者解耦。
  • 能计算 top-$k$ 门控得分、专家输出加权和与专家容量。
  • 能区分辅助负载均衡损失、动态路由偏置与 router z-loss 的作用路径。
  • 能说明细粒度专家、共享专家、专家并行和稀疏升级的工程取舍。
  • 能判断 MoE 对计算、显存和通信成本的真实影响,并解读代表模型配置。

一、问题的提出:稠密模型的参数、算力耦合#

1.4 · 资源核算 指出,稠密(dense)模型每个 token 的前向算力约为 $2N$ FLOPs,其中 $N$ 为参数量。这意味着参数量越大,单 token 成本越高,且所有参数都无差别地参与每一次预测,无论输入是何种内容,前向计算所用的都是同一批完整权重。

这种全参数参与的模式在计算上是低效的。语言模型所承载的知识在原则上是可分门别类、按需调用的,而稠密 Transformer 缺乏依据输入内容选取一部分参数参与计算的机制,所有 token 都通过同一个宽而深的前馈网络。

问题的核心集中在前馈网络(Feed-Forward Network, FFN)层。在标准 Transformer 中,FFN 占据了每层参数的绝大部分:设隐藏维为 $d$、中间维为 $4d$,则 FFN 约含 $8d^2$ 个参数,而多头注意力的投影矩阵合计仅约 $4d^2$。

由此可见,若要提升模型的知识容量,最直接的手段是加宽 FFN,但这会使单 token 的算力随之线性增长。MoE 的目标正是打破加宽 FFN 即全面抬高单 token 成本这一约束:通过维持大量专家以扩充总参数量、同时仅激活其中少数以控制单 token 算力,使容量与成本相互解耦。下文诸节所讨论的机制,都是为稳定实现这一解耦而设计。

需要预先澄清一个常见误解:MoE 中的专家并非由人为按学科预先划定的模块,模型并未被指派各专家分别学习何种领域。专家之间的分工完全是训练过程中自发涌现的,路由器与专家在数据上联合优化,各专家最终擅长何种输入是梯度下降的产物,而非人工设计。这一自发性既是 MoE 的优势(分工无需人工规划),也是其困难的来源(分工可能失衡、坍缩或偏斜)。

第三至第五节所述机制,本质上都在约束这一自发过程使其不致偏离。

二、核心机制:路由器与专家集合#

MoE 将 Transformer 中参数占比最高的 FFN 替换为 $E$ 个并列的专家(每个专家均为一个独立 FFN,结构相同而参数不同)以及一个路由器(router,亦称 gating network)。

其前向过程分为三步:对每个 token 的隐藏向量 $u$,路由器计算它对每个专家的亲和分(affinity),并选出得分最高的 top-$k$ 个专家(如 top-2、top-8);随后仅由被选中的 $k$ 个专家分别参与计算,其输出按路由权重加权求和;其余 $E-k$ 个专家对该 token 完全不参与计算,此即稀疏激活(sparse activation)。

由此,总参数量由全部 $E$ 个专家决定,可以很大,而单 token 计算量仅由被激活的 $k$ 个专家决定,可以很小,两个量因此得以解耦。值得注意的是,路由是逐 token 进行的:同一序列中的不同 token 各自独立地选择专家,因而稀疏性发生在 token 粒度,而非对整条序列统一选择一次。这一路由、选中、加权求和的前向流程见图 1
Top-2 路由让每个 token 只经过两个专家,以较小计算量获得更大的参数容量。
图 1 Top-2 稀疏路由。教程综合图,依据 GShard 论文算法 1 与 Switch Transformer 的路由定义组织;路由器为每个 token 选择两个专家并加权聚合,使总参数容量与单 token 激活计算量解耦。

Top-$k$ 门控公式#

设第 $l$ 层有 $E$ 个专家 $\{\text{FFN}_1,\dots,\text{FFN}_E\}$,路由器是一个小矩阵 $W_g \in \mathbb{R}^{d\times E}$。对 token 向量 $u\in\mathbb{R}^d$:

第一步·打分。算出对每个专家的亲和分(affinity)。早期用点积后接 softmax;DeepSeek-V3 改用逐专家 sigmoid:

$$s_i = \text{Sigmoid}\big(u^{\top} e_i\big), \qquad i=1,\dots,E$$

其中 $e_i$ 是专家 $i$ 的可学习质心向量(即 $W_g$ 的第 $i$ 列)。内积 $u^{\top} e_i$ 衡量 token 向量与该专家质心向量的相似度,取值越大表示该 token 与专家 $i$ 所偏好的输入越接近,其亲和分越高。

第二步·选 top-$k$。只保留分数最高的 $k$ 个,其余置零:

$$\mathcal{T} = \text{Top}k(\{s_1,\dots,s_E\},\, k)$$

第三步·归一化成权重。对被选中的专家做归一化(softmax 或简单归一),得到门控权重 $g_i$:

$$g_i = \begin{cases} \dfrac{s_i}{\sum_{j\in\mathcal{T}} s_j}, & i\in\mathcal{T} \\[2mm] 0, & i\notin\mathcal{T}\end{cases}$$

第四步·加权求和。最终该 token 的 FFN 输出是被选中专家的加权和(通常再加上残差):

$$y = u + \sum_{i\in\mathcal{T}} g_i\,\cdot\,\text{FFN}_i(u)$$

将上述四步代入一组具体数字($E=5$、$k=2$),可完整走通打分、选择、归一化到加权求和的全过程:路由器对 5 个专家算亲和分 $s_i=\text{Sigmoid}(u^{\top}e_i)$,取分数最高的 2 个(设专家 2 得 $0.90$、专家 5 得 $0.60$)、其余置零。

再在被选中的 2 个专家间归一化得 $g_2=0.90/(0.90+0.60)=0.60$、$g_5=0.40$(故 $g_2+g_5=1$),最终 $y=u+g_2\text{FFN}_2(u)+g_5\text{FFN}_5(u)$。

其中加权作用于各专家独立前向得到的输出向量、而非其参数,未被选中专家的 $\text{FFN}_i(u)$ 自始至终不进入前向计算。

未被选中的专家所对应的 $\text{FFN}_i(u)$ 不进入前向计算。这是 MoE 降低算力的根本所在:被丢弃的专家并非计算后再乘以零,而是自始至终不予计算。这也解释了 MoE 实现较稠密层更复杂的原因,稠密层是一次规整的大矩阵乘,而 MoE 须先依路由将 token 分组、分发至各自的专家、计算后再按原顺序合并,这一分发、计算、合并流程正是后续工程章节优化的重点。

需要强调加权作用于哪个层面。此处并非对专家的参数取加权平均(那样将退化为单一稠密专家),而是让每个被选中的专家各自独立地对 $u$ 完成一次前向计算、得到各自的输出向量,再对这些输出向量加权求和。因此即便两个专家的门控权重接近,其非线性变换仍可能给出显著不同的结果,这正是各专家得以分工的数学前提。

相较之下,若仅选 top-1(如 Switch Transformer),加权退化为乘以一个标量门控值,其主要作用在于保持门控可微、使梯度得以回传至路由器,而非真正混合多个专家的输出。

Noisy top-$k$ 的探索机制#

Shazeer 等人于 2017 年提出的原始稀疏门控 MoE 在打分前先向 logits 加入一份幅度可学习的高斯噪声1

$$H(x)_i = (x\cdot W_g)_i + \text{StandardNormal}()\cdot\text{Softplus}\big((x\cdot W_{\text{noise}})_i\big)$$

随后对 $H(x)$ 取 top-$k$、将其余置为 $-\infty$、再作 softmax。加入噪声具有两方面作用:其一是促进探索,使原本分数相近的专家有机会被选中,避免训练早期即锁定于少数专家;其二有助于负载均衡,噪声使路由更为分散,配合均衡损失将 token 分派得更平均。这一手段在后续模型中逐渐被更直接的均衡机制取代(见下一节),但它仍是理解路由坍缩成因的出发点。

此处须厘清一个易混淆之处:top-$k$ 中的 $k$ 表示每个 token 激活的专家个数,$E$ 表示专家总数,二者是相互独立的可调量。$E$ 决定模型容量,$k$ 决定单 token 算力,路由器负责在二者之间依据内容作出选择。

$k$ 的取值在历史上几经演变:Shazeer 采用 top-2 乃至 top-4,Switch Transformer 压至 top-1 以极简化通信,而细粒度专家时代又回升至 top-6、top-8。需要注意的是,后者的单个专家规模已相应缩小,故激活参数量并未随 $k$ 增大而显著上升。

因此,比较两个 MoE 模型时不能仅看 $k$,而应以激活参数总量这一真正的算力指标为准。

数值示例:Mixtral 8×7B 每层含 8 个专家、每 token 选 top-2,总参数约 47B,单 token 仅激活约 13B[^mixtral]。$8\times7=56$ 而总参数为 47B,原因在于注意力层、embedding、LayerNorm 等为所有专家共享、不重复计数,真正被复制为 8 份的仅有 FFN。

由此可获得接近 47B 大模型的容量,而仅付出约 13B 规模的推理算力。DeepSeek-V3 更进一步,总参数 671B、单 token 仅激活 37B[^dsv3],总参数约为激活量的 18 倍,激活占比仅约 $5.5\%$。

三、核心难题:负载均衡#

MoE 最主要的实际难题不在于如何路由,而在于如何防止路由坍缩。

路由坍缩的成因#

路由器与专家是联合训练的。在训练早期,某个专家若偶然被多次选中,便获得更多训练信号而变得更优,其亲和分随之升高、被选中的频率进一步增加,形成一个正反馈循环。若不加约束,最终会退化为少数专家承接几乎全部 token、其余专家鲜有激活的状态,从而浪费模型容量,付出了大模型的显存代价,却仅发挥出小模型的能力。

这一现象称为路由坍缩(routing collapse)。负载均衡机制的作用即在于约束路由器,使 token 不致过度集中于个别专家。

坍缩的代价可通过一个极端情形量化:假设 256 个专家中最终仅有 8 个被频繁激活、其余 248 个近乎闲置,则一个占用 671B 参数显存的模型,其实际发挥作用的容量仅相当于那 8 个专家,近 97% 的参数处于闲置状态。这并非效率略有下降,而是显存投入与实际能力的严重错配。

正因代价如此之高,负载均衡才被视为 MoE 的核心难题,并催生了辅助损失、偏置项、序列级约束等一整套专门机制。

辅助负载均衡损失#

Switch Transformer 提出的标准做法是引入一个辅助损失(auxiliary loss),与语言建模主损失一同优化2。设一个 batch 含 $B$ 个 token、$N$ 个专家,定义 $f_i$ 为被分派到专家 $i$ 的 token 比例(由实际路由的硬计数得到),$P_i$ 为路由器分配给专家 $i$ 的平均概率(软的、可微的门控概率均值),则辅助损失为:

$$L_{\text{aux}} = \alpha\cdot N\cdot\sum_{i=1}^{N} f_i\,\cdot\,P_i$$

该式之所以能促使路由趋于均匀,可由约束优化的角度理解。由于 $\sum_i f_i = 1$ 且 $\sum_i P_i = 1$,内积 $\sum_i f_i P_i$ 在 $f$ 与 $P$ 均为均匀分布(每项等于 $1/N$)时取得最小值 $1/N$;分布越集中于少数专家(即某些 $f_i P_i$ 较大),该和越大。因此最小化 $L_{\text{aux}}$ 等价于将路由分布推向均匀。

式中乘以 $N$ 是为使损失量级不随专家数变化,$\alpha$ 为权重系数,通常取 0.01 量级。其中 $f_i$ 由 argmax 得出、不可微,$P_i$ 可微,故梯度经由 $P_i$ 回传至路由器,$f_i$ 仅作为系数,从而恰好压低被过度选中专家的门控概率。

专家容量与 token 丢弃#

仅有辅助损失尚不足够。训练与推理时每个专家的算力是预先分配的(尤其在专家并行、需将数据打包为规整张量的情形下),单个专家不能临时接收任意多的 token。为此引入专家容量(expert capacity):

$$\text{capacity} = \frac{\text{batch 内 token 数}}{N}\times\text{capacity\_factor}$$

其中容量因子 capacity_factor > 1(如 1.25)为不完全均衡预留缓冲。超出容量的 token 被丢弃(drop),即跳过该 MoE 层而直接经残差连接传递。容量因子过小会导致丢弃过多、损失信息,过大则浪费算力与显存,因而是一个需要调节的工程参数。

陷阱·token dropping:训练时被丢弃的 token 相当于未从该层获得学习信号,丢弃率过高会拖慢收敛甚至引入评测波动。推理阶段的情形更为微妙,由于容量按 batch 分配,同一序列中某个 token 是否被丢弃取决于同 batch 内其他 token 的路由结果,这使得输出对 batch 组成产生轻微依赖。

Switch Transformer 以较大容量因子配合 top-1 缓解该问题,此后许多实现转向无丢弃(dropless)路线,借助不规整算子或 all-to-all 通信保留全部 token。

DeepSeek-V3 的无辅助损失偏置法#

辅助损失存在一处隐患:它是额外施加于模型的目标,其梯度会与语言建模主目标产生冲突,即为追求均衡而牺牲一定的建模质量。DeepSeek-V3 为此提出无辅助损失负载均衡(auxiliary-loss-free load balancing)3,其核心是为每个专家维护一个可学习的偏置 $b_i$,该偏置仅加至亲和分以参与 top-$k$ 选择,而不进入最终的门控权重

$$g'_{i,t} = \begin{cases} s_{i,t}, & \text{若 } s_{i,t}+b_i \in \text{Top}k(\{s_{j,t}+b_j\}_{j=1}^N,\, K_r) \\ 0, & \text{否则}\end{cases}$$

其关键在于:路由的选择依据 $s_i + b_i$,而选中后的加权仍使用原始 $s_i$(经归一化)。偏置仅影响某专家是否被选中,不影响其被选中后的权重大小,因而不会像辅助损失那样扭曲专家输出的加权。

偏置 $b_i$ 的更新不依赖梯度,而依据一条启发式规则:每个训练步结束时统计各专家的负载,对过载的专家将 $b_i$ 减去 $\gamma$、对欠载的专家将 $b_i$ 加上 $\gamma$,其中 $\gamma$ 为偏置更新速度。过载使偏置下降、下一步更难被选中,欠载使偏置上升、更易被选中,由此构成一个将负载推向均匀的负反馈调节,且完全不改动主损失的梯度。

DeepSeek-V3 同时保留一个权重极小的序列级平衡损失作为补充,以防止单条序列内出现极端不均。

两代方案的差别可概括为:辅助损失通过在主损失中附加一项来强制均衡,会连带影响主损失的梯度;偏置法则将均衡约束置于路由选择环节、不介入门控权重与主梯度,从而使均衡与建模质量互不干扰。偏置法选择用 $s_i+b_i$、加权仍用 $s_i$的数据流与偏置的非梯度更新回路见图 2

动态路由偏置依据实际负载修正专家选择,在不污染训练目标的情况下维持均衡。
图 2 无辅助损失的动态负载均衡。教程综合图,依据 DeepSeek-V3 技术报告第 2.1 节的公式组织;路由偏置依据专家实际负载更新,只改变专家选择而不污染主任务梯度。

四、架构演进:细粒度专家与共享专家(DeepSeekMoE)#

均衡机制之外,专家的切分方式同样决定模型上限。DeepSeekMoE(2024-01)提出的两项设计至今仍属主流4

其一是细粒度专家分割(fine-grained expert segmentation)。相较于以 8 个较大专家配合 top-2 的做法,该设计将每个专家的 FFN 中间维切细,形成数量更多、规模更小的专家,并相应提高激活数(如 64 个小专家配合 top-8)。

总算力保持不变,但专家组合的可能数大幅增加:原本仅能在 $\binom{8}{2}=28$ 种组合中选择,现可在 $\binom{64}{8}\approx 4.4\times10^9$ 种组合中选择。组合空间越大,知识分工越细,各专家得以学得更为专精。DeepSeek-V3 的专家中间维仅为 2048(远小于稠密 FFN),正是细粒度设计的体现。

其二是共享专家隔离(shared expert isolation)。其出发点在于,无论输入 token 为何,总有一部分通用知识(语法、常识、基础语义)为几乎所有输入所需。若这部分知识完全由路由专家承载,将被冗余地复制到多个专家中而浪费容量。

为此划出 $K_s$ 个共享专家,对每个 token 恒定激活、不参与路由,专门承载通用知识,从而使路由专家得以专注于真正差异化的知识。

由此,每个 token 的 FFN 输出为恒定激活的共享专家与 top-$k$ 路由专家之和:

$$y = u + \sum_{s=1}^{K_s}\text{FFN}^{\text{shared}}_s(u) + \sum_{i\in\mathcal{T}} g_i\cdot\text{FFN}^{\text{routed}}_i(u)$$

这两项设计,细粒度切分带来的组合空间放大,与共享专家承载通用知识的分工,共同构成了 DeepSeekMoE 的核心。

  • DeepSeek-V2(2024-05,236B / 21B active):160 个路由专家 + 2 个共享专家,top-6,专家中间维 1536,配 MLA 注意力5
  • DeepSeek-V3(2024-12,671B / 37B active):256 个路由专家 + 1 个共享专家,top-8,专家中间维 2048,sigmoid 门控 + 无辅助损失偏置法3

专家是否真正实现专精#

一个自然的问题是:这些专家是否真正学会了分工,抑或仅被均衡损失强行摊平而内部趋于同质?DeepSeekMoE 的消融实验提供了一项证据:在训练好的细粒度加共享专家模型上屏蔽不同比例的路由专家,模型效果的下降幅度明显大于屏蔽同等比例的稠密参数。这表明专家之间的冗余度较低、各自承载着不可替代的知识,一旦被屏蔽便难以由其他专家补偿;

反之,若专家高度冗余、彼此学得相近,则屏蔽少数专家影响有限。低冗余因此可视为专精程度的间接度量。

然而,专精并不等同于按人类语义划分领域。多项分析发现,路由所学到的分工往往是 token 级、由表层统计驱动的:某专家偏好标点或数字,某专家偏好特定词形或语言,而非按代码、历史等高层主题划分。

共享专家的引入在一定程度上正是对这一现象的回应,与其期望路由学出清晰的语义分区,不如先由共享专家承载所有输入共需的通用部分,再由路由专家区分真正存在差异的剩余信号。第十节将进一步强调,不应将路由结果视为可解释的知识分区。

从零训练与稀疏升级#

从零训练一个 MoE 的代价不低,均衡、稳定性与通信均需调节。一条成本更低的路径是稀疏升级(sparse upcycling):取一个已训练好的稠密模型,将其 FFN 复制为 $E$ 份作为初始专家,随机初始化路由器,再继续训练一段时间。其优势在于专家的起点已带有稠密模型的知识,收敛更快,无需从零冷启动;

其难点在于复制得到的专家初始时完全相同,须依靠训练早期的噪声与均衡机制使其分化,否则将长期保持同质而浪费容量。多个开源 MoE 采用升级路线以摊薄成本,这也是稠密到稀疏转换在工程上可行的关键。

设计流派分歧:并非所有 MoE 都采用共享专家。Qwen3-MoE(2025-04)明确放弃共享专家,235B-A22B 与 30B-A3B 均为 128 专家、top-8、无共享专家,理由是使每个专家最大化专精[^qwen3]。

共享专家路线以保留通用知识、减少冗余为目标,无共享路线则完全依赖路由以追求极致专精,两条路线目前均有 SOTA 级模型佐证,属尚未收敛的设计选择。

五、MoE 与扩展律:算力效率的来源#

在容量与成本解耦之上,一个更本质的问题是:在相同的算力预算下,采用 MoE 相较于稠密模型的优势究竟来自何处。

回到 1.4 · 资源核算 的框架。扩展律表明,模型效果主要取决于参数量与训练 token 数两项资源,二者按幂律关系决定损失的下降。稠密模型的约束在于:增加参数量必然使每个训练 token 与每个推理 token 的算力成比例上升。

MoE 则使参数量随专家数量的增加而大幅增长,而单 token 算力仅随激活专家数缓慢增长。因此在固定训练算力的条件下,MoE 能在同等 FLOPs 下容纳远多于稠密模型的有效参数,从而整体压低损失曲线。

GLaM、Switch Transformer、DeepSeekMoE 等多项工作均报告,在匹配算力的前提下,稀疏 MoE 的验证损失显著低于同算力稠密模型,或达到同等损失所需算力更少。

然而,这一优势伴随一个不可回避的代价,也是理解 MoE 适用范围的关键:稀疏参数的效率不及稠密参数。经验上,$N$ 个 MoE 总参数所带来的效果通常不及 $N$ 个稠密参数,即需要更多的稀疏参数方能等效于较少的稠密参数(不同工作给出的换算比例各异,但方向一致)。

因此 MoE 并非无代价的收益,而是一种明确的取舍:以更多但单个更廉价的参数、以及更高的显存与通信开销,换取更低的单 token 训练与推理算力。当算力(而非显存或参数存储)为主要瓶颈时,这一取舍高度有利;当显存或部署简洁性为瓶颈时,稠密模型则更为适宜。

这也解释了为何算力受限、追求极致能力的前沿大模型纷纷转向 MoE,而显存受限、需单卡运行的端侧小模型仍以稠密为主。MoE降算力而不降显存这一非对称收益,将在第七节以 Mixtral 为例进一步量化。

六、训练稳定性:router z-loss#

MoE 训练较稠密模型更易出现数值不稳定:路由器 logits 若取值过大,softmax 中的指数运算会溢出(在 bf16 下尤为明显),导致损失变为 NaN。ST-MoE(2022)提出 router z-loss 以应对这一问题6

$$L_z = \frac{1}{B}\sum_{i=1}^{B}\Big(\log\sum_{j=1}^{N}\exp\big(x_j^{(i)}\big)\Big)^2$$

括号内即 softmax 分母的对数(即 log-sum-exp,亦称配分函数的对数)。惩罚其平方等价于惩罚过大的 logits,从而将路由器 logits 的尺度约束在合理范围内,防止溢出、稳定训练。其权重通常取 0.001,取值很小,仅在数值将要溢出时起作用,平时几乎不干扰主目标。

需要注意的是,router z-loss 与负载均衡损失属于两类不同的机制:前者约束数值尺度,后者约束专家分派的均衡性,实践中常同时使用。

将三种附加约束并置对照,可清晰界定各自的职责边界,避免混淆:

机制解决什么加在哪典型权重
负载均衡损失 $L_{\text{aux}}$专家别偏(防路由塌缩)主损失外加一项,梯度回路由器约 0.01
无辅助损失偏置 $b_i$专家别偏(不动主梯度)只加进 top-$k$ 选择、非梯度更新更新速度 $\gamma$ 很小
router z-loss $L_z$logits 别爆(数值稳定)惩罚 log-sum-exp 的平方约 0.001

三者的共性在于均在语言建模主目标之外对路由器施加额外约束,但各司其职。负载均衡损失与偏置法针对同一目标(均衡),是两代方案,通常二选一或以偏置为主、辅助损失为辅;router z-loss 则针对正交的数值维度,可与前两者叠加使用。调参时应先判定问题性质:若表现为少数专家承接绝大多数 token,属均衡问题;

若表现为训练至某步损失突然变为 NaN,则属数值问题。二者须对症处理,不应以增大 z-loss 权重来缓解坍缩,也不应以增大辅助损失来缓解溢出。

七、关键工程结论:降算力而不降显存#

以下一条既是初学者最易误解之处,也是实际部署中最易忽视的约束:

MoE 降低的是单 token 的算力(FLOPs 与延迟),而非显存占用

其原因在于,尽管每个 token 仅激活 $k$ 个专家,但下一个 token 将路由至哪些专家事先无法预知,因而全部 $E$ 个专家的权重都必须常驻显存。显存占用按总参数量计,而非按激活参数量计。

以 Mixtral 8×7B 为例,其总参数为 47B,FP16 存储约需 94GB 显存($47\text{B}\times2$ 字节),而非按 13B 激活参数估算的 26GB7,因此无法容纳于单张 A100 80GB,须多卡部署或量化。

DeepSeek-V3 的总参数为 671B,即便激活量仅 37B,其 FP8 权重仍约需 671GB,必须以多机专家并行部署。

由此可推论,MoE 的效率优势体现在算力与吞吐维度(同等 FLOPs 预算下容量更大),而在显存维度其成本较高。这一特性直接催生了专家卸载(将不常激活的专家置于 CPU 或磁盘、按需取回)与容量感知调度等推理优化方向。MoE 使算力可承受显存可容纳成为两个相互独立的问题:它以较低算力换取大模型的能力,代价是须先具备容纳该模型全部参数的显存。

以 Mixtral 8×7B、FP16 为例,将显存与算力两个维度并置,可清楚看出二者的脱钩程度。

就显存而言(按总参数),$47\text{B}\times2\text{ 字节}\approx 94\text{GB}$ 是必须常驻的下限,尚未计入 KV cache、激活值与优化器状态(训练时更甚),因此推理至少需 2 张 80GB 卡,或经 4-bit 量化压缩至约 24GB 方能勉强单卡运行。

就算力而言(按激活参数),每 token 前向约 $2\times13\text{B}=26\text{ GFLOPs}$,与一个 13B 稠密模型相当。也就是说,其吞吐与延迟接近 13B 模型,而显存占用接近 47B 模型。这一算力与显存的分离正是 MoE 部署时的核心权衡所在:为获得算力优势而采用 MoE,却须为显存承担大模型的成本。

选型时应据此明确瓶颈究竟在算力还是显存,二者对应的结论截然不同。

部署陷阱·勿按激活量估算显存:曾有团队按激活 13B 申请单张 24GB 卡运行 Mixtral,结果显存溢出。显存预算须始终按总参数量加 KV cache 计算。此外,MoE 的吞吐优势须在专家并行下方能充分兑现,当单卡容纳全部专家时,all-to-all 通信虽不存在,但也无从节省显存。

八、专家并行与通信(预告第 15 章)#

当专家数量超出单卡容量(如 256 个专家、671B 参数)时,须将不同专家分置于不同 GPU,此即专家并行(expert parallelism)。此时某个 token 被路由至的专家可能位于其他卡上,因而需要跨卡将 token 发送至目标专家、再将结果收回,所用的是 all-to-all 集合通信。

all-to-all 的通信量随专家并行度增长,且极易被负载不均放大(某张卡的专家过载时,其余卡须等待其完成),这正是 MoE 训练与推理的首要系统瓶颈。GShard(2020)即通过自动分片配合 top-2 将 MoE 扩展至 600B、2048 个 TPU 核8

当前的推理优化(专家卸载、通信-计算重叠、容量感知路由)均围绕这一 all-to-all 展开。系统层面的细节见 第 15 章 · MoE 推理优化,训推并行的整体视图见 第 9 章 · 训推系统的并行

由此也可理解第三节将负载均衡称为核心难题的原因:它不仅是训练时的质量问题,在多卡部署中更直接决定 all-to-all 的墙钟时间,须待最繁忙的一张卡完成,其余卡方能进入下一步,故均衡稍差即会使吞吐受制于最慢的节点。

此外还有一层训练时不显著、推理时方凸显的差异:MoE 的效率高度依赖 batch 内 token 数量充足。稠密层无论输入一个还是上千个 token,矩阵乘运算都能充分利用硬件;而 MoE 将 token 按专家拆分后,每个专家分得的 token 可能很少,不足以充分利用 GPU 的矩阵乘单元,导致利用率骤降。

因此,MoE 在高并发、大 batch 的服务场景下效率最高(大量用户同时请求,token 汇聚后可使各专家获得足够的计算负载);而在单请求、逐 token 自回归解码的低并发场景下,专家利用率偏低、all-to-all 开销亦难以摊薄,其算力优势将大打折扣。

这也解释了 MoE 更常见于云端大规模服务、而非端侧单机使用的原因,其降低算力的收益须在高并发条件下方能充分兑现。

如何解读一份 MoE 配置#

面对一行 MoE 规格(如671B / 37B active,256+1 专家 top-8),可按以下四项依次拆解,快速判断其特性。首先是总参数量与激活参数量:前者决定显存与容量,后者决定算力与吞吐,二者之比越大表明解耦越激进,如 671/37 ≈ 18 倍即意味着激活量被大幅压低。

其次是路由专家数与共享专家数256+1 表示 256 个专家参与路由、1 个恒定激活,存在共享专家即属保留通用知识的流派。第三是 top-$k$,即每 token 激活的路由专家数,须结合专家中间维方能反推激活参数量,不能仅以 $k$ 判断。

第四是门控函数与均衡机制:采用 sigmoid 配合偏置法(DeepSeek 系)还是 softmax 配合辅助损失(早期方案),这决定了训练细节与复现难度。

读通这四项,一份陌生的 MoE 规格便可直接推断出其显存成本、算力优势与所属设计流派。

九、代表模型时间线(2017 → 2026)#

将这一发展脉络串联起来,可看清 MoE 从早期实验性架构演变为前沿主流方案的过程:

时间模型关键配置贡献
1991Jacobs & Hinton不适用自适应局部专家混合的思想源头
2017Shazeer 等1LSTM,noisy top-$k$,约 137B现代稀疏门控 MoE 层,首次证明可扩到千亿级
2020GShard8600B,top-2,2048 TPU专家并行 + 自动分片,规模化工程范式
2021-01Switch Transformer2top-1,Switch-C 达 1.6 万亿简化到 top-1、容量因子、负载均衡损失
2021-12GLaM91.2 万亿 / 97B active,dense/MoE 交替交替层设计、训练能耗仅 GPT-3 的 1/3
2022ST-MoE6不适用router z-loss,稳定+可迁移
2023-12Mixtral 8×7B108 专家 top-2,47B / 13B active开源普及,简洁配置成教学范例
2024-01DeepSeekMoE4细粒度 + 共享专家确立 2024-25 主流架构范式
2024-05DeepSeek-V25236B / 21B,160+2 专家 top-6MLA + DeepSeekMoE,经济高效
2024-12DeepSeek-V33671B / 37B,256+1 专家 top-8无辅助损失偏置法,开源最强之一
2025-04Qwen3-MoE11235B-A22B / 30B-A3B,128 专家 top-8放弃共享专家、极致专精
2025-04Llama 412Scout 109B / 17B·16 专家;Maverick 400B / 17B·128 专家MoE 首入 Llama、原生多模态、Scout 达 10M 上下文

从时间线可得出两点观察。其一,激活比例持续下降:从 Mixtral 的 13/47 ≈ 28%,到 DeepSeek-V3 的 37/671 ≈ 5.5%、Qwen3 的 3/30 = 10%,总体趋势是大幅放大总参数、同时克制激活量,将容量与成本的解耦推向极致。

当前模型路由配置具体例子
Mixtral 8×7B8 个专家,每 token 选择 2 个,47B 总参数与 13B 激活参数一个 token 只经过两套专家 FFN,注意力与嵌入继续由全部 token 共享10
DeepSeek-V3256 个路由专家加 1 个共享专家,top-8,671B 总参数与 37B 激活参数每个 token 恒经共享专家,再把路由权重分给 8 个细粒度专家3
Qwen3-MoE128 个路由专家,top-8,不设共享专家30B-A3B 每 token 激活约 3B;235B-A22B 每 token 激活约 22B11
Llama 4Scout 为 16 专家,Maverick 为 128 专家,两者均约 17B 激活Scout 用较少专家服务长上下文,Maverick 用更多专家扩展总容量12

其二,设计上既有收敛也有分化:细粒度专家已近乎共识,而共享专家的取舍(DeepSeek 采用、Qwen3 不采用)、门控函数(softmax 或 sigmoid)与均衡机制(辅助损失或偏置法)仍在各家试验之中,这些设计要素将在 1.7 · 现代 Transformer 架构 中继续讨论。

十、常见误区与边界情形#

将 8×7B 误算为 56B。如前所述,被复制为 8 份的仅有 FFN,注意力与 embedding 为共享,实际总参数约 47B。报告参数量时应以总参数为准,而非以专家数 × 单专家规模估算。

混淆算力与显存两个维度。算力(训练与推理 FLOPs)按激活参数计算,而显存须按总参数计算,二者不可混同,这是部署时最易出错之处。

辅助损失权重 $\alpha$ 难以调准。$\alpha$ 过大则为追求均衡而牺牲建模质量、使专家趋于同质,过小则导致路由坍缩。这一两难正是 DeepSeek-V3 转向偏置法的动机:将均衡约束从损失中剥离,使其不再与主目标争夺梯度。

推理时的 batch 依赖。由于容量按 batch 分配,某个 token 是否被丢弃取决于同 batch 内的其他 token,可能引入非确定性,dropless 实现可规避这一问题。

专家不均导致的通信短板效应。在专家并行下,最繁忙的一张卡决定 all-to-all 的完成时间,因此负载均衡不仅关乎模型质量,更直接决定系统吞吐。

MoE 微调更易过拟合。稀疏激活使每个专家所见数据更少,在小数据微调时须对正则化与学习率更为谨慎。这也是 OLMoE(2024-09)等开源工作系统研究 MoE 训练动力学的原因之一。

不应将路由器视为可解释的分类器。人们通常期待某些专家专门处理代码、另一些专门处理数学,但实践中路由所学的分工往往与人类语义类别不相吻合,许多专家的选择更贴近 token 级的表层统计(如首字符、词形)而非高层主题。将路由结果当作严格可解释的知识分区,容易得出误导性结论。

top-1 的梯度盲区。仅选一个专家时,未被选中的专家对该 token 得不到任何梯度信号,路由器也无从获得选择其他专家或更优的反馈。这使得训练早期的探索更依赖噪声与均衡机制,也是 Shazeer 最初采用 noisy top-$k$ 而非 top-1 的原因之一。$k$ 的选择因此不仅是算力权衡,亦关乎训练动力学。

十一、尚未解决的问题#

MoE 已成为前沿扩容的主流路线,但并非通用解法,几个开放问题仍值得注意。首先,显存约束依然存在:MoE 降低了算力却未降低显存,真正使大模型得以运行于小显存设备的是量化、蒸馏、卸载等正交手段,MoE 仅在算力这一维度提供了折扣。

其次,训练难度更高:均衡、数值稳定与通信三方面的困难叠加,复现门槛远高于稠密模型,且配方($k$、专家数、是否设共享专家、门控函数)尚未收敛,更换配置便可能失效。再者,在微调与对齐方面,稀疏激活使每个专家所见数据更稀疏,小数据微调与 RLHF 阶段更易过拟合或使某些专家退化,稳妥配方仍在探索之中。

最后,在可解释性与可控性方面,由于分工是涌现的且与人类语义不对齐,定点编辑某个专家的知识或审计某专家所学内容均较为困难,这在安全与可控方向仍是尚未解决的问题。

综合来看,对 MoE 的恰当判断应从参数越多越强修正为:在算力受限、且愿意承受显存与训练复杂度代价的前提下,它是一次经过权衡的合理选择。

小结#

  • MoE 将 FFN 替换为多个专家加一个路由器,每个 token 仅激活 top-$k$ 个专家,从而将总参数量(容量)与单 token 计算量(成本)彻底解耦,使参数量可以极大而推理成本仍然很低(Mixtral 总 47B / 激活 13B,DeepSeek-V3 总 671B / 激活 37B)
  • 其核心难题是负载均衡,相关机制从辅助损失 $\alpha N\sum f_i P_i$、专家容量因子,发展到 DeepSeek-V3 仅作用于 top-$k$ 选择而不改动门控权重的无辅助损失偏置法
  • 训练稳定性则由 router z-loss 约束 logits 尺度加以保障
  • 架构上,细粒度专家加共享专家已成主流范式,而是否设置共享专家仍存分歧
  • 须牢记的工程结论是:MoE 降低算力而不降低显存,跨卡专家并行的 all-to-all 通信是主要系统瓶颈
  • 它是 2024 至 2026 年前沿大模型扩容的主流路线

上一节1.5 · 从零训一个 Transformer下一节1.7 · 现代 Transformer 架构本章总览第 1 章 · 大模型基础

参考文献#


  1. Shazeer et al. Outrageously Large Neural Networks: The Sparsely-Gated Mixture-of-Experts Layer. ICLR 2017. https://arxiv.org/abs/1701.06538 ↩︎ ↩︎

  2. Fedus, Zoph, Shazeer. Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity. 2021. https://arxiv.org/abs/2101.03961 ↩︎ ↩︎

  3. DeepSeek-AI. DeepSeek-V3 Technical Report(无辅助损失负载均衡、sigmoid 门控). 2024. https://arxiv.org/html/2412.19437v2 ↩︎ ↩︎ ↩︎ ↩︎

  4. DeepSeek-AI. DeepSeekMoE: Towards Ultimate Expert Specialization in Mixture-of-Experts Language Models(细粒度 + 共享专家). 2024. https://arxiv.org/html/2401.06066v1 ↩︎ ↩︎

  5. DeepSeek-AI. DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model. 2024. https://arxiv.org/pdf/2405.04434 ↩︎ ↩︎

  6. Zoph et al. ST-MoE: Designing Stable and Transferable Sparse Expert Models. 2022. https://arxiv.org/pdf/2202.08906 ↩︎ ↩︎

  7. RAM vs VRAM in Mixture of Experts Models: The Hidden Bottleneck(MoE 显存按总参数计). https://dypsis.ai/insights/moe-experts-ram ↩︎

  8. Lepikhin et al. GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding. 2020. https://arxiv.org/pdf/2006.16668 ↩︎ ↩︎

  9. Du et al. (Google). GLaM: Efficient Scaling of Language Models with Mixture-of-Experts. 2021. https://arxiv.org/abs/2112.06905 ↩︎

  10. Jiang et al. (Mistral AI). Mixtral of Experts. 2024. https://arxiv.org/abs/2401.04088 ↩︎ ↩︎

  11. Qwen Team. Qwen3-30B & Qwen3-235B MoE Models(128 专家 top-8、无共享专家). 2025. https://www.emergentmind.com/topics/qwen3-30b-and-qwen3-235b-models ↩︎ ↩︎

  12. Meta AI. The Llama 4 herd: The beginning of a new era of natively multimodal AI innovation. 2025. https://ai.meta.com/blog/llama-4-multimodal-intelligence/ ↩︎ ↩︎