MoE原理:总参数与激活参数

黎 浩然/ 11 10 月, 2026/ 大语言模型/LARGELANGUAGEMODEL/LLM, 机器学习/MACHINELEARNING, 研究生/POSTGRADUATE, 计算机/COMPUTER/ 0 comments

看到MoE模型的“总参数”和“激活参数”,首先要问统计口径。总参数描述模型保存了多少权重;激活参数通常描述处理一个token时涉及的权重子集。后一项较小,不等于其余专家可以从内存里永久删掉,也不等于同参数量的稠密模型有完全相同的速度。

文章目录
  1. 先用一个虚构模型算清楚
  2. 稀疏的是调用,不是把专家变成零
  3. 一个批次为什么会挤到同一个专家
  4. 参数比不能当成速度比
  5. 比较部署时,保留这些测量条件
  6. 资料来源

先用一个虚构模型算清楚

假设模型有2亿共享参数,此外有8个互不共享权重的专家,每个专家1亿参数。路由器每个token选择2个专家,所有共享参数都参与这条计算路径;路由器本身已算在共享部分。于是:

总参数 = 2亿 + 8 × 1亿 = 10亿
单token涉及参数 = 2亿 + 2 × 1亿 = 4亿
保存的参数: 10亿

单token涉及的参数: 4亿

原创参数量示意:共享2亿、8个专家各1亿、每token选2个;条形表示参数数量,不表示速度或实测显存。

这个简化例子假设只统计一组专家,并忽略参数复用的计数细节。真实模型可能有多层专家、共享专家和不同大小的模块,应逐层加总并阅读模型说明,不能把这个公式直接套进所有模型。

如果这10亿参数全部用16位紧凑保存,原始权重占2×10⁹字节,也就是2 GB;4亿是每token涉及的参数数量,并不能据此把整套权重预算改成0.8 GB。这里没有计算任何元数据、缓存或运行工作区。

稀疏的是调用,不是把专家变成零

在稀疏MoE层,路由器根据token表示选择专家。不同token可能选不同专家;一个批次合起来甚至能用到全部专家。未被某个token选中的权重仍是模型的一部分。

Switch Transformer原始预印本于2021年公开,2022年发表在同行评审期刊JMLR。它采用每token选一个专家的Switch路由。本文的top-2仅是原创计数示例,不是对该论文配置或实验的复现。

专家在部署时可以分布到不同设备,也可以采用其他存储安排;本地是否常驻全部权重,必须看具体服务。把权重放到别处并没有让它们消失,还需要考虑读取、传输与调度的成本。

一个批次为什么会挤到同一个专家

下面为8个虚构token指定top-2路由。总分派量是8×2=16次,8个专家平均各2次,但最忙的专家实际收到7次。所有专家都被至少一个token触及。这同时说明“单token激活少”和“整批负载均衡”不是同一件事。

from collections import Counter

shared, per_expert, experts, top_k = 200, 100, 8, 2  # millions
assert 1 <= top_k <= experts
total = shared + experts * per_expert
active = shared + top_k * per_expert
assert (total, active) == (1000, 400)
print("total / active per token:", total, active, "million")

# Invented routing decisions: eight tokens, two experts per token.
routes = [(0,1), (0,2), (0,3), (0,4),
          (0,5), (0,6), (0,7), (1,2)]
load = Counter(e for route in routes for e in route)
counts = [load[e] for e in range(experts)]
assert sum(counts) == len(routes) * top_k == 16
assert counts == [7,2,2,1,1,1,1,1]
assert len(load) == experts
print("assignments per expert:", counts)
print("mean / peak:", sum(counts)/experts, max(counts))

代码已执行并核对参数总量、每token计数、总分派量、各专家负载和专家覆盖范围。它没有学习路由器、调用LLM或计时。这里的“分派一次”也不代表真实GPU上相等的耗时。

假设另一个理想批次中,每个专家恰好分到2次任务,两批的总分派量可以一样,但瓶颈不同。真实执行还涉及分组、批量矩阵乘法、通信及不同设备速度,不能仅用平均负载预测延迟。

参数比不能当成速度比

本例单token参数计数是总量的40%,但不能宣称因此只需40%的推理时间。共享部分、注意力、路由、数据搬运和专家计算各有开销。专家并行也可能让一个设备等待另一个设备完成。

数字 能回答的问题 不能单独回答的问题
总参数 权重存储的基础规模 推理峰值显存
激活参数 约定口径下的单token权重子集 端到端耗时与质量
专家分派量 路由任务数量 实际通信与计算时间

Switch论文讨论了通信、负载及训练稳定性。本文不引用其中的加速倍数;论文在特定训练与硬件设置下报告的成绩,不应变成任意MoE推理服务的承诺。

比较部署时,保留这些测量条件

可以先记录总参数与激活参数的定义、专家数、每token选择数、权重精度和设备分布,再用相同输入输出长度及并发测试。测量峰值内存、完成吞吐、首token延迟和后续生成间隔,保留任务质量结果。

量化位宽影响权重表示;GQA改变KV共享结构;MoE讨论不同token选择哪些专家。把三种机制分开看,才不会拿一个较小的“激活参数”数字代替完整部署预算。

English version

资料来源

Switch Transformers, JMLR 2022; 论文原文; arXiv submission history.

支持

如果这篇文章对你有帮助,欢迎支持本站。

微信支持二维码,点击查看大图
微信
支付宝支持二维码,点击查看大图
支付宝
Buy Me a Coffee,点击支持本站
Buy Me a Coffee

二维码可点击放大。更多支持方式见支持页面。

Share this Post

Leave a Comment

您的邮箱地址不会被公开。 必填项已用 * 标注

*
*