MoE通过稀疏激活降低每个token的计算量,但增加了服务系统的复杂度。本文跟随一个Token走完路由、分发、专家计算到合并和多机放置的整条路径,覆盖专家并行、分组GEMM、拓扑感知放置、内存需求、推理优化等关键内容,并探讨延迟与吞吐的权衡。从稠密模型到MoE服务的转变,路由器为每个token打分,只有被选中的专家才执行计算。文章深入分析了MoE层的结构与token路由、批次如何变成各专家专属的矩阵、单机MoE执行流水线、模型权重的驻留与运行时内存、专家并行的分发与合并、网络拓扑与专家放置、张量并行、专家并行与数据并行的执行布局、专家负载不均衡与rank级尾延迟、推理优化与模型正确性的边界、基准测试设计与瓶颈诊断等关键点,为读者提供了全面的MoE服务优化指南。
跟随一个Token走完从路由、分发、专家计算到合并和多机放置的整条路径。本文内容覆盖专家并行、分组GEMM、拓扑感知的放置、内存需求、推理优化,以及决定延迟与吞吐的各种取舍。
从稠密模型到MoE服务
稠密Transformer对每个token都套用同一个前馈网络。批处理改变的是输入矩阵的维度,而不是哪些权重会被执行。
MoE层把这个前馈网络换成多个专家。路由器会为每个token给这些专家打分。只有被选中的专家才为该token执行计算。这样每个token消耗的专家计算量就降下来了。不过路由本身并不能决定下一个Token需要哪些权重,所以推理服务仍然要为每一个可能被选中的专家留出位置。
以Qwen3-30B-A3B为例:总参数305亿,激活参数33亿。每个token从128个路由专家中选8个。
服务器依然要提供完整的模型。它需要注意力权重、词嵌入、专家权重、临时缓冲区,以及不断增长的KV缓存。33亿这个数字大致描述的是活跃计算量,它并不代表这次部署的内存占用,也不代表专家权重本身。
激活参数量估算的是一个token走过的执行路径。常驻参数量才决定这次部署需要多少权重内存。
MoE层的结构与token路由
Transformer层在做前馈计算之前先做注意力。注意力在token位置之间混合信息。前馈网络随后独立地变换每个token位置。
MoE层把一个稠密前馈网络换成多个专家。每个专家本身就是一个独立的前馈网络。
注意力仍然要处理每一个token。路由器只控制专家这一条分支。所以专家侧的稀疏激活并不会让注意力路径也变稀疏。
先看一个只有四个专家的示意层。路由器会为某个token向量给每个专家打分,该层挑出得分最高的两个专家。
这两个专家各自独立处理同一个token向量,该层再把它们的输出合并起来。各自的贡献由模型自己的路由权重决定。
加权后的专家输出可以写成下面这样。
其中:
x是这个token的输入向量。
S(x) 是它被选中的专家集合。
E_e是专家e,w_e(x) 是它的路由权重。
输出向量是y。
求和只覆盖被选中的专家。每个专家都在变换同一个输入向量,它的路由权重在相加之前缩放该专家的贡献。
路由器挑出若干个专家函数,该层对它们的输出做加权求和。不同架构对这些权重采用不同的归一化规则。
token到专家的路由发生在每个MoE层内部。这和整个请求层面的模型路由不是一回事,后者会为整个请求挑一个LLM。
为了读起来简单,这个玩具层用top-two路由。Qwen3-30B-A3B则是每个token从128个专家里选8个。它的模型卡还写明共有48层。
有些架构里还有共享专家。这类专家不看路由器打分,每个token都要经过它们。DeepSeekMoE就在路由专家之外另设了隔离的共享专家。
共享专家对每个token都执行,路由专家只在被选中时执行。只有设计上就带共享专家的模型才有这种划分。
不要假设每个模型都有共享专家。先去看它的架构和推理服务实现。
路由器改变了每个MoE层内部的前馈计算。批量推理因此要调度大量的token与专家配对,而每个配对的去向专家和矩阵大小都不一样。
一个批次如何变成各专家专属的矩阵
路由器要为每个token做一次决策。GPU没办法一次只高效地跑一个极小的专家运算,所以推理服务会把路由决策整理成更大的、按专家分组的矩阵。
假设四个token进入一个四专家、top-two路由的层。路由器的选择是:
T1选中E1,权重0.7;选中E3,权重0.3。
T2选中E1,权重0.4;选中E3,权重0.6。
T3选中E1,权重0.7;选中E2,权重0.3。
T4选中E2,权重0.8;选中E4,权重0.2。
运行时手上现在有八个分配项,而不是四个。每个分配项包含三样东西:token向量、被选中的专家、以及路由权重。
运行时按专家把这些分配项分组。E1收到T1、T2、T3;E2收到T3、T4;E3收到T1、T2;E4收到T4。这些分组分别变成三行、两行、两行、一行的矩阵。
每个专家处理自己的矩阵。运行时会在每一行旁边保留原始token ID,用它记录每个结果该回到哪里。
T1会从E1拿到一个结果,从E3拿到另一个结果。
运行时把它们分别乘以0.7和0.3。
再把两份贡献相加,就得到T1最终的专家输出。
每个token都要走同样的合并步骤。
这个分组的步骤叫分发,返回的步骤叫合并,两者都在同一块GPU内完成。多块GPU会在它们之间再加一层网络传输。
一个专家批次统计的是分配项数量,而不是不同的源token数。用top-two路由时,每个token都会在专家矩阵里贡献两行。
预填充一次处理很多提示词token,所以专家拿到的矩阵行数可以很多。矩阵越大,GPU通常利用得越充分。
解码则为每个活跃请求新增一个token。并发低的时候,某个专家可能只有一两行,为这么点活儿启动一次矩阵内核是在浪费GPU算力。
并发更高时,每一步产生的分配项更多。分组通用矩阵乘法,也就是分组GEMM,能在一次启动里跑完多个专家矩阵。即使行数各不相同,它也能减少启动开销。
有些引擎会把专家矩阵填充到固定尺寸。固定形状让内核更容易调度,代价是要在没有token的填充行上白算一遍。
预填充和解码没有固定的性能画像。提示词长度和请求数量会改变它们的专家矩阵大小,隐藏层宽度和硬件则决定这些矩阵跑得有多高效。
分组GEMM能把已有的专家工作打包成更少的启动次数,但它没法为没收到token的专家凭空造出工作。
小结:路由产生分配项,分发把它们整理成专家矩阵,合并把结果送回原来的token。下一节跟着这些矩阵走一遍单块GPU里的流程。
单机MoE执行流水线
MoE层要做的事远不止专家矩阵乘法。它还要挑专家、重排token行、执行专家、再把token顺序还原回来,每个阶段都可能吃掉可观的时间。
路由器先为每个候选专家生成一个分数。top-k操作留下被选中的专家索引及其权重。运行时随后重排token行,让每个专家拿到一块连续矩阵。
这个重排叫置换。它读取token向量,再按专家顺序写出去,同时记下一份逆映射供合并步骤使用。解码批次很小时,搬行花掉的时间和乘法本身差不多。
分组GEMM在一次内核启动里执行多个专家矩阵,这些矩阵的行数可以不同。分组只减少启动次数,不改变矩阵内容。
接下来专家做自己的激活和输出投影。运行时用逆映射把token顺序还原,应用路由权重,并把相同token ID的贡献累加起来。
分组GEMM不改变分配项的数量,它只是用更少的启动次数执行已有的专家批次。
内核融合把原本要分开启动的算子合成一个。融合路径可以不必把中间激活值写回显存,因此既省启动开销,也省显存带宽。
融合是有条件的。一个内核可能只支持特定数据类型、批次形状或量化格式,不受支持的组合只能退回更模块化的路径。
激活量化又带来一个选择:运行时可以在分发之前先量化,发出去的就是更少的字节;也可以按更高精度分发,等专家计算之前再量化。前者省带宽,但把转换的工作提前了。
解码通常只给每个专家一个小矩阵,此时权重读取、搬行和内核启动会占大头。预填充给的行数通常更多,矩阵效率因此变得更要紧。
融合路径消除了算子之间那些受支持的边界。它不会增大专家批次,也不会改变路由器的选择或分配项数量。
把路由、置换、专家GEMM和合并分开来测。只测一个合并后的MoE总耗时,定位不出到底是哪一段慢。
小结:专家GEMM只是单机执行的一部分。批次很小时,搬运和启动的开销往往就露出来了。
模型权重的驻留与运行时内存
MoE部署涉及三种不同的参数量。总参数量描述检查点,激活参数量描述一个token的执行路径,常驻参数量描述推理服务当前可用的权重。
这几个数字不必一致。一个token只碰到一小部分专家,下一个token可能选到另一批。
全量常驻的部署要把每个可选的专家都留在它的GPU上,此外还要存注意力、词嵌入、归一化和输出权重。稀疏路由并不会让其中任何一项权重消失。
把Qwen3-30B-A3B的305亿参数按每个2字节存下来,光权重就需要大约610亿字节,也就是61 GB,按二进制算约合56.8 GiB。
下面的表达式给出权重存储的下界。
B(weights) 是存储权重所占的字节数。
P是总参数量。
B(stored) 是每个被存储的参数占用的字节数。
这个表达式把参数量乘以每参数字节数。代入Qwen的数字,得到610亿字节。按十进制换算成GB就是除以十亿。这个结果只覆盖权重。
部署还需要临时的激活值和通信缓冲区,内存分配器也要预留额外空间,而KV缓存要为活跃序列保存注意力状态。这些都没有算进那61 GB里。
做这个估算时绝不能用33亿去替换305亿。激活参数量决定不了检查点里存了多少字节的权重。
权重量化让每个参数用更少的字节存储,权重分片把权重摊到多块GPU上。两者都不改变检查点里有多少参数。
稀疏激活减少了专家计算,却不减少权重的总存储。即便活跃FLOPs不算大,模型仍然可能需要权重分片。
专家卸载把一部分专家留在CPU内存里。路由选中它时,运行时再把它搬到某块GPU上。这省下了显存,代价是多了一条更慢的搬运路径。
某个专家不在显存里时,它的权重搬运会让解码停在原地。同一个专家被反复选中时,缓存能帮上忙。只有未来的选择可预测时,预取才有意义。
这些数字并不隐含一个固定的GPU数量。精度、分片、预留内存和KV容量都会改变答案。
小结:激活参数量估算计算量,常驻参数量决定权重内存。分片通过摊开权重解决容量问题,但被路由到的激活值从此要在GPU之间来回走。
专家并行的分发与合并
专家并行把不同的专家分配到不同的GPU上。设想四个专家、两块GPU:GPU A持有E1和E2,GPU B持有E3和E4。
一个token从GPU A出发,选中了E1和E3。它的E1分配项留在GPU A,E3分配项必须走到GPU B。
网络记录里带着token向量和路由元数据。元数据标明这个token、目标专家、来源GPU和路由权重。目标端要靠这些字段才能把结果正确送回去。
每块GPU把本地的和收到的分配项按专家分组,为每个活跃的本地专家执行一个矩阵。远程结果随后走回各自的来源GPU。
来源GPU用存下来的标识恢复token顺序,应用每个路由权重,把匹配的贡献相加,至此完成合并。
GPU数量一多,每块GPU可能同时向多个对端发送分配项,这就形成了all-to-all的通信模式。合并则在计算完成后把专家结果发回去。
专家权重通常留在被分配到的GPU上。网络搬的是token激活值和元数据,而不是专家权重。填充和临时缓冲区会增加实际传输的字节数。
下面这个上界用来估算分发阶段的激活负载。
B(dispatch) 是分发出去的激活负载。
T是进入这个MoE层的token数。
K是每个token选中的专家数。
H是隐藏层宽度。
最后,b是每个激活值占用的字节数。
这个乘积按每个分配项算一个完整的隐藏向量,是不考虑局部性时的上界。留在同一块GPU上的分配项不消耗网络带宽。
真实流量取决于有多少分配项是远程的。元数据和填充会增加字节数,专家副本能让一部分分配项留在本地,合并还会在返回方向上再加一份流量。
这个估算只覆盖激活负载,不含协议开销;在没有拓扑和消息大小测量的情况下,也预测不了延迟。
每个MoE层都要重复一次这样的交换。很小的分发延迟在整个模型里会累积起来。有可独立计算的任务时,重叠能把一部分延迟藏起来。
DeepEP为大批次和小批次提供了分离的通信路径。它的吞吐路径面向较大的传输量,低延迟路径面向启动时间更关键的解码步骤。
内核带宽不等于端到端的服务速度。一个完整请求还包括注意力、调度、采样、缓存操作,以及模型里的每一层。
小结:专家并行让权重原地不动,只搬运分配项。它提升了分布式的权重容量,代价是反复出现的激活流量。
网络拓扑与专家放置
并不是每条GPU链路的成本都一样。同一台服务器内的GPU可能走NVLink或NVSwitch,不同服务器的GPU之间可能走InfiniBand或以太网。
跨服务器传输通常比服务器内传输更贵。专家放置决定每个专家存在哪块GPU上,这个选择决定了路由有多频繁地跨过较慢的链路。
一种常见布局是把频繁出现的专家流量留在NVLink域内,另一种并行布局则把各层分散到多台服务器。哪种边界更合适取决于模型和集群。
放置在不改变路由器输出的前提下改变物理去向。经常被选中的专家可以挪到更靠近它token来源的位置,运行时也可以为一个逻辑专家建几个物理副本。
路由约束是另一回事,因为它限制的是模型的选择。DeepSeek-V3用节点受限路由:每个token只能到达有限几个节点上的专家。这条规则属于训练出来的架构。
节点受限路由是那个模型训练架构的一部分。训练之后再补上类似的限制,可能会改变被选中的专家和模型质量。
做放置需要路由轨迹和拓扑测量。路由轨迹显示哪些专家接到了工作,拓扑测量显示每个目的地的成本。只看专家热度是看不出链路成本的。
把热门专家放在一起可能减少网络流量,也可能让某台服务器过载。分散开会平衡计算,但可能增加跨服务器流量。只有在还有空闲显存时,副本才有帮助。
按通信域分别测字节数和时间。一个集群级的流量计数器分不出廉价的节点内搬运和昂贵的跨节点搬运。还要记录是哪些专家对产生了这些流量,因为放置需要有稳定的模式才能利用。
小结:放置想把频繁流量留在快速链路上,同时又必须把工作摊到多块GPU上。路由轨迹能说明某种布局能否同时满足这两个目标。
最后
当下AI大模型是当下实打实的优质风口,岗位缺口大、发展前景广、薪资待遇突出,对比内卷严重、涨薪晋升困难的传统技术岗,是普通人转行逆袭的绝佳选择。
但很多想要入局大模型领域的朋友,都面临无系统学习路径、无实战资源、求职无方向的难题,一个人硬啃最容易走弯路、浪费大量时间精力。这里我结合多年一线实战与教学经验,整理出一套零基础大模型专属资料,包含:
- 系统化学习路线图(零基础到精通)
- 大模型学习书籍 & 文档(电子版)
- 2026 最新行业报告
- 项目实战 & 配套源码
- 大厂面试真题
需要的朋友,微信扫描下方 CSDN 官方认证二维码免费领取,保证 100% 免费。
👇👇扫码免费领取全部内容👇👇
下面简单介绍一下资料包含的内容:
1、大模型系统化学习路线图
专属定制从零基础入门到企业级实战的全阶段学习体系,划分清晰的四大学习阶段,规避碎片化学习弊端,适配新手
2、0基础到进阶视频教程
配套完整高清实操教程,覆盖Prompt提示工程、RAG知识库搭建、Agent智能体开发、模型微调、部署落地等核心知识点,所有课程搭配实操演示,零基础也能轻松看懂、上手实操。
3、大模型学习书籍 & 文档
汇总30+本行业经典AI、大模型、深度学习精选书籍,涵盖理论原理、开发实战、算法基础、AI产品思维等各类内容
4、AI大模型最新行业报告
整理2024-2026年最新大模型行业白皮书、市场分析报告,清晰展现行业发展趋势、技术迭代方向、岗位需求变化,帮助学习者精准把握行业风口,找准学习和就业方向
5、大厂面试真题
汇总了常见的AI大模型面试问题、知识点梳理和面经参考,方便求职时针对性准备。
6、大模型项目实战 & 配套源码
包含GPT应用开发、RAG私有知识库、智能问答系统等多个企业级实战项目,配套完整可运行源码,从简易Demo到完整商业应用全覆盖,帮助学习者将理论转化为落地实战能力,积累项目经验。
7、适合谁学?
- 传统后端 / Java / 前端开发,想转型 AI 应用
- 大学生、应届生,想拿更好的 offer
- 产品经理、运营,想武装职业竞争力
- 技术负责人,想给团队落地提效
学习是反人性的,但回报是真金白银。技术会更新,赛道会切换,但只要你先动手,机会就永远站在你这边。
8、这些资料真的有用吗?
这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
想要入局AI大模型赛道、抢占行业红利的朋友,微信扫描下方CSDN官方认证二维码,即可100%免费领取全套学习资料!