Prhub

#40168 [CI][EPLB] Add Async EPLB end-to-end integration test to CI

原始 PR 作者 SageMoore 合并时间 2026-04-20 22:22 文件变更 2 提交数 5 评论 9 代码增减 +64 / -0

执行摘要

添加异步 EPLB 端到端集成测试到 CI,验证 Qwen3-30B 模型的准确性。

根据PR body描述,目的是运行Qwen3-30B-A3B-FP8模型通过lm_eval,同时启用异步EPLB并定期执行,以验证功能准确性,测试耗时约4分钟。

该PR主要面向测试工程师和EPLB开发者,展示了如何配置和运行端到端集成测试。建议关注测试脚本中的EPLB参数设置(如window_sizestep_interval),以理解异步行为验证方式。

讨论亮点

review中主要讨论了测试脚本的参数正确性:

  • gemini-code-assist[bot]错误地建议将--all2all-backend改为--moe-all2all-backend,并将--host参数从http://127.0.0.1改为127.0.0.1,声称这会避免错误。
  • 作者SageMoore引用源码(vllm/engine/arg_utils.py)和实际测试结果反驳,指出原参数正确,修改后反而会导致失败。
  • tlrmchlsmth支持作者,并询问是否降低step_interval以增加异步EPLB运行次数,作者解释手动设置可提高测试覆盖,避免准确性漏检。
  • 结论:原实现无误,参数配置符合vLLM接口,无需修改。

实现拆解

  1. 新增测试脚本:创建文件 .buildkite/scripts/scheduled_integration_test/qwen30b_a3b_fp8_dp4_async_eplb.sh,编写Shell脚本启动vLLM服务器,配置数据并行大小4、启用专家并行和异步EPLB(参数为--eplb-config '{"window_size":20, "step_interval":100, "use_async":true}'),并运行GSM8K准确性评估。
  2. 修改CI配置:更新文件 .buildkite/test_areas/e2e_integration.yaml,在CI管道中添加新测试步骤,指定标签为“Qwen3-30B-A3B-FP8 DP4 Async EPLB Accuracy”,使用H100设备、4个GPU,并调用上述脚本。
  3. 测试配套:脚本包含服务器启动、健康检查、清理逻辑和准确性断言,确保测试可重复且失败时能正确终止。
文件 模块 状态 重要度
.buildkite/scripts/scheduled_integration_test/qwen30b_a3b_fp8_dp4_async_eplb.sh 集成测试 added 6.04
.buildkite/test_areas/e2e_integration.yaml CI 配置 modified 3.89

关键源码片段

.buildkite/scripts/scheduled_integration_test/qwen30b_a3b_fp8_dp4_async_eplb.sh test-coverage

新增的核心测试脚本,包含服务器启动、EPLB 配置和准确性评估逻辑,是实现测试功能的关键文件。

#!/usr/bin/env bash
set -euxo pipefail
​
# 参数 : [THRESHOLD] [NUM_QUESTIONS] [START_PORT]
THRESHOLD=${1:-0.8} # 准确性阈值,默认 0.8
NUM_Q=${2:-1319} # 问题数量,默认 1319
PORT=${3:-8050} # 服务器端口,默认 8050
OUT_DIR=${OUT_DIR:-/tmp/vllm-scheduled}
mkdir -p "${OUT_DIR}" # 创建输出目录# 等待服务器启动函数,超时 600 秒
wait_for_server() {
  local port=$1
  timeout 600 bash -c '
    until curl -sf "http://127.0.0.1:'"$port"'/health" > /dev/null; do
      sleep 1
    done'
}MODEL="Qwen/Qwen3-30B-A3B-FP8" # 测试使用的模型
BACK="allgather_reducescatter" # 全到全后端类型# 清理函数,确保测试后停止服务器进程
cleanup() {
  if [[ -n "${SERVER_PID:-}" ]] && kill -0 "${SERVER_PID}" 2>/dev/null; then
    kill "${SERVER_PID}" 2>/dev/null || true
    for _ in {1..20}; do
      kill -0 "${SERVER_PID}" 2>/dev/null || break
      sleep 0.5
    done
    kill -9 "${SERVER_PID}" 2>/dev/null || true
  fi
}
trap cleanup EXIT # 注册清理函数,在脚本退出时执行# 启动 vLLM 服务器,启用异步 EPLB 配置
VLLM_DEEP_GEMM_WARMUP=skip \
vllm serve "$MODEL" \
--enforce-eager \  # 强制 eager 模式,避免图优化干扰
--data-parallel-size 4 \  # 数据并行大小为 4
--enable-expert-parallel \  # 启用专家并行
--enable-eplb \  # 启用 EPLB 功能
--all2all-backend "$BACK" \  # 设置全到全后端(review 中确认参数正确)
--eplb-config '{"window_size":20, "step_interval":100, "use_async":true}' \  # EPLB 配置,窗口大小 20,步间隔 100,启用异步
--trust-remote-code \  # 信任远程代码,用于加载模型
--max-model-len 2048 \  # 最大模型长度 2048
--port "$PORT" & # 指定端口并后台运行
SERVER_PID=$! # 记录服务器进程 ID
wait_for_server "$PORT" # 等待服务器健康检查通过# 运行准确性评估,使用 GSM8K 数据集
TAG=$(echo "$MODEL" | tr '/: \\n' '_____') # 生成模型名称标签,用于文件名
OUT="${OUT_DIR}/${TAG}_${BACK}.json" # 输出结果文件路径
python3 tests/evals/gsm8k/gsm8k_eval.py --host http://127.0.0.1 --port "$PORT" --num-questions "${NUM_Q}" --save-results "${OUT}" # 调用评估脚本(host 参数格式正确)# 检查准确性是否达到阈值,失败则抛出断言错误
python3 - <<PY
import json; acc=json.load(open('${OUT}'))['accuracy']
print(f"${MODEL} ${BACK}: accuracy {acc:.3f}")
assert acc >= ${THRESHOLD}, f"${MODEL} ${BACK} accuracy {acc}"
PY

评论区精华

测试脚本参数正确性验证 正确性

gemini-code-assist[bot] 建议修改两个参数:将 `--all2all-backend` 改为 `--moe-all2all-backend`,并将 `--host http://127.0.0.1` 改为 `127.0.0.1`,声称这能避免错误。作者 SageMoore 引用源码和实际测试结果反驳,指出原参数正确,修改会导致命令失败或评估错误。tlrmchlsmth 支持作者,并讨论是否调整 `step_interval` 以增加测试覆盖。

结论:原实现正确,参数配置符合 vLLM 实际接口,无需修改;`step_interval` 保持 100 以增加异步 EPLB 运行次数,提高测试可靠性。 · 已解决

风险与影响

  • 回归风险:测试脚本参数依赖vLLM命令行接口,若未来接口变更(如--all2all-backend重命名),可能导致CI失败。但review中已验证当前正确性。
  • 性能风险:测试使用4个H100 GPU,可能增加CI资源消耗和执行时间(约4分钟),但PR body已说明并标记为optional,影响可控。
  • 兼容性风险:脚本硬编码模型名称和参数,若模型或EPLB配置更新,需同步调整测试阈值或设置。
  • 对系统影响:增强EPLB特性的集成测试覆盖,有助于早期发现功能或准确性回归,提升系统稳定性。
  • 对用户影响:无直接影响,但间接确保EPLB在生产环境中的可靠性。
  • 对团队影响:为测试和开发团队提供标准化的EPLB验证流程,简化后续测试维护。
测试配置依赖正确性 CI 执行时间增加

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论