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

4.0 KiB
Raw Blame History

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 dashboardhttp://<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/mvpargus@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