3.9 KiB
3.9 KiB
MVP v3.7 迭代总结:切换 vLLM rollout + verlai/verl:vllm011.latest
基线版本:v3.6(W&B + SFTPGo + WebUI/API + Ray stateless pool + Advanced TaskSpec)
验证环境:argus@h1:/home2/argus/infra/mvp
1. 目标与结果
1.1 本次目标
- Ray 节点镜像切换到 vLLM 版本:
- base image:
verlai/verl:vllm011.latest - 构建镜像 tag:
argus/argus-ray-node:vllm011.latest
- 平台内置 PPO/GRPO 默认 rollout backend 全量切换:
actor_rollout_ref.rollout.name=sglang→actor_rollout_ref.rollout.name=vllm
- 端到端验证:
- 使用
src/mvp/scripts/run_all_v30_api.sh在 h1 上跑通 E2E(通过 API 提交 PPO/GRPO/SFT)
1.2 实际结果(验收)
- h1 上已成功构建并使用新镜像拉起(head + 2 worker):
docker ps显示argus-ray-head/worker-*使用argus/argus-ray-node:vllm011.latest
run_all_v30_api.sh端到端跑通:- PPO/GRPO/SFT 任务均
SUCCEEDED
- PPO/GRPO/SFT 任务均
- 在 job submit payload 中验证关键点:
actor_rollout_ref.rollout.name=vllmHF_HUB_OFFLINE=1(见 §3.2)
2. 代码与配置改动点
2.1 训练默认参数(sglang → vllm)
src/mvp/py/argus/ray/builders.py- 将 PPO/GRPO 默认参数中的
actor_rollout_ref.rollout.name固定为vllm
- 将 PPO/GRPO 默认参数中的
src/mvp/py/argus/service/ui.py- New Task → Advanced example 同步改为
actor_rollout_ref.rollout.name=vllm(避免用户 copy/paste 走错)
- New Task → Advanced example 同步改为
并用单测锁定行为(TDD):
src/mvp/py/tests/test_builders.pysrc/mvp/py/tests/test_ui.py
2.2 镜像与 compose(强制用预构建镜像)
src/mvp/images/argus-ray-node/Dockerfile- 默认
ARG BASE_IMAGE=verlai/verl:vllm011.latest
- 默认
src/mvp/docker-compose.yaml- 移除
ray_head.build(避免每次docker compose up触发 build) - head/worker 统一使用
image: argus/argus-ray-node:vllm011.latest
- 移除
3. E2E 遇到的问题与修复
3.1 问题:vLLM 初始化触发 HF mirror 429
在切换到 vLLM rollout 后,PPO/GRPO 任务启动阶段出现:
huggingface_hub.errors.HfHubHTTPError: 429 Too Many Requests- 请求来源:
https://hf-mirror.com/api/models/<repo>/tree/main?...
原因要点:
- 传入模型为 repo id(
Qwen/Qwen2.5-0.5B-Instruct)时,vLLM 会调用 HF API 获取 repo tree/file list; - 多进程/多 replica 并发会瞬间放大请求,导致 mirror 限流;
- 即便本地 cache 已存在,repo id 路径仍可能触发远端检查。
3.2 修复:禁用 HF Hub 联网 + 使用本地 snapshot path
- 在 Ray job runtime_env 注入离线开关:
src/mvp/configs/dev.yamlsrc/mvp/configs/dev_v30.yaml
新增:
HF_HUB_OFFLINE: "1"
- E2E 脚本提交任务时,
model_id改为本地 snapshot 目录,避免 repo id:
src/mvp/scripts/run_all_v30_api.sh- 在 head 容器内用
snapshot_download(..., local_files_only=True)解析本地路径 - 用该路径作为
model_id:提交 PPO/GRPO/SFT
- 在 head 容器内用
结果:E2E 任务不再触发 HF mirror 429,PPO/GRPO/SFT 全部跑通。
4. 远端部署/操作记录(h1)
4.1 构建镜像(h1 上执行)
在 argus@h1:/home2/argus/infra/mvp/src/mvp:
docker build -f images/argus-ray-node/Dockerfile \
--build-arg BASE_IMAGE=verlai/verl:vllm011.latest \
-t argus/argus-ray-node:vllm011.latest .
4.2 拉起环境(compose)
docker compose down
docker compose up -d
4.3 E2E
export MVP_INTERNAL_TOKEN=my-dev-token
export SFTPGO_ADMIN_PASSWORD=my-dev-sftpgo-admin
./scripts/run_all_v30_api.sh
5. 已知影响与注意事项
- vLLM rollout 更敏感于模型加载路径与联网行为:建议默认离线(
HF_HUB_OFFLINE=1)并优先使用本地 snapshot path。 - 镜像切换可能带来依赖差异:后续若遇到 rollout 相关参数兼容问题,应以 vLLM 的配置要求为准逐项调整(保持小步快跑)。