# MVP V1 远程实验行动文档(待确认后执行) ## 1. 任务复述(我理解的需求) 你希望我在远程机器 `argus@h1` 上,进入目录 `/home2/argus/infra/mvp`,把 MVP V1 的“原本流程”**手动完整跑一遍并验证**。要求: 1) 在宿主机上编写脚本,脚本通过 `docker exec` 在容器内执行命令,负责协调启动顺序(先 head、后 worker)。 2) 集群拓扑改为: - 1 个 Ray Head:**没有 GPU**,并且 Head 的 Ray 资源 `CPU=0`(防止 Ray 把训练任务调度到 head)。 - 2 个 Ray Worker:各自 **4 GPU**(总 8 GPU)。 3) PPO 训练需要“轻量化”,把 `total_epochs` 改为 `1`。 4) 先在本地仓库 `src/mvp/v1/` 写好脚本与 compose 文件;再拷贝到远程目录执行与验证。 5) 在你确认这份行动文档没问题之前,我**不执行**远程操作。 ## 2. 本地已准备的文件(在本仓库内) - `src/mvp/v1/docker-compose.yaml`:3 容器(head + 2 worker),head 不使用 nvidia runtime;worker0/1 各限制 4 GPU。 - `src/mvp/v1/scripts/`:宿主机脚本(内部全部用 `docker exec`) - `01_up.sh`:起容器 - `20_start_head.sh`:启动 Ray head(`--num-cpus=0 --num-gpus=0`) - `21_start_workers.sh`:启动 Ray worker 加入集群 - `30_prepare_data_and_model.sh`:准备 GSM8K 数据与预下载模型 - `40_submit_ppo_epoch1.sh`:提交 PPO(`trainer.total_epochs=1`,并设置 `nnodes=2, n_gpus_per_node=4`) - `run_all.sh`:按顺序一键执行 ## 3. 远程环境前置条件(需要你确认/保证) 在 `argus@h1` 上: - Docker 可用,且有 `docker compose` 插件(Compose v2)。 - NVIDIA runtime 可用(worker 容器需要 `runtime: nvidia`),宿主机有至少 8 张 GPU。 - 不强制要求提前准备 `./verl`:脚本会在宿主机侧检查 `${PWD}/verl`,如果不存在会自动执行: - `git clone https://github.com/volcengine/verl.git` 此外本实验默认写入持久化目录:`/home2/argus/infra/mvp/shared`(会自动创建)。 ## 4. 拷贝到远程(我执行前会再次征求你确认) 从本地(本机)同步到远程: 1) 同步脚本与 compose: - `rsync -av ./src/mvp/v1/ argus@h1:/home2/argus/infra/mvp/src/mvp/v1/` - `rsync -av ./specs/mvp/v1_action.md argus@h1:/home2/argus/infra/mvp/specs/mvp/v1_action.md` 2) `verl/` 默认不需要同步(远程会 clone)。如果你更希望固定版本/避免网络波动,也可以手动同步: - `rsync -av --delete ./verl/ argus@h1:/home2/argus/infra/mvp/verl/` ## 5. 远程执行步骤(在宿主机上) 在远程机器执行: 1) 进入目录: - `cd /home2/argus/infra/mvp` 2) 确保脚本可执行(首次同步后需要做一次): - `chmod +x ./src/mvp/v1/scripts/*.sh` 3) 启动容器: - `./src/mvp/v1/scripts/01_up.sh` 4) 安装 editable 版 `verl`(保证 `python -m verl...` 可用): - `./src/mvp/v1/scripts/10_install_verl_editable.sh` 5) 启动 Ray Head(禁止调度到 head): - `./src/mvp/v1/scripts/20_start_head.sh` 6) 启动两个 Ray Worker 加入集群: - `./src/mvp/v1/scripts/21_start_workers.sh` 7) 准备数据 + 预下载模型(落到 `./shared`): - `./src/mvp/v1/scripts/30_prepare_data_and_model.sh` 8) 提交 PPO(`total_epochs=1`,必须用 `ray job submit` 在 head 提交;通过 `--entrypoint-resources` 强制 driver 调度到 worker): - `./src/mvp/v1/scripts/40_submit_ppo_epoch1.sh` 9) 观察状态: - `./src/mvp/v1/scripts/50_status.sh` - 打开 Ray Dashboard:`http://