# MVP v3.7 开发计划(TDD) > 目标:切换 Ray 节点基础镜像到 `verlai/verl:vllm011.latest`,并将平台内置 PPO/GRPO 默认 rollout backend 全量切到 `vllm`,最后在远端 `argus@h1` 通过 `run_all_v30_api.sh` 跑通端到端。 ## M0 - 基线确认(不改行为) **目的**:确认当前 v3.6 baseline 可跑(避免把历史问题混入 v3.7)。 - [ ] 本地单测全绿:`.venv/bin/python -m pytest` - [ ] 远端 h1 当前环境可跑(可选):`./scripts/run_all_v30_api.sh`(或至少能启动 Ray+API) **验收**: - 单测通过,coverage ≥ 90%(现有门槛) --- ## M1 - 训练默认参数切换到 vllm(TDD) **目的**:在不碰镜像/compose 的前提下,先把“默认 rollout=sglang”替换为 vllm,并用单测锁定行为。 ### 1.1 新增/更新单测(先写测试) - [ ] `src/mvp/py/tests/test_builders.py` - 新增断言:PPO/GRPO 的 argv 中包含 `actor_rollout_ref.rollout.name=vllm` - 且不再包含 `actor_rollout_ref.rollout.name=sglang` - [ ] `src/mvp/py/tests/test_ui.py` - New Task Advanced example 模板包含 `actor_rollout_ref.rollout.name=vllm`(避免用户 copy/paste 走错默认) > 这两条测试先写出来,预期先失败(red)。 ### 1.2 实现改动(让测试变绿) - [ ] `src/mvp/py/argus/ray/builders.py` - 将 `actor_rollout_ref.rollout.name=sglang` 改为 `...=vllm` - [ ] `src/mvp/py/argus/service/ui.py` - Advanced example 中同样改为 `...=vllm` ### 1.3 回归测试 - [ ] `.venv/bin/python -m pytest` **验收**: - 单测全绿(coverage ≥ 90%) - 平台内置 PPO/GRPO 构建出的 command/overrides 默认 rollout backend 为 vllm --- ## M2 - 镜像与 compose 切换(远端构建为主) **目的**:完成镜像切换与环境拉起,确保 Ray stateless pool 正常工作。 ### 2.1 Dockerfile 默认 base image 切换 - [ ] `src/mvp/images/argus-ray-node/Dockerfile` - `ARG BASE_IMAGE=verlai/verl:vllm011.latest` ### 2.2 docker-compose 强制使用新镜像(移除 build) - [ ] `src/mvp/docker-compose.yaml` - 移除 `ray_head.build` 段(强制走 `image:`) - `ray_head.image / ray_worker_0.image / ray_worker_1.image` 统一改为: - `argus/argus-ray-node:vllm011.latest` ### 2.3 远端构建镜像(h1) 在 `argus@h1:/home2/argus/infra/mvp/src/mvp`: - [ ] `docker build -f images/argus-ray-node/Dockerfile -t argus/argus-ray-node:vllm011.latest .` ### 2.4 清理旧 compose 并拉起 - [ ] `docker compose down` - [ ] `docker compose up -d` - [ ] 验证: - `docker ps` 看到 `argus-ray-head/worker` 正常运行 - Ray dashboard:`http://:8265` 可访问,节点数 1 head + 2 worker **验收**: - h1 环境成功使用新镜像拉起 Ray 集群(head 无 GPU、worker 各 4 GPU 的配置仍保持) --- ## M3 - 端到端验证(run_all_v30_api.sh) **目的**:验证在新镜像 + 默认 vllm rollout 下,API 提交的训练任务能跑通闭环。 ### 3.1 同步代码到远端 - [ ] rsync `src/mvp` 到 `argus@h1:/home2/argus/infra/mvp/src/mvp` ### 3.2 执行 E2E 在 h1: - [ ] `./scripts/run_all_v30_api.sh`(确保环境变量按脚本要求设置:`MVP_INTERNAL_TOKEN`、可选 `WANDB_API_KEY` 等) ### 3.3 核心检查点 - [ ] PPO/GRPO/SFT 任务整体流程可执行(至少 PPO/GRPO 不因 rollout backend 初始化失败) - [ ] 任一 PPO/GRPO 的 Ray job logs / submit payload / hydra overrides 中可确认: - `actor_rollout_ref.rollout.name=vllm` **验收**: - `run_all_v30_api.sh` 端到端成功(或若 PPO/GRPO 因 vllm 参数差异失败,需在本 milestone 内补齐必要 overrides 并重新跑通) --- ## 风险与回滚策略 ### 风险 - vLLM rollout 可能对部分参数(如 batch/并发/显存利用率)有不同约束,导致训练启动失败。 - base image 切换导致 ray/依赖版本差异。 ### 回滚 回滚到 v3.6 / sglang 的最小动作: - `docker-compose.yaml` 恢复旧镜像 tag - `builders.py` 恢复 rollout.name=sglang