4.0 KiB
4.0 KiB
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
- 新增断言:PPO/GRPO 的 argv 中包含
-
src/mvp/py/tests/test_ui.py- New Task Advanced example 模板包含
actor_rollout_ref.rollout.name=vllm(避免用户 copy/paste 走错默认)
- New Task Advanced example 模板包含
这两条测试先写出来,预期先失败(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
- Advanced example 中同样改为
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/DockerfileARG 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 downdocker compose up -d- 验证:
docker ps看到argus-ray-head/worker正常运行- Ray dashboard:
http://<h1IP>: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恢复旧镜像 tagbuilders.py恢复 rollout.name=sglang