argus-cluster/specs/mvp/v3.7/v3.7_dev_plan.md

123 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 - 训练默认参数切换到 vllmTDD
**目的**:在不碰镜像/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://<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` 恢复旧镜像 tag
- `builders.py` 恢复 rollout.name=sglang