2.8 KiB
2.8 KiB
MVP v3.0 — 部署与验收流程(草案)
0) 环境前提
- Ray 集群:延续 v2.5 的 head + stateless worker(自动 join)
- 共享存储:容器内挂载
/private(dev/prod 对齐) - API server:宿主机代码挂载到 head 容器,在 head 容器内启动
- 新增:SFTPGo 服务(建议容器化部署)
1) 部署步骤(高层)
- 部署/升级 Ray 节点镜像(沿用 v2.5 的
argus/argus-ray-node:v2.5或更高版本) - 启动 Ray 集群(compose 或平台创建容器)
- 启动/配置 SFTPGo(挂载
/private) - 启动 API server(head 容器内)
- 启动 WebUI(由 API server 托管)
2) 验收用例(必须通过)
A. 用户与凭据
- admin 创建用户
alice,签发 API token - 系统联动在 SFTPGo 创建
alice(home=/private/users/alice) alice使用 token 登录 WebUI(或调用/api/v2/me成功)
B. 上传数据闭环(核心)
alice通过 SFTP 上传数据集到/private/users/alice/datasets/...alice通过 WebUI/API 提交任务,TaskSpec 引用该路径- Ray worker 读取该数据,任务 RUNNING 并最终 SUCCEEDED
C. 下载产物闭环
- 训练完成后,产物落到
/private/users/alice/jobs/<submission_id>/... alice通过 SFTP 下载 checkpoints/logs 成功- (新增)
alice将需要长期保留的权重从jobs/<submission_id>/...移动到models/,确认移动后可长期存在
C2. Jobs 回收站与自动清理(3 天移入回收站,7 天后永久删除)
- 将
jobs_trash_after_days/jobs_purge_after_days配置为较小值(例如分钟级,用于验证) - 训练完成进入 terminal 状态
- 等待 API server 内置 janitor 扫描周期后,确认对应
jobs/<submission_id>被移动到trash/jobs/<submission_id> - 在回收站窗口内,把某个文件从
trash/jobs/<submission_id>移动到models/,确认移动成功 - 等待超过
jobs_purge_after_days后,确认trash/jobs/<submission_id>被永久删除 - 确认已移动到
models/的文件不被删除
D. 安全隔离(必须)
bob不能通过 API 查询alice的 task(404)bob不能提交引用/private/users/alice/...的 TaskSpec(400/403)bob通过 SFTP 无法访问/private/users/alice/...(chroot 生效)
3) 故障注入(推荐通过)
- kill worker watchdog 或 raylet → worker 自动恢复并重新加入集群
- 重启 head 容器 → head 重新写
head.json,worker 自动重连 - SFTPGo 重启 → 不影响 Ray 集群;用户可重新连接上传/下载
4) 回归清单(与 v2.5 一致)
- 任务队列、重试(INSUFFICIENT_RESOURCES → PENDING_RESOURCES → retry)
- PPO/GRPO/SFT 三种 workload 均可跑通
- head 不跑训练(driver 强制落 worker)