123 lines
4.0 KiB
Markdown
123 lines
4.0 KiB
Markdown
# 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://<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
|
||
|