Back to blog

ES-MoE: Scaling Beyond the GPU Memory Limit for Large Mixture-of-Experts Model

通过专家卸载和动态放置实现MoE模型训练的高效扩展,支持67倍专家扩展和17.5倍吞吐量提升

ES-MoE: Scaling Beyond the GPU Memory Limit for Large Mixture-of-Experts Model Training

一、论文概述

项目内容
标题Scaling Beyond the GPU Memory Limit for Large Mixture-of-Experts Model Training
作者Yechan Kim*, Hwijoon Lim*, Dongsu Han
机构KAIST (Kim Jaechul Graduate School of AI & School of Electrical Engineering)
论文https://arxiv.org/abs/2402.09624
代码https://github.com/kaist-ina/es-moe
会议ICML 2024
许可PMLR 235

二、核心思想

问题定义

Mixture-of-Experts (MoE) 模型通过增加专家数量来提升模型性能,但不增加计算复杂度。然而,扩展专家数量面临三个关键挑战:

  1. GPU内存限制:现有框架(FairSeq、Tutel、DeepSpeed-MoE)要求所有专家同时加载到GPU内存,增加专家需要更多GPU
  2. 负载不均衡:专家数量增加导致token分布更不均匀,造成straggler问题和零填充浪费
  3. 计算效率低下:batched matrix multiplication需要大型dispatch mask,限制batch size

例如,训练MoE-L(8专家)只需4个A100 GPU,但扩展到128专家需要52个GPU。

解决方案概述

本文提出ES-MoE,一种高效扩展MoE训练的方法:

  1. 专家卸载:将专家参数和优化器状态卸载到主机内存/SSD
  2. 流水线专家处理:重叠GPU-CPU通信与GPU计算
  3. 动态专家放置:基于token负载动态平衡GPU间的专家分配

MoE解耦特性

三、技术架构

整体框架图

ES-MoE流水线

ES-MoE的核心设计包括三个组件:

专家级卸载与处理

关键挑战:专家放置只能在gating network执行后确定,导致上传延迟可能导致GPU停顿。

解决方案:

  • 将token permutation阶段与第一个专家的上传重叠
  • 后续专家顺序处理,确保专家计算和上传并发进行
  • 专家级CPU优化:每个专家完成backward pass后立即启动优化器

内存节省:

  • 不使用batched matrix multiplication,避免创建大型dispatch mask
  • 顺序分配token到目标专家,节省大量内存
  • 例如:训练MoE-L时支持8倍更大的microbatch,吞吐量提升3.1倍

动态专家放置

传统MoE vs ES-MoE

动态放置示例

问题:传统方法中专家静态固定在GPU上,token分布随时间变化导致负载不均衡。

解决方案:

  • 基于gating network输出,动态决定专家在GPU上的放置
  • 使用贪心调度算法(4近似)平衡GPU间的token负载
  • 算法复杂度:O(mlog n + mlog m),运行时间 < 2.69 μs

核心公式:

最小化makespan调度问题: min⁡max⁡i=1k∑j∈Sipj\min \max_{i=1}^{k} \sum_{j \in S_i} p_j

其中 SiS_i 是分配给GPU ii 的专家集合,pjp_j 是专家 jj 的处理时间。

贪心算法近似比为 43−13k\frac{4}{3} - \frac{1}{3k}。

自适应卸载

根据专家数量和GPU内存容量自动选择最优策略:

  1. GPU only:所有专家适合GPU内存时,仅消除零填充
  2. Expert pinning:将25%高频专家固定在GPU上,减少I/O
  3. SSD offloading:使用LRU缓存策略和预取,扩展到SSD存储

四、核心创新

创新点说明理论/实验依据
专家级卸载以单个专家为粒度进行卸载和优化避免layer-wise卸载的OOM问题
流水线处理重叠permutation、专家上传、计算GPU利用率提升61.1%
动态专家放置基于token负载动态分配专家负载差距从102%降至15%
顺序处理不使用batched matmul,消除dispatch mask支持8倍更大microbatch
SSD扩展LRU缓存+预取,支持SSD存储扩展67倍专家数量

五、实验结果

可扩展性评估

可扩展性MoE-M

可扩展性MoE-L

ES-MoE在可扩展性方面显著优于基线:

  • 5倍更多专家(仅主机内存)
  • 67倍更多专家(使用4TB SSD)
  • 成功训练29B参数MoE-L模型,仅需4个GPU

训练吞吐量

专家数模型参数量Zero-OffloadEFairSeqTutelES-MoE加速比
8MoE-S521M46321826311231521632173.52x
8MoE-M1.76B187842777257605653523.48x
8MoE-L3.93B86772154225526381734.40x
16MoE-S974M2446960142963141589046.49x
32MoE-S1.88B12847470887677614867311.6x
64MoE-S3.70B6702316445512411715017.5x
  • 相比Zero-OffloadE提升最多11.6倍
  • 相比MoE专用框架提升最多3.16倍

Microbatch大小影响

吞吐量vs microbatch

ES-MoE支持更大microbatch(32 vs 其他框架的2-12),带来显著吞吐量提升。

负载均衡效果

FairSeq token分布

ES-MoE token分布

动态专家放置显著改善负载均衡:

  • FairSeq:最重和最轻GPU之间差距102%
  • ES-MoE:差距降至15%

LLM微调

数据集零样本准确率微调后准确率
SST-251.6%88.0%
MNLI49.3%78.2%
BoolQ60.9%68.5%

使用4个GPU在6.5小时内完成15B参数模型微调,无需牺牲精度。

六、相关工作

方向代表工作与ES-MoE的关系
专家并行GShard, Switch TransformerES-MoE扩展专家并行到内存受限场景
卸载ZeRO-Offload, L2LES-MoE实现专家级卸载而非层级卸载
负载均衡Auxiliary loss, Token droppingES-MoE通过动态放置消除零填充
稀疏计算MegaBlocksES-MoE不需要所有专家在GPU内存中

七、总结

核心贡献

  1. 专家级卸载与流水线:实现专家粒度的卸载和优化,重叠通信与计算
  2. 动态专家放置:基于token负载动态平衡GPU间的专家分配
  3. 自适应卸载策略:根据模型大小自动选择GPU/主机/SSD卸载
  4. 开源实现:3.3k行Python + 3.0k行C++代码

技术影响

  • 可访问性:使学术研究者能在有限GPU上训练大型MoE模型
  • 效率:消除零填充浪费,支持更大batch size
  • 扩展性:通过SSD扩展实现近乎无限的专家数量扩展

局限性

  • 专家上传延迟在某些场景下仍可能成为瓶颈
  • SSD访问延迟高于主机内存,需要有效的预取策略
  • 当前实现基于FairSeq框架,移植到其他框架需要额外工作

八、参考资源