首页优化地图方法索引基础概念
返回技术汇总表 ↗

M030 · 独立详解

MoE 专家布局与负载均衡:热门专家在哪里执行

保留逻辑路由结果,通过物理放置与兼容副本分流减少设备热点;同时检查通信与内存代价。

调度与并行通信与互联详解已编写
视频讲解待制作

这篇文章的小视频尚未制作;可以先阅读下方文字详解。

本页目录

01 · 不是每张卡上的专家都会同样忙

MoE层的router为每个token选择一个或多个专家,专家处理后按路由权重组合结果。Expert Parallelism把专家分布到不同设备,token要送到拥有相应专家的设备。若热门专家集中在一张卡,其余卡即使先算完,也可能等最慢一方返回结果。

专家数量均分不等于工作均分。一个专家接到80个token,另一个只接10个;各卡两名专家看似整齐,却可能很不均衡。布局优化关注物理分工;Grouped GEMM关注一张卡上的专家计算;二者不是同一个优化。

依据:DeepSeek · EPLB原作者专家复制与放置算法 ↗ · vLLM · Expert Parallel部署与EPLB ↗

02 · router到dispatch,再到combine

教学示意 · 不代表硬件实测
隐藏输入X
→ router给每token选 logical expert id 与 gate weight
→ 将逻辑专家映射到可用 physical replica / rank
→ 按目的rank与专家打包,dispatch传token表示及还原索引
→ 各专家执行MLP(可用Grouped GEMM等)
→ combine把贡献传回token归属并按gate加权
→ 得到原token顺序的输出

top-k时,一个token可能生成k份专家调用;统计“专家调用数”不能直接当成独立token数。通信通常搬隐藏向量和元数据,不是为每个token传整份专家权重。权重迁移发生在布局调整或副本准备时,是另一笔开销。

AlltoAll表达多目的交换语义;真实MoE常用变长计数与专门dispatch/combine实现,不要求每对设备发送相同长度。还原索引和gate必须随布局保留,否则结果会错位。

依据:DeepSeek · DeepEP dispatch/combine通信实现 ↗ · NCCL 2.32 · 集合通信操作与rank语义 ↗

03 · 逻辑专家与物理副本,先分清身份

逻辑专家E0是一组确定权重和计算功能;物理副本是这组权重在某设备上的存储。将E0放到另一卡,或新增兼容副本E0′,不应把router原来选E0的token改成E1。路由给哪个逻辑专家与由哪个物理副本执行,是两次不同选择。

策略改变什么是否需要重新评估模型语义
移动专家同逻辑专家换物理位置内容/版本/算子兼容时保持数学任务,注意数值与还原。
复制热门专家并分流一个逻辑专家由多个兼容副本承接推理可保留原路由与gate;权重必须一致。
改router或强制换专家token所选逻辑专家变了模型计算改变,需要质量与训练验证。
容量溢出时丢token部分专家贡献没有执行不能当成等价的纯系统提速。

本篇先用推理且专家独立确定计算的情况解释副本分流。训练还需合并同一逻辑专家各副本的梯度,并一致更新状态;有Dropout等随机操作时还要保持指定的随机语义。

依据:DeepSeek · EPLB原作者专家复制与放置算法 ↗ · DeepSeek-V3 Technical Report · MoE路由与训练 ↗

04 · 四专家、两卡:100/20怎样变为60/60

自设top-1批次共120个token,专家负载E0/E1/E2/E3=[80,20,10,10]。假设每次专家调用成本相同,卡内顺序执行,无通信和固定开销。原布局r0有E0/E1,负载100;r1有E2/E3,负载20。完成时间受最大负载100支配。

方案r0工作r1工作最大负载
原布局E0:80 + E1:20 = 100E2:10 + E3:10 = 20100
只调整放置E0:80 + E2:10 = 90E1:20 + E3:10 = 3090
复制E0并分流E0:40 + E1:20 = 60E0′:40 + E2:10 + E3:10 = 6060

第三种方案新增一份E0权重,分流后总调用数仍120。最大负载100→60不是实测1.67倍加速:搬运、重排、不同矩阵效率、布局更新与内存压力都未计。真实引擎可能要求每rank相同专家槽数,需额外槽或填充;本例允许两侧物理专家数不同。

保留逻辑专家,改变物理分工

E1/E2/E3固定20/10/10次;top-1、每次相同成本、各卡内顺序执行。新增E0副本自设256 MiB,无网络/迁移/填充开销;本例允许各rank专家数不同。

05 · 负载平衡之后,网络可能成为新瓶颈

token要从输入归属rank送到专家rank,再把结果送回。把专家移近常见来源可能少跨机,但让所有热点聚到同一张卡又会增加计算等待。布局要在设备负载、机间流量和副本容量之间取舍。

如果一个token选择两个远端专家,输入可能发送两份;是否合并同目的rank、是否有本地专家或共享专家、输出如何归并,都影响真实字节。不能简单用“token数×隐藏维度”代表全部MoE网络成本。

分层布局可以先把有共同路由约束的专家组放到同一节点,再在节点内分配副本与负载;是否适用取决于模型原有group-limited路由和网络。DeepSeek的EPLB提供分层与全局策略入口,不能直接套到任意router。

依据:DeepSeek · EPLB原作者专家复制与放置算法 ↗ · DeepSeek · DeepEP dispatch/combine通信实现 ↗

06 · 动态均衡为什么不宜每轮都搬专家

  • 统计每层各逻辑专家的调用数和实际耗时,必要时区分Prefill/Decode与业务类型。
  • 按历史窗口估计近期负载,并结合每卡内存、互联与专家槽约束生成新映射。
  • 预先装好新副本和必要元数据,在安全边界让后续批次使用新映射。
  • 保留旧映射/权重直到旧批次和通信结束,再回收;避免新旧结果混在同一代映射。

热门专家会随请求分布变化。重配过勤可能把时间花在权重传输,历史窗口过长又反应慢。可设置更新间隔、收益门槛与稳定策略,但这些是调度选择,不是算法保证。

一份专家权重若为256MiB,复制10份就是额外2.5GiB;多层累计还可能挤占Decode的KV预算。降低热点等待和可承载并发的变化必须一起评估。

依据:vLLM · Expert Parallel部署与EPLB ↗ · DeepSeek · EPLB原作者专家复制与放置算法 ↗

07 · 最小正确性模型与现成实现入口

教学示意 · 不代表硬件实测
logical_ids, gates = router(X)
physical_jobs = assign_compatible_replicas(logical_ids, map_version)
packed, restore_index = dispatch(X, physical_jobs)
contributions = run_experts(packed)
Y = combine(contributions, restore_index, gates)
# 每个(token, logical expert)贡献应恰好出现一次。

下方标准库脚本用小专家函数和top-2加权输出,比较原布局、移动专家和复制分流。另做错gate与漏贡献的反例;它验证输出身份和还原,不模拟网络或设备性能。

阅读vLLM时可从EP部署、EPLB配置和专家映射进入;enable_eplb与冗余专家数需要匹配版本和内存约束。DeepEP提供高吞吐/低延迟dispatch与combine通路,优化通信;仅启用更快通信不自动决定最佳专家放置。

依据:vLLM · Expert Parallel部署与EPLB ↗ · DeepSeek · EPLB原作者专家复制与放置算法 ↗ · DeepSeek · DeepEP dispatch/combine通信实现 ↗

08 · 训练副本需要梯度和更新的一致性

如果同逻辑专家副本分别处理不同token,它们产生的是该专家梯度的不同贡献。训练要按既定Loss归一化合并这些贡献,确保参数更新及优化器状态一致;不能各副本独立optimizer.step后仍声称是同一专家。

训练router的负载均衡Loss、偏置调整等会改变训练规则,与运行时重放置是不同维度。冻结router做布局对照,才能分清省下的是物理等待,还是改变了路由目标或训练质量。不同训练框架是否支持专家副本需单独核对。

依据:DeepSeek-V3 Technical Report · MoE路由与训练 ↗

09 · 不只看平均均衡率

层面观察什么
语义逻辑专家/权重版本、token索引、gate、贡献次数;训练再比梯度和更新。
计算各rank真实专家时间、最大等待、Grouped GEMM形状与填充。
网络每对rank/节点的字节、dispatch/combine时间、共同链路拥塞。
容量副本权重、暂存、旧映射驻留与剩余KV预算。
服务/训练相同资源下吞吐、TTFT/TPOT/step及质量,而非只比平均专家调用数。

各卡调用数相同也可能耗时不同:dtype、专家形状、批量与设备能力影响效率。跨节点布局还要记录网络距离;单层均衡指标不能代替端到端评估。

10 · 平台对照与自查

专家放置与副本逻辑可用于不同平台,但实际token分发、Grouped GEMM、映射切换与通信后端各自实现。NVIDIA路径可读vLLM EP、DeepEP;昇腾先查引擎专家并行支持,再核对HCCL变长交换及配套MoE算子。不能把CUDA通信库直接当作NPU可运行代码。

依据:vLLM Ascend · 支持功能矩阵(main) ↗ · CANN 8.2.RC1 · HCCL通信域与分层算法 ↗ · DeepSeek · DeepEP dispatch/combine通信实现 ↗

  • 复制E0后,router所选逻辑专家和gate需要改变吗?
  • 若E0两份副本权重版本不同,负载60/60能否说明优化成功?
  • 新增副本让KV容量少了2.5GiB,服务吞吐为什么可能下降?

流程位置与关联方法

这个方法可能出现在多个位置;计算线包含模型计算与算子实现,执行线包含运行时、内存和通信。

资料与核查范围

原理依据以原始论文和官方文档为主;算例与时间线是教学推导。文档核查日期:2026-10-10。引用 main / latest 文档时,实际接口以安装版本为准。

代码为接入片段或教学伪代码;本页没有声称完成 NVIDIA / 昇腾硬件实测。

← 返回总表中的 M030继续阅读:多 LoRA 服务与适配器合并 →
AI Infra 知识库 · 总览 → 独立讲解网站更新 2026-10-08
搜索知识库

搜索方法与基础概念 · Esc 关闭