执行摘要
- 一句话:添加异步EPLB端到端集成测试到CI,验证Qwen3-30B模型的准确性。
- 推荐动作:该PR主要面向测试工程师和EPLB开发者,展示了如何配置和运行端到端集成测试。建议关注测试脚本中的EPLB参数设置(如
window_size和step_interval),以理解异步行为验证方式。
功能与动机
根据PR body描述,目的是运行Qwen3-30B-A3B-FP8模型通过lm_eval,同时启用异步EPLB并定期执行,以验证功能准确性,测试耗时约4分钟。
实现拆解
- 新增测试脚本:创建文件
.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准确性评估。
- 修改CI配置:更新文件
.buildkite/test_areas/e2e_integration.yaml,在CI管道中添加新测试步骤,指定标签为“Qwen3-30B-A3B-FP8 DP4 Async EPLB Accuracy”,使用H100设备、4个GPU,并调用上述脚本。
- 测试配套:脚本包含服务器启动、健康检查、清理逻辑和准确性断言,确保测试可重复且失败时能正确终止。
关键文件:
.buildkite/scripts/scheduled_integration_test/qwen30b_a3b_fp8_dp4_async_eplb.sh(模块 集成测试;类别 test;类型 test-coverage): 新增的核心测试脚本,包含服务器启动、EPLB配置和准确性评估逻辑,是实现测试功能的关键文件。
.buildkite/test_areas/e2e_integration.yaml(模块 CI配置;类别 config;类型 configuration): 修改的CI配置文件,添加了新测试任务到端到端集成测试区域,是测试在CI中执行的入口。
关键符号:未识别
关键源码片段
.buildkite/scripts/scheduled_integration_test/qwen30b_a3b_fp8_dp4_async_eplb.sh
新增的核心测试脚本,包含服务器启动、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
评论区精华
review中主要讨论了测试脚本的参数正确性:
风险与影响
- 风险:
- 回归风险:测试脚本参数依赖vLLM命令行接口,若未来接口变更(如
--all2all-backend重命名),可能导致CI失败。但review中已验证当前正确性。
- 性能风险:测试使用4个H100 GPU,可能增加CI资源消耗和执行时间(约4分钟),但PR body已说明并标记为optional,影响可控。
- 兼容性风险:脚本硬编码模型名称和参数,若模型或EPLB配置更新,需同步调整测试阈值或设置。
- 影响:
- 对系统影响:增强EPLB特性的集成测试覆盖,有助于早期发现功能或准确性回归,提升系统稳定性。
- 对用户影响:无直接影响,但间接确保EPLB在生产环境中的可靠性。
- 对团队影响:为测试和开发团队提供标准化的EPLB验证流程,简化后续测试维护。
- 风险标记:测试配置依赖正确性, CI执行时间增加
关联脉络
- PR #36276 [EPLB] Add nixl-based eplb communicator: 同为EPLB特性开发,该PR添加了EPLB通信器基础功能,本PR的集成测试用于验证其端到端正确性。
- PR #39616 [ROCm][Feature] Enable AITER MLA attention backend to work with Eagle3 speculative decoding on ROCm: 涉及EPLB与推测解码的集成,本PR的测试可间接验证类似复杂场景的稳定性。
参与讨论