Prhub

#7629 [ci] chore: fix ci failure

原始 PR 作者 wuxibin89 合并时间 2026-08-31 14:18 文件变更 4 提交数 2 评论 0 代码增减 +20 / -15

执行摘要

修复 CI 失败:E2E 补 max_model_len 并注释不稳定测试

PR body 仅说明 "As title.",具体动机从代码注释还原:vLLM 拒绝 enable_chunked_prefill=False 时 max_num_batched_tokens < max_model_len 的组合;Qwen2.5 / Qwen3-VL 默认 max_model_len 取 max_position_embeddings(32k / 128k),远超 E2E 实际 prompt + response 预算,导致 CI 启动崩溃。此外 vllm.yml 的生成确定性测试持续不稳定,也被注释掉。

值得快速浏览,不必精读。建议与 PR#7632 成对阅读,理解 verl 团队应对 vLLM chunked prefill 校验收紧的两层策略;同时留意 vllm.yml 中被注释的 determinism 测试是否有恢复计划。

讨论亮点

本 PR 没有任何 review 评论或 issue 讨论(comments_count = 0、review_comments_count = 0),由作者 wuxibin89 自行合入。因此没有可提炼的公开交锋;设计权衡只能从代码注释与 diff 中推断:最大化 CI 稳定性优先于保留确定性测试覆盖。

实现拆解

  1. tests/special_e2e/run_ppo_trainer_veomni.sh:把硬编码的 data.max_prompt_length=512 / data.max_response_length=128 改为 MAX_PROMPT_LEN / MAX_RESPONSE_LEN 环境变量,新增 MAX_MODEL_LEN(默认二者之和 640),并在 common_params 中追加 actor_rollout_ref.rollout.max_model_len。这样 vLLM 的 max_num_batched_tokens 与 max_model_len 的关系满足校验,启动不再崩溃。
  2. tests/special_e2e/ppo_trainer/run_function_reward.sh:在变量区追加 MAX_MODEL_LEN(默认 1024),并在 rollout 参数中传入 max_model_len。注意该脚本默认 enable_chunked_prefill=True,但同样为 VL 模型关闭 prefill 的场景做好准备。
  3. .github/workflows/vllm.yml:将 "Test vllm rollout generation determinism" 整个 job 注释掉,让步 CI 通过;这是本次修复中唯一以牺牲测试覆盖为代价的改动。
  4. .github/workflows/e2e_ppo_trainer_veomni_vllm.yml:删除 install 阶段重复的 pip3 install -r requirements.txt(保留 requirements-test.txt),移除网络诊断注释,并把 cleanup job 的 needs 列表压缩为单行。
    配套:无新增单元测试;E2E 脚本正常运行即为验证手段。新增 MAX_MODEL_LEN 等环境变量入口,作为脚本配置配套。
文件 模块 状态 重要度
tests/special_e2e/run_ppo_trainer_veomni.sh 端到端测试 modified 4.5
tests/special_e2e/ppo_trainer/run_function_reward.sh 端到端测试 modified 4.1
.github/workflows/vllm.yml 持续集成 modified 3.67
.github/workflows/e2e_ppo_trainer_veomni_vllm.yml 持续集成 modified 3.62

关键源码片段

tests/special_e2e/run_ppo_trainer_veomni.sh test-coverage

核心修复:推导 MAX_MODEL_LEN 并传给 vLLM,规避 enable_chunked_prefill=False 时 max_num_batched_tokens 校验失败导致的启动崩溃。

# vLLM 在关闭 chunked prefill 时会校验 max_num_batched_tokens >= max_model_len,
# 不满足则拒绝启动。Qwen2.5 / Qwen3-VL 默认 max_model_len 取
# max_position_embeddings(32k / 128k),远大于 E2E 实际预算,因此显式 pin 到
# prompt + response 之和,既满足校验又避免预留过多 KV cache。
MAX_PROMPT_LEN=${MAX_PROMPT_LEN:-512}
MAX_RESPONSE_LEN=${MAX_RESPONSE_LEN:-128}
MAX_MODEL_LEN=${MAX_MODEL_LEN:-$((MAX_PROMPT_LEN + MAX_RESPONSE_LEN))}# common_params 数组内对应调整:硬编码的 512 / 128 换成变量引用,
# 并在 enable_chunked_prefill=False 之后追加 max_model_len 参数。
common_params=(
    ...
    data.max_prompt_length="${MAX_PROMPT_LEN}" \
    data.max_response_length="${MAX_RESPONSE_LEN}" \
    ...
    actor_rollout_ref.rollout.enable_chunked_prefill=False \
    actor_rollout_ref.rollout.max_model_len="${MAX_MODEL_LEN}" \
    ...
)
tests/special_e2e/ppo_trainer/run_function_reward.sh test-coverage

同一问题在 function_reward E2E 的同步修复,确保 VL 模型(默认 128k)下关闭 chunked prefill 不崩溃。

# VL 模型默认 max_model_len 可达 128k,本脚本若关闭 chunked prefill,
# vLLM 会因 max_num_batched_tokens < max_model_len 拒绝启动。
# 这里把 max_model_len 固定到实际 prompt + response 预算(默认 1024)。
MAX_MODEL_LEN=${MAX_MODEL_LEN:-$((MAX_PROMPT_LEN + MAX_RESPONSE_LEN))}# common_params 中的 rollout 参数片段:
actor_rollout_ref.rollout.enable_chunked_prefill="${ENABLE_CHUNKED_PREFILL}" \
actor_rollout_ref.rollout.max_model_len="${MAX_MODEL_LEN}" \

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

风险:

1) 测试覆盖缺口:vllm.yml 中 determinism 测试被注释,vLLM 生成确定性回归暂时不设防,需在根因修复后恢复。
2) 配置一致性:MAX_MODEL_LEN 默认由 MAX_PROMPT_LEN + MAX_RESPONSE_LEN 推导,如果外部只覆写其中一个变量,可能导致推导值偏离实际数据预算,需要同步设置。
3) 依赖完整性:veomni_vllm workflow 删除 requirements.txt 安装,若 requirements-test.txt 未完整包含运行依赖会引入缺失(通常已覆盖,但值得确认)。
4) 修复范围有限:其他 E2E 脚本若同样以 enable_chunked_prefill=False 运行,仍可能遇到相同启动失败。

影响范围仅涉及 CI 工作流与 E2E 测试脚本:vllm.yml 的 vLLM 生成确定性测试暂时下线,veomni E2E 恢复通过;对用户训练/推理路径无运行时影响。对团队而言,CI 稳定性优先于覆盖完整性的取舍值得记录,后续需要跟进恢复 determinism 测试并落实根本修复。

测试覆盖缺失 配置一致性风险 修复范围有限

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论