EPLB - DeepSeek 开源的专家并行负载均衡器
发布于 2025-02-27 · EPLB(Expert Parallelism Load Balancer)是 DeepSeek 推出的专家并行负载均衡器,能解决大规模模型训练中不同专家模型(Expert)负载不均的问题。EPLB 基于冗余专家策略,复制高负载专家,合理分配到不同 GPU 上,实现负载均衡。EPLB结合 group-limited expert routing 技术,将同一组专家放置在同一节点内,减少跨节点通信开销。
EPLB是什么
EPLB(Expert Parallelism Load Balancer)是 DeepSeek 推出的专家并行负载均衡器,主要解决大规模模型训练里不同专家(Expert)负载不均的问题。做法基于冗余专家策略:把高负载的专家复制几份,再摊到不同 GPU 上,负载就匀了。它还结合 group-limited expert routing,把同一组专家放进同一节点,减少跨节点通信。EPLB 给出了两种策略,分层负载均衡(Hierarchical Load Balancing)和全局负载均衡(Global Load Balancing),各自对应不同场景。通过优化专家的复制与放置,GPU 资源利用率和训练效率都能提上去。
EPLB的主要功能
- 负载均衡:按专家(Experts)的负载估计值,动态调整复制和分配,把不同 GPU 之间的负载差距压到最小。
- 专家复制:用冗余专家策略复制高负载专家,哪里不均就往哪里补。
- 资源优化:GPU 资源尽量用满,负载不均造成的性能瓶颈少了,训练效率跟着提高。
- 通信优化:专家放得合理,节点间通信开销和延迟都能降下来。
- 灵活的策略支持:层次化负载均衡(Hierarchical Load Balancing)和全局负载均衡(Global Load Balancing)两种策略都提供,对应不同场景和训练阶段。
- 多层MoE模型支持:面向多层混合专家模型(MoE),复杂结构也能处理,专家怎么分配、怎么映射都比较灵活。
EPLB的技术原理
- 冗余专家策略:专家并行里,不同专家的负载会随输入数据和模型结构变化。办法是引入冗余专家,也就是复制高负载的专家。负载高的专家可以复制多份,分散到多个 GPU 上,避免单个 GPU 被压垮。
- 层次化负载均衡:先把专家组均匀分到各个节点,让每个节点的负载大致相等。然后在节点内部继续复制专家,把副本分给节点内的 GPU,节点内的负载也就平了。同一组专家尽量放在同一节点,跨节点通信开销随之减少。
- 全局负载均衡:其余情况,比如节点数不能整除专家组数,或者要做更大规模的并行,就走全局策略:不管专家组的限制,把专家全局复制、分配到所有可用 GPU 上。复制多少、放在哪里都动态调整,以此保证全局负载均衡。
- 负载估计与动态调整:负载均衡策略靠专家负载的估计值来指导,估计值来自历史统计数据,比如移动平均值。有了估计值,复制和分配就能随训练阶段、数据分布动态调整。
- 专家映射与资源分配:rebalance_experts 函数负责输出专家的复制和放置计划,把专家落到具体 GPU 上。输出里有物理到逻辑(phy2log)、逻辑到物理(log2phy)两组映射,还有每个专家的复制数量(logcnt)。
EPLB的项目地址
- GitHub仓库:https://github.com/deepseek-ai/eplb
EPLB的核心模式
- 层次化负载均衡模式(Hierarchical Load Balancing):节点数能整除专家组数时用这一模式,分层次优化节点内和节点间的负载分配。
- 全局负载均衡模式(Global Load Balancing):节点数不能整除专家组数,或者需要更大规模并行时,靠全局复制和分配专家把整体负载拉平。
EPLB的代码演示示例
- 这段代码演示的是一个两层 MoE 模型,每层 12 个专家。每层再加 4 个冗余专家,一共 16 个副本,分到 2 个节点上,每个节点 4 个 GPU。
EPLB的应用场景
- 大规模分布式训练:多节点、多 GPU 环境都适用,层次化和全局两种模式可以按需切换,资源利用和通信开销一起优化。
- 预填充阶段:训练初期用层次化负载均衡,把跨节点通信压下去,小规模并行的效率更高。
- 解码阶段:训练后期要上大规模并行,就切到全局负载均衡,动态调整负载来应付复杂任务。
- 异构硬件环境:节点数和专家组数对不上时,全局负载均衡模式能适应这种异构配置,负载照样能分匀。
- 动态负载变化:训练中负载一直在变,可以配合层次化或全局策略实时调整,效率和稳定性都有保障。






0 条评论
暂无评论,来抢沙发。