Package: pj-opus
English|简体中文Opus用于统一部署和管理分布式计算框架和作业的 CLI 工具。背景分布式训练是当今的一个常见需求，然而用户在面临各种分布式计算框架（如 Ray、MPI 等）和云环境（如 Kubernetes、Slurm、AWS 等）时，需要适应不同的训练作业提交方式，这可能存在不便之处。为此，我们设计了一款通用型工具 opus，作为部署和管理多种分布式计算框架及作业的统一方式，提供更简单、流畅的使用体验。安装Frompypipipinstallpj-opusFromsourcegitclonehttps://gitlab.pjlab.org.cn/ast/opus.gitcdopus
pipinstall.预备工作配置跨 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 nametype:slurm# cloud typeenv:NFS_SHARE_DIR:/mnt/petrelfs/share_dataCONDA_ENV_FILE:llm-uniscale-20230517t-slurm:# cloud nametype:slurm# cloud typeloginNode:10.140.60.210# login nodeenv:NFS_SHARE_DIR:/mnt/petrelfs/share_dataCONDA_ENV_FILE:llm-uniscale-20230517pai:type:kubernetes# cloud typeauthConfig:~/.kube/dsw-quota19u2olgqct6-config# k8s kubeconfiggroup:quota19u2olgqct6# k8s namespaceenv:NFS_SHARE_DIR:/cpfs01/shared/publicCONDA_ENV_FILE:llm-opus-20240106如何使用查看用户所属 clouds 的信息>>opuscloudlist
NAMETYPEGROUPNODE(IDLE/TOTAL)s-slurmslurmllmit14/102t-slurmslurmllmit210/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>>opusframeworklaunch--cloudt-slurm:llmit2./examples/ray-2nodes-gpu.yaml查看 frameworks 列表>>opusframeworklist[OPTIONS]Options:-s/--status:通过framework状态对列表结果进行筛选-cp/--cloud-providers:通过cloud类型对列表结果进行筛选

Note:可以通过`opusframeworklist--help`查看支持的所有筛选项名称，大小写不敏感。当需要输入多个筛选项查询时，每个筛选项都需以它对应的CLI选项名开头，参考下述示例：

>>opusframeworklist-sup-sSTOPPED-cpslurm提交一个 job使用命令opus job submit通过 CLI 选项-f/--framework-id（必填）来选择提交 job 的目标 framework 的 ID然后输入 job 的启动命令字符串，即可一键提交 job>>opusjobsubmit-f1'cd ~/rl3m && bash ./projects/internlm2/7b/run_rlhf_7b_1dp.sh'为了方便分辨提交的历史 jobs，可以通过 CLI 选项-j/--jobname（可选）为 job 定义 jobname>>opusjobsubmit-f1'cd ~/rl3m && bash ./projects/internlm2/7b/run_rlhf_7b_1dp.sh'-jrl3m_internlm2_7b对于常用的 job 配置，可以参考job 配置模板在一个 YAML 文件中保存 job 的配置，以便复用>>opusjobsubmit-f1./examples/rl3m_internlm2_7b.yaml此后，如果用户需要修改上述 job 的原始配置，可以通过 CLI 选项或参数进行自定义。例如：# 替换 job 的原始启动命令，并为其指定新的 jobname# 注意：YAML 文件路径必须在新的 job 启动命令字符串之前输入>>opusjobsubmit-f1./examples/rl3m_internlm2_7b.yaml-jrl3m_internlm2_7b_batch_size_256'cd ~/rl3m && bash ./projects/internlm2/7b/run_rlhf_7b_1dp.sh --batch_size 256'查看 jobs 列表>>opusjoblist[OPTIONS]Options:-s/--status:通过job状态对列表结果进行筛选-f/--framework-id:通过frameworkID对列表结果进行筛选

>>opusjoblist-srunning-sPENDING-f1获取 jobs 的日志# 在终端实时打印日志>>opuslogs{JOB_ID}# 下载日志到本地，输出相应的日志文件路径>>opuslogs{JOB_ID(s)}--download终止 jobs>>opusjobstop{JOB_ID(s)}终止 frameworks>>opusframeworkstop{FRAMEWORK_ID(s)}删除 jobs 记录用户可通过 job ID(s) 或选项--all指定要删除的 jobs，默认情况下只会删除其中已结束的 jobs 的记录>>opusjobdelete{JOB_ID(s)}>>opusjobdelete--all如果用户希望在删除 jobs 记录的同时强制终止其中未结束的 jobs，需指定选项--force>>opusjobdelete{JOB_ID(s)}--force
>>opusjobdelete--all--force删除 frameworks 记录用户可通过 framework ID(s) 或选项--all指定要删除的 frameworks，默认情况下只会删除其中已关停的 frameworks 的记录>>opusframeworkdelete{FRAMEWORK_ID(s)}>>opusframeworkdelete--all如果用户希望在删除 frameworks 记录的同时强制关闭其中未停止的 frameworks，需指定选项--force>>opusframeworkdelete{FRAMEWORK_ID(s)}--force
>>opusframeworkdelete--all--force一键启停：启动 Ray -> 提交 job -> job 结束后自动关停 Rayopus 也支持通过一个命令贯通整个启动 Ray -> 提交 job -> job 结束后自动关停 Ray 的流程，用户只需以下步骤：定义一个新的 yaml 文件，在frameworkSpec字段下填入framework 配置模板，在jobSpec字段下填入job 配置模板使用命令opus rayjob submit:>>opusrayjobsubmit./examples/rl3m_internlm2_7b_rayjob_2nodes.yaml--clouds-slurm:llmit
>>opusrayjobsubmit./examples/rl3m_internlm2_7b_rayjob_2nodes.yaml--clouds-slurm:llmit-nrl3m_internlm2_7b_batch_size_256'cd ~/rl3m && bash ./projects/internlm2/7b/run_rlhf_7b_1dp.sh --batch_size 256'对于rayjob这个对象的历史记录，用户可以通过命令opus rayjob list进行查看，并通过命令opus rayjob delete进行删除其他信息# 查看 opus CLI 的使用帮助信息opus-h/--help# 查看 opus CLI 的版本信息opus-v/--version