跳转至

EP负载不均

问题背景

MoE模型推理时,EP并行会把专家分布到不同Rank或Device上。请求经过路由后,如果少数专家被持续命中,对应Rank就会承担更多GroupedMatmul计算和dispatch/combine通信,形成慢卡,进而拉高整个MoE层耗时。

问题来源

推理

问题现象

用户通常先看到DeepSeek等MoE模型吞吐低于预期,decode耗时或端到端时延升高。进一步观察MoE相关指标时,可能出现:

  • 某些Expert热点明显高于同层其他Expert。
  • 某些Rank在多个Layer上持续承接更高专家负载。
  • EPLB更新后热点没有明显收敛。
  • MoE层耗时升高,并伴随某些Rank/Device执行时间更长。

定位过程

步骤 1:先确认性能问题发生在MoE相关阶段

先确认用户侧吞吐下降或时延升高是否与MoE层执行耗时、decode阶段耗时同步。如果整体性能稳定,仅专家热点短时波动,一般不直接判定为EP故障。

如果decode耗时升高,同时MoE算子或MoE通信阶段变慢,再继续看专家负载。

步骤 2:判断是否存在持续专家热点

在Grafana的EPLB或专家热点面板中查看聚合热点指标,确认是不是少数专家长期更热:

  • eplb:expert_hotness:current_max是否长期明显高于current_mean
  • eplb:expert_hotness:imbalance是否持续偏高。
  • 热点是否只在短时间出现,还是跨多个窗口持续存在。

这里的目标只是回答“有没有持续不均”。如果只有瞬时尖峰,而吞吐和时延没有同步恶化,可以先作为业务输入波动观察。

步骤 3:定位具体热点Layer、Rank和Expert

确认存在持续不均后,在逐层专家明细面板中继续定位热点位置:

  • 找到哪个Layer下的Expert命中次数或hotness明显更高。
  • 看热点Expert是否集中在同一个Rank或少数Rank上。
  • 看同一个Rank是否在多个Layer上都承担更高热点。

如果热点分散在多个Rank,影响可能有限;如果热点集中在少数Rank,才更容易形成EP慢卡。

步骤 4:判断EPLB是否生效

结合Grafana中的EPLB更新前后热点分布、EPLB配置和服务启动参数判断负载均衡是否生效:

  • 如果更新后update_max / update_mean下降,imbalance下降,通常表示EPLB对热点有缓解。
  • 如果更新后热点仍集中在同一批Expert或Rank,需要结合EPLB配置、专家映射配置和请求输入分布继续排查。
  • 如果EPLB更新本身耗时过高,还要判断更新开销是否抵消了均衡收益。

这一步决定后续是调EPLB参数,还是排查专家映射配置、业务输入分布或路由策略。

步骤 5:用离线Profiler确认热点是否形成慢卡

在线指标能说明“哪个专家热”,但还需要用msServiceProfiler补充采集MoE相关算子和通信数据,确认热点是否已经拖慢执行:

  • 对比各Rank/Device的GroupedMatmul耗时,确认热点Rank是否计算更慢。
  • 查看MoeDistributeDispatch、MoeDistributeCombine耗时,确认通信是否因热点放大。
  • 在trace中看MoE层是否存在少数Rank执行更久、其他Rank等待同步的现象。

如果热点Expert、热点Rank和慢算子/慢通信出现在同一时间窗口,才能把根因收敛为EP负载不均。

问题根因

EP专家负载分配不均,少数Expert或Rank持续承接更高请求负载,并进一步造成MoE计算或通信慢卡。常见根因包括业务输入分布集中、EPLB未开启或参数不合理、专家映射不均、热点专家集中放置,以及个别Rank/Device执行能力异常。

解决方法

  • EPLB未开启或不生效:开启EPLB,调整更新周期、窗口长度、迁移阈值或专家重映射策略。
  • 热点专家集中在少数Rank:调整专家放置或映射,让热点Expert分散到更多Rank。
  • 输入分布导致路由集中:结合请求日志或压测数据集分析业务请求类型,必要时做流量分组或输入分布隔离。
  • 通信放大:检查dispatch/combine通信耗时,优化并行配置或通信路径,避免热点Rank同时承担更高计算和通信。
  • 个别Rank异常慢:先排查设备状态、进程负载和算子执行异常,避免把设备问题误判为路由不均。

处理后需要观察热点分布是否收敛,MoE算子/通信耗时是否下降,decode时延和吞吐是否恢复。

定位方法论总结

针对EP负载不均场景,需要优先使用ms-service-metric观察MoE相关耗时、专家热点分布和EPLB更新前后是否收敛,先确认是否存在持续热点Expert或热点Rank;确认热点后,再使用msServiceProfiler采集MoE算子和通信数据,对比GroupedMatmul、dispatch/combine等耗时,判断热点是否真实形成慢卡,避免把短时输入波动或单个设备异常误判为EP负载不均。

对工具的改进建议

ms-service-metric

当前在线监控已能查看EPLB更新前后热点分布和专家热点指标。建议增加Layer、Rank、Expert维度的热点Top列表,直接展示热点Expert是否集中在少数Rank上。

msServiceProfiler

当前Profiler已能通过MoE算子和通信耗时确认热点是否形成慢卡。建议在离线报告中增加“热点Expert -> Rank/Device -> MoE算子耗时”的关联视图。