专家负载均衡 (EPLB)#
概述#
在LLM(大语言模型)服务中,MoE(混合专家)模型的专家均衡对于实现最佳性能至关重要。推理过程中动态改变专家会因全局暂停操作而对TTFT(首词元时间)和TPOT(每输出词元时间)产生负面影响。SwiftBalancer支持异步专家负载均衡,实现零开销的专家迁移,确保服务无缝连续。
EPLB效果#
降低延迟:动态均衡专家负载,通过在各专家间均匀分配工作负载,最小化TTFT和TPOT。
提升吞吐量:优化GPU利用率,在高并发场景下提高词元生成速度。
零开销迁移:专家重分布异步进行,不会中断正在进行的推理请求。
自适应扩展:自动适应工作负载波动,同时保持性能稳定。
容错性:冗余的专家放置确保在硬件故障期间系统的韧性。
支持场景#
模型#
DeepSeekV3/V3.1/R1, Qwen3-MoE
MOE量化类型#
W8A8-Dynamic
如何使用EPLB#
动态EPLB#
我们需要添加环境变量 export DYNAMIC_EPLB="true" 来启用vLLM EPLB。启用具有自动调优参数的动态均衡。根据工作负载模式调整 expert_heat_collection_interval 和 algorithm_execution_interval。在当前版本中,我们建议使用以下策略:swift balancer(2)。
vllm serve Qwen/Qwen3-235B-A22 \
--tensor-parallel-size 16 \
--enable-expert-parallel \
--additional-config '{ "eplb_config": {
"dynamic_eplb": true,
"expert_heat_collection_interval": 600,
"algorithm_execution_interval": 50,
"eplb_policy_type": 2,
"num_redundant_experts": {ep_size},
}}'
静态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 '{ "eplb_config": {
"expert_map_record_path": "/path/to/eplb.json",
"num_redundant_experts": 16,
"expert_heat_collection_interval": 400,
"algorithm_execution_interval": 30
}}'
后续部署(使用记录的映射)#
加载预记录的专家映射以获得一致的性能。这避免了在运行时重新计算分布。
vllm serve Qwen/Qwen3-235B-A22 \
--tensor-parallel-size 16 \
--enable-expert-parallel \
--additional-config '{
"eplb_config": {"expert_map_path": "/path/to/eplb.json"}
}'
关键注意事项#
参数调优:
expert_heat_collection_interval:对于稳定的工作负载使用较高值(例如400+);对于波动流量使用较低值(例如100-200)。
algorithm_execution_interval:应≥30,以避免在启动期间过早进行均衡。
num_redundant_experts:必须与张量并行大小匹配(例如,16个GPU对应16),以确保足够的冗余。
硬件要求:
确保所有GPU具有相同的内存容量和计算能力。
网络带宽必须支持专家重分布流量(建议≥10 Gbps)。
模型兼容性:
仅支持显式专家并行的MoE模型(例如Qwen3 MoE模型)是兼容的。
验证模型架构是否通过
--enable-expert-parallel支持动态专家路由。
监控与验证:
跟踪指标:expert_load_balance_ratio, ttft_p99, tpot_avg 和 gpu_utilization。
使用vLLM监控器在运行时检测不均衡。
在加载前始终验证专家映射的JSON结构(使用jq或类似工具验证)。
启动行为:
初始请求在第一个均衡周期(通常1-2分钟)内可能会经历较高的延迟。
避免在预热阶段出现突发的流量高峰。
常见陷阱:
张量并行大小与实际GPU数量不匹配 → 导致资源利用不足。
未先生成映射就使用 expert_map_path → 运行时错误。
设置 num_redundant_experts > 可用GPU数量 → 系统故障。