argus-cluster/README.md

166 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Argus Cluster
本仓库主要代码位于 `src/mvp/py/`,单元测试位于 `src/mvp/py/tests/``pytest.ini` 已配置 `testpaths`)。
## 使用 uv 创建/激活虚拟环境并安装依赖
前置条件:已安装 `uv`Astral 的 Python 包/虚拟环境工具)。
1) 在仓库根目录创建虚拟环境:
```bash
uv venv .venv
```
2) 激活虚拟环境:
```bash
source .venv/bin/activate
```
3) 在虚拟环境中安装依赖(运行与测试依赖):
```bash
uv pip install -r src/mvp/py/requirements.txt -r src/mvp/py/requirements-dev.txt
```
## 运行单元测试
在仓库根目录执行:
```bash
pytest
```
如需显式使用 Python 模块方式:
```bash
python -m pytest
```
## 远端开发h1同步代码、构建镜像、初始化共享目录、拉起 Ray 集群
`src/mvp/docker-compose.yaml``src/mvp/` 为工作目录,并挂载 `../../shared``../../verl`,因此推荐远端目录结构如下:
- `/home2/argus/infra/mvp/src/mvp/`:本仓库的 `src/mvp/` 内容
- `/home2/argus/infra/mvp/shared/`:共享目录(模拟/对齐 NFS
- `/home2/argus/infra/mvp/verl/`:训练代码仓库(脚本会检查该目录存在)
1) 同步代码到远端(只同步 `src/mvp/`,确保相对路径挂载正确):
```bash
ssh argus@h1 "mkdir -p /home2/argus/infra/mvp/src/mvp"
rsync -av --delete src/mvp/ argus@h1:/home2/argus/infra/mvp/src/mvp/
```
2) 在远端准备 `verl` 仓库(若已存在可跳过):
```bash
ssh argus@h1 "mkdir -p /home2/argus/infra/mvp && test -d /home2/argus/infra/mvp/verl || echo '缺少 /home2/argus/infra/mvp/verl请先 git clone'"
# 下载verl
ssh argus@h1 "cd /home2/argus/infra/mvp && git clone https://github.com/volcengine/verl.git"
```
3) 登录远端并初始化共享目录环境(会创建 `../../shared/...` 等目录):
```bash
ssh argus@h1
cd /home2/argus/infra/mvp/src/mvp
./scripts/00_prereq_check.sh
```
4) 构建 Ray 节点镜像并拉起集群(首次或镜像不存在时建议强制构建):
```bash
cd /home2/argus/infra/mvp/src/mvp
BUILD=1 ./scripts/01_up.sh
```
5) 验证集群状态:
```bash
./scripts/50_status.sh
curl -sS http://127.0.0.1:8265/api/version | head
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}' | grep -E 'argus-ray-|sftpgo|wandb' || true
```
6) 关闭集群:
```bash
./scripts/02_down.sh
```
## 远端h1端口映射、创建 W&B user用户
使用以下命令将h1的端口映射到本机
```
ssh -p 12022 -L 8265:127.0.0.1:8265 -L 8080:127.0.0.1:8080 -L 8081:127.0.0.1:8081 -L 2022:127.0.0.1:2022 -L 8090:127.0.0.1:8090 -L 8000:127.0.0.1:8000 -o ProxyJump=ssh@jump.nasp.fit:36022 nasp@192.168.20.121
```
其中:
- 8265: ray dashboard
- 8080: webui & API 服务端口
- 8081: sftpgo web client
- 2022: sftpgo sftp协议端口
- 8090: weight & bias 网站端口
- 8000: model serving openai服务端口
## 远端h1预先准备数据/模型,启动与关闭 API Server
下面命令均在远端执行:
```bash
ssh argus@h1
cd /home2/argus/infra/mvp/src/mvp
```
1) 预先下载数据集与模型(写入共享目录,幂等可重复执行):
```bash
# 可选:指定要缓存的模型(默认 Qwen/Qwen2.5-0.5B-Instruct
MODEL_ID="Qwen/Qwen2.5-0.5B-Instruct" ./scripts/30_prepare_data_and_model.sh
```
2) 安装 API 依赖(在 head 容器内 best-effort 安装 `fastapi/uvicorn/yaml` 等):
```bash
./scripts/12_install_api_deps.sh
```
3) 启动 API Server监听 `:8080`,需要设置鉴权 token
```bash
export MVP_INTERNAL_TOKEN="your-dev-token"
./scripts/60_start_api.sh
curl -sS http://127.0.0.1:8080/docs | head
```
查看 API 进程状态(基于 pid 文件):
```bash
./scripts/62_status_api.sh
```
4) 关闭 API Server
```bash
./scripts/61_stop_api.sh
```
## 远端h1W&B LocalwandbLicense 激活常见问题(端口转发)
如果你通过 SSH 端口转发访问 W&B UI但在 “Add license” 页面点击 “Update” 时提示:
`Unable to reach the backend api`,通常是因为 W&B 前端使用了“绝对 URL”去请求后端 API
而该 URL 的 host/port 与你当前端口转发的地址不一致(例如 UI 打开在 `http://localhost:8090`
但前端去请求 `http://localhost:8080`)。
建议二选一:
- 方式 A推荐最简单把本地 `8080` 转发到远端 `8090`,然后用 `http://localhost:8080` 打开 UI
- `ssh -L 8080:127.0.0.1:8090 argus@h1`
- 方式 B在远端启动容器前设置 `WANDB_HOST`(与浏览器地址一致),并重建 `wandb` 容器:
- `export WANDB_HOST=http://localhost:8090`
- `docker compose -f /home2/argus/infra/mvp/src/mvp/docker-compose.yaml up -d --force-recreate wandb`
也可以通过设置 `WANDB_LICENSE=...` 在容器启动时注入 license绕过 UI 更新步骤。