☯️ Deepseek EPLB Note
type
status
date
slug
summary
tags
category
icon
password
AI summary
个人理解EPLB的一些笔记。
参考文献
问题描述
专家并行时,如何决定将那个专家放到哪张卡上。
考虑DeepSeek的EP,总共256个路由专家,1个共享专家.
prefill时,EP32, 256/32 = 8, 每张卡放8个路由专家, 共享专家在所有卡上都复制一份,单卡总共9个专家。
decode时,EP144, 每张卡只放2个路由专家和一个共享专家,总共有 144 * 2-256 = 32个来放冗余路由专家。
需要解决的问题:
- 怎么决定对哪些专家进行冗余?
- 冗余多少份?
- 对于任意一个专家,应该放在哪张卡上?
EPLB 就是在解决上述问题。
Expert Parallelism Load Balancer
假定我们依据历史数据,得到了各个专家的历史负载情况, 表示专家i,总共承载的token数。
逻辑专家:指模型中的256路由专家 + 1共享专家
物理专家:指经过冗余后实际部署到GPU上的专家, 数量大于 256 + 1
Decode

v3 report中,Decode时,每张卡都只放一个专家,且卡间直接通过IB通信,这里应该对应了DeepEP的 Low-latency kernels with pure RDMA. 总共320张卡,其中64张卡用来放冗余专家和共享专家。
在DeepSeek-V3 / R1 推理系统概览中的版本为:
Decode:路由专家 EP144、MLA 和共享专家 DP144,一个部署单元是 18 节点,32 个冗余路由专家,每张卡 2 个路由专家和 1 个共享专家
简单起见, 下面还是按照每张卡只放一个专家来讲。
假设总共n个专家,m张卡(m>n),每张卡只放一个专家。 代表第i张卡上面放的物理专家需要承载的token数, 有:
选择专家i,冗余x份, 总共(x+1)个物理专家, 则一个物理专家的权重为:
最终目标就是找到一个方案,使得: 最小,即负载最高的那张卡,负载尽量小。
算法流程
对应的函数为:
replicate_experts
维护logcnt[i]表示专家i经过冗余后总共的份数。
则W[i] / logcnt[i] 代表了这个专家冗余部署到卡上后,卡上物理专家实际的负载。- 前n张卡直接一一对应放一个专家。
- 剩下的m-n张卡,每次选择 选择 W[i] / logcnt[i] 最大的那个专家进行冗余 这里共享专家看作是权重非常大的路由专家,可以预见,前几轮迭代 W[i]/logcnt[i] 最大的都是共享专家。
这看上去只是个贪心算法,不保证全局最优?
Prefill
DeepSeek部署是PD分离的,Prefill是4个node,每个node 8卡,共32卡, EP32。node内部的8卡,是NVLINK连接,node间是IB连接。这里我猜应该对应了DeepEP了的Normal kernels with NVLink and RDMA forwarding
考虑到Prefill层次化的拓扑结构,EPLB也进行了层次化的考虑,并且也考虑了v3 report中提到的group-limited routing, EPLB会让同一个group的专家,一定部署到同一个node。
算法流程
- 首先需要决定各个组放在哪个node上,这里对应的函数为:
balanced_packing
, 使得node间的负载尽量均衡, 这一步不进行冗余。
- 确定每个node会部署哪些专家组后,在单个node内,对专家进行冗余部署,对应调用函数:
replicate_experts
,这一步会将node内部署的专家数量冗余到参数指定的数量。
- 确定每个node内总共会部署哪些专家,以及对每个专家冗余多少份后,调用
balanced_packing
,将每个物理专家,具体指定到一张GPU上去,使得node内的GPU之间,也尽量负责均衡。
balanced_packing
: 这个函数负责将n个加权对象,均匀分配到m个容器中,保证每个容器刚好n/m个对象,并且所有容器的总权重尽可能平衡。对于步骤1, 加权对象为专家组,容器为node。对于步骤3,加权对象为一个需要部署的物理专家,容器为一张GPU。balanced_packing
的算法流程:- 权重降序排序
- 每次选择当前负载最小的并且可用的那个容器,将当前权重最大的对象部署到该容器。
更新后的Decode
在DeepSeek-V3 / R1 推理系统概览中的版本为:
Decode:路由专家 EP144、MLA 和共享专家 DP144,一个部署单元是 18 节点,32 个冗余路由专家,每张卡 2 个路由专家和 1 个共享专家
可能的步骤是:
- 先
replicate_experts
, 进行冗余,得到144 * 2 = 288个物理路由专家
balanced_packing
把288个路由专家部署144个GPU上。
总结
EPLB在进行负载均衡的时候,针对Prefill和Decoding的不同拓扑结构,也有不同的策略,和v3 report Infra部分,DeepEP的两种kernel都能对应上。
Prev
TPU 脉动阵列 笔记
Next
DeepSeek-v3 Infra笔记
Loading...