MoE 服务的专家并行性
专家并行性将专家混合模型的许多前馈“专家”拆分到不同的 GPU 上,因此每个设备仅保存一部分参数。
概述
It is the key to serving trillion-parameter MoE models cheaply, since only a few experts run per token.
深入探讨
专家混合 (MoE) 层用许多较小的网络(专家)取代一个大型前馈网络,再加上一个为每个代币挑选前 k 个(通常是 1 或 2 个)专家的路由器。专家并行 (EP) 将不同的专家置于不同的 GPU 上。在推理时,路由器决定每个令牌需要哪些专家,然后全对所有通信步骤将令牌洗牌到保存其所选专家的 GPU,运行 FFN,并将结果洗牌回来。这使得模型具有巨大的总参数(稀疏),同时仅激活每个令牌的一小部分(低失败率)。 Mixtral 8x7B、DeepSeek-V3 和 GPT-OSS 等模型都使用它。困难的部分是专家之间的负载平衡以及每层两个昂贵的全对全跳跃。
技术洞察
核心机制是每个 MoE 层两个全面的集体:调度(将代币发送给专家)和组合(收集输出)。由于路由依赖于数据,因此到达每个专家的令牌数量各不相同,从而导致负载不平衡和“落后者”。服务系统添加容量因子、专家缓冲区以及令牌丢弃或填充,以保持 GEMM(矩阵乘法)统一,并且通常将全面通信与专家计算重叠以隐藏延迟。
战略影响
成本与预算
多年来,架构决策决定着性能和运营成本。
更清晰的判决
技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。
质量控制
更好的工程选择可以减少生产中的可靠性事故。
MoE 服务专家并行的未来
预计路由和硬件将实现更紧密的协同设计:融合调度-计算-组合内核、可批量处理许多专家的分组 GEMM,以及支持 NVLink/InfiniBand 的全能型。 DeepSeek 的辅助无损平衡和节点限制路由等技术减少了跨节点流量。分解服务将专用于与注意力 GPU 分开的“专家”GPU,并且具有更精细的 top-k 的更大专家数量(数百个)将推动 MoE 走向极端稀疏,同时保持每个代币成本平坦。
现实世界的实施
通过在每台设备上放置 8 个专家中的 2-4 个,跨 2-4 个 GPU 提供 Mixtral 8x7B 服务
DeepSeek-V3 使用节点限制路由来限制代币专家跨越的节点数量,从而减少节点间的全对全
使用 vLLM 或 SGLang 专家并行模式在单个 8-GPU 节点上托管 200B+ 稀疏模型
在混合 EP+TP 部署中将注意力层上的专家并行性与张量并行性相结合
风险与防护栏
优化一项基准测试可以隐藏更广泛的系统弱点。
基础设施和维护成本常常被低估。
随着系统变得更加复杂,安全性和可观察性差距可能会扩大。
实施路线图
在实施之前定义延迟、质量和成本目标。
在实际负载和数据条件下进行基准测试。
仪器监控错误、漂移和用户影响。
在扩展之前准备回滚和事件响应路径。
不断探索
Free newsletter
Get the daily AI briefing
Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.
One email each weekday. Unsubscribe in one click. We never sell or share your address.
Test yourself
Take the Expert Parallelism for MoE Serving quiz
Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.
Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation
常见问题
What is Expert Parallelism for MoE Serving?
专家并行性将专家混合模型的许多前馈“专家”拆分到不同的 GPU 上,因此每个设备仅保存一部分参数。这是以低成本服务万亿参数 MoE 模型的关键,因为每个代币只有少数专家运行。
专家并行在 GPU 上的分布是什么?
专家并行性将不同的专家(MoE 层的 FFN 子网络)放置在不同的 GPU 上,因此每个设备仅包含专家的子集。
哪种通信模式对于 MoE 专家并行性至关重要?
每个 MoE 层通常需要一个 all-to-all 来将代币分发给其专家,并需要另一个 all-to-all 将输出合并回来。
尽管总参数巨大,为什么 MoE 仍保持每个代币的计算量较低?
路由器仅激活每个令牌的前 k 个专家(通常是 1-2 个),因此即使模型总共有许多专家,FLOP 仍然很小。
由于路由依赖于数据会产生什么问题?
由于路由器的选择取决于输入,因此某些专家会比其他专家收到更多的令牌,从而造成负载不平衡和落后者。
保持专家矩阵乘法大小一致的常用技术是什么?
服务堆栈设置每个专家的容量(最大令牌计数)并在其之外填充或删除令牌,以便每个专家的 GEMM 具有可预测的形状。