专家负载均衡 (EPLB)#

概述#

为了获得最佳性能,在 LLM 服务中为 MoE 模型进行专家均衡至关重要。由于“停止所有操作”(stop-the-world)的操作,在推理过程中动态更改专家可能会对 TTFT(首次标记时间)和 TPOT(每个输出标记时间)产生负面影响。SwiftBalancer 能够实现异步专家负载均衡,并且专家移动零开销,确保无缝的服务连续性。

EPLB 效果#

  • 降低延迟:通过将工作负载均匀分布到各个专家,动态平衡专家负载,从而最大限度地减少 TTFT 和 TPOT。

  • 提高吞吐量:在并发量高的场景下,通过优化 GPU 利用率来提高令牌生成速度。

  • 零开销移动:专家重新分配异步进行,不会中断正在进行的推理请求。

  • 自适应缩放:在保持性能稳定的同时,自动适应工作负载波动。

  • 容错能力:冗余专家放置确保在硬件故障期间系统的弹性。

支持场景#

模型:#

DeepseekV3/V3.1/R1、Qwen3-MOE

MoE 量化类型:#

W8A8-dynamic

如何使用 EPLB#

动态 EPLB#

我们需要添加环境变量 `export DYNAMIC_EPLB="true"` 来启用 vllm eplb。通过自动调整的参数启用动态平衡。根据工作负载模式调整 `num_iterations_eplb_update` 和 `num_wait_worker_iterations`。

vllm serve Qwen/Qwen3-235B-A22 \
  --tensor-parallel-size 16 \
  --enable-expert-parallel \
  --additional-config '{
    "dynamic_eplb": true,
    "num_iterations_eplb_update": 400,
    "num_wait_worker_iterations": 30
  }'

静态 EPLB#

初始设置 (记录专家图)#

我们需要添加环境变量 `export EXPERT_MAP_RECORD="true"` 来记录专家图。使用 `expert_map_record_path` 生成初始专家分布图。这为未来的部署创建了一个基线配置。

vllm serve Qwen/Qwen3-235B-A22 \
  --tensor-parallel-size 16 \
  --enable-expert-parallel \
  --additional-config '{
    "expert_map_record_path": "/path/to/eplb.json",
    "init_redundancy_expert": 16,
    "num_iterations_eplb_update": 400,
    "num_wait_worker_iterations": 30
  }'

后续部署 (使用记录的图)#

加载预先记录的专家图以获得一致的性能。这避免了在运行时重新计算分布。

vllm serve Qwen/Qwen3-235B-A22 \
  --tensor-parallel-size 16 \
  --enable-expert-parallel \
  --additional-config '{
    "expert_map_path": "/path/to/eplb.json"
  }'

关键注意事项#

  1. 参数调优

    • num_iterations_eplb_update:对于稳定的工作负载,值较高(例如 400+);对于波动的流量,值较低(例如 100-200)。

    • num_wait_worker_iterations:应 ≥ 30,以避免在启动期间过早平衡。

    • init_redundancy_expert:必须与张量并行大小匹配(例如,16 个 GPU 为 16),以确保足够的冗余。

  2. 硬件要求

    • 确保所有 GPU 具有相同的内存容量和计算能力。

    • 网络带宽必须支持专家重新分配流量(推荐 ≥ 10 Gbps)。

  3. 模型兼容性

    • 仅兼容具有显式专家并行支持的 MoE 模型(例如,Qwen3 MoE 模型)。

    • 验证模型架构是否通过 `--enable-expert-parallel` 支持动态专家路由。

  4. 门控配置

    • 当 `gate_eplb=true` 时,验证门控机制是否可以在不出现路由错误的情况下处理专家移动。

    • 在生产部署之前,使用合成工作负载进行测试。

  5. 监控与验证

    • 跟踪指标:`expert_load_balance_ratio`、`ttft_p99`、`tpot_avg` 和 `gpu_utilization`。

    • 使用 vllm 监视器在运行时检测不平衡。

    • 在加载专家图 JSON 结构之前,务必对其进行验证(使用 jq 或类似工具)。

  6. 启动行为

    • 在第一个平衡周期(通常为 1-2 分钟)内,初始请求可能会经历更高的延迟。

    • 在预热阶段避免突然的流量高峰。

  7. 常见陷阱

    • 不正确的张量并行大小与实际 GPU 数量 → 导致资源利用不足。

    • 未使用专家图生成就使用 `expert_map_path` → 运行时错误。

    • 设置 `init_redundancy_expert` > 可用 GPU → 系统故障。