Opus: An auto-launcher for ray clusters on clouds
Project description
Opus
用于统一部署和管理分布式计算框架和作业的 CLI 工具。
背景
分布式训练是当今的一个常见需求,然而用户在面临各种分布式计算框架(如 Ray、MPI 等)和云环境(如 Kubernetes、Slurm、AWS 等)时,需要适应不同的训练作业提交方式,这可能存在不便之处。
为此,我们设计了一款通用型工具 opus,作为部署和管理多种分布式计算框架及作业的统一方式,提供更简单、流畅的使用体验。
安装
git clone https://gitlab.pjlab.org.cn/ast/opus.git
cd opus
pip install .
预备工作
配置跨 clouds SSH 免密登录
Opus 支持基于 Slurm 的 Ray 框架和 Ray 作业。为了方便进行跨 Slurm 集群的数据传输和作业提交,需提前配置 SSH 免密登录。
由于当前仅支持 S 到 T Slurm 集群的 SSH 登录,这意味着在跨 Slurm 集群的使用场景中,我们将把 S-slurm 集群的管理节点视为控制节点,来操作用户在 S 和 T Slurm 集群上使用 opus 纳管的所有分布式计算框架和训练作业。
设置 cloud 配置文件
在配置完 SSH 免密登录后,需在控制节点的 ~/.opus/ 目录下添加一个 yaml 文件,命名为 opus_conf.yaml,用来记录用户所属 clouds 的名称、类型及登录节点,例如:
# 这个 yaml 文件的路径必须是 `~/.opus/opus_conf.yaml`
clouds:
s-slurm: # cloud name
type: slurm # cloud type
t-slurm: # cloud name
type: slurm # cloud type
loginNode: 10.140.60.209 # login node
如何使用
查看用户所属 clouds 的信息
>> opus cloud list
NAME TYPE GROUP NODE(IDLE/TOTAL)
s-slurm slurm llmit 14/102
t-slurm slurm llmit2 10/345
启动一个 framework
-
参考 framework 配置模板 在一个 YAML 文件中定义 framework 的配置
注意:在定义 framework 配置文件时,我们建议用户启用一个名为 `RAY_TMPDIR` 的环境变量,以更改 Ray 的 temp dir 路径,例如可以设为 `/tmp/$USER`。这是由于未引入环境变量时 Ray 的默认 temp dir 路径是 `/tmp/ray`,其中有一个文件 `/tmp/ray/ray_current_cluster` 里面会存当前机器节点所连接 Ray 集群的 gcs address,Ray 集群在启动各节点时都会去访问这个文件并根据地址是否相同来决定是否覆写它。对于基于 Slurm 的 Ray 集群而言,当 Slurm 集群上的不同用户在相同机器节点上前后启动过 gcs address 不同的 Ray 集群时,上述文件的默认路径就会引发写权限冲突问题。 -
通过 CLI 选项
--cloud来设置启动 framework 的目标 cloud 的名称和分区,中间用:隔开 -
使用命令
opus framework launch来启动 framework
>> opus framework launch --cloud t-slurm:llmit2 ./examples/ray-framework_2-nodes.yaml
查看 frameworks 列表
>> opus framework list [OPTIONS]
Options:
-s/--status: 通过 framework 状态对列表结果进行筛选
-cp/--cloud-providers: 通过 cloud 类型对列表结果进行筛选
Note:
可以通过 `opus framework list --help` 查看支持的所有筛选项名称,大小写不敏感。当需要输入多个筛选项查询时,每个筛选项都需以它对应的 CLI 选项名开头,参考下述示例:
>> opus framework list -s up -s STOPPED -cp slurm
提交一个 job
- 参考 job 配置模板 在一个 YAML 文件中定义 job 的配置
- 通过 CLI 选项
-f/--framework-id(必填)来选择提交 job 的目标 framework 的 ID - 使用命令
opus job submit来提交 job
>> opus job submit -f 1 ./examples/rl3m_internlm2_7b.yaml
- 通过 CLI 选项
-j/--jobname(可选)可以指定新的 jobname - 当在
opus job submit命令行末尾输入格式为'{run command}'(可选)可以指定新的 job 运行命令
>> opus job submit -f 1 ./examples/rl3m_internlm2_7b.yaml -j rl3m_internlm2_7b_batch_size_256 'cd ~/rl3m && bash ./projects/internlm2/7b/run_rlhf_7b_1dp.sh --batch-size 256'
查看 jobs 列表
>> opus job list [OPTIONS]
Options:
-s/--status: 通过 job 状态对列表结果进行筛选
-f/--framework-id: 通过 framework ID 对列表结果进行筛选
>> opus job list -s running -s PENDING -f 1
获取 jobs 的日志
# 在终端实时打印日志
>> opus logs {JOB_ID}
# 下载日志到本地,输出相应的日志文件路径
>> opus logs {JOB_ID(s)} --download
终止 jobs
>> opus job stop {JOB_ID(s)}
终止 frameworks
>> opus framework stop {FRAMEWORK_ID(s)}
其他信息
# 查看 opus CLI 的使用帮助信息
opus -h/--help
# 查看 opus CLI 的版本信息
opus -v/--version
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pj-opus-0.0.2.tar.gz.
File metadata
- Download URL: pj-opus-0.0.2.tar.gz
- Upload date:
- Size: 32.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a64bcc7c4272fec45acb532044a2f3b0bfb95517da646dace5d5f57a5343a0a7
|
|
| MD5 |
f4f79fe04d28ecda9a3ffe962b0a389c
|
|
| BLAKE2b-256 |
ede7d8631959a424948c07d6449094e4c8a8af9c095a0e0b99aaa437dae3f9ae
|
File details
Details for the file pj_opus-0.0.2-py3-none-any.whl.
File metadata
- Download URL: pj_opus-0.0.2-py3-none-any.whl
- Upload date:
- Size: 35.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3309e99a8c19dd6c06490d8ba0515aacbba3cba96ded1e6a10da1bc35698a37
|
|
| MD5 |
aefcd393b2125bf68e506a939e955e57
|
|
| BLAKE2b-256 |
2baf726efe297ae991fe453a2a77f5dc5d0a83b261d67bf8d522d6cc32a1eaf2
|