Slurm兼容工具 SCC
Slurm兼容工具简介
Slurm兼容工具是一个预置在云开发机内的CLI工具,帮助您从云开发机内无需切换配置或产品,直接使用高性能AI算力池的相关功能。
Slurm兼容工具由SenseCore自主研发,服务于习惯Slurm的用户,保留了Slurm命令行原生的语言习惯和语法,帮助您以最熟悉的命令来在容器化的高性能AI算力池架构上实现多机多卡训练任务发送,并实现训练任务的查看、管理,以及高性能AI算力池资源的查看。
Slurm兼容工具版本记录
版本号 | 更新内容 | 更新时间 |
---|---|---|
Slurm兼容工具 v2.9.6 | sacct、squeue 命令增加了对分页的支持,新增参数page-size和page-token;修改srun的example,适配API 升级v2.0版本的参数更改; | 2024-09-30 |
Slurm兼容工具 v2.9.5 | 新增训练框架--training-framework 枚举值:pytorch、tensorflow、senseparrots(新增)、mpi(新增); 下线--mpi选项,通过training-framework设置mpi类型的job; 下线--distributed选项,通过--Node数量判断是否为分布式,1表示单机,其余为分布式; 下线--begin= | 2024-08-30 |
Slurm兼容工具 v2.9.2 | 针对acp任务数据量大时,执行sacct查看任务无返回bug修复;开发机开多个窗口多进程执行查看不同工作空间任务,出现频繁登录要求bug修复; 并发跑scc命令执行报错bug修复;并发跑出现token过期现象bug修复; | 2024-06-30 |
Slurm兼容工具 v2.6 | srun提交任务时增加挂载路径校验;优化实时日志因EOF被中断问题;srun提交命令后任务执行完成增加输出jobid字段,并返回任务执行成功/失败状态码;为优化体验将workspace-id参数改名成workspace-name,语义不变; | 2024-01-30 |
Slurm兼容工具 v2.5.1 | 适配高性能AI算力池接口调整 | 2023-12-30 |
Slurm兼容工具 v2.4.2 | 适配高性能AI算力池接口调整 | 2023-11-15 |
Slurm兼容工具 v2.4 | sinfo -o增加workspace-name展示,sacct和squeue -o增加提交人展示,srun\sacct\squeue\scontrol任务优先级支持 | 2023-10-30 |
Slurm兼容工具 v2.3 | 修复已知bug | 2023-9-30 |
Slurm兼容工具 v2.2 | sinfo增加资源使用情况展示,squeue和sacct增加workspace-id展示 | 2023-8-30 |
Slurm兼容工具 v2.0 | 配合算力池2.0,支持工作空间、集群。 | 2023-07-26 |
Slurm兼容工具 v1.1 | 修复已知问题,下载链接更新。 | 2023-05-11 |
Slurm兼容工具 GA | 修复已知问题,下载链接更新。 | 2023-03-31 |
Slurm兼容工具 RC | 新增MIG任务的提交,优化算力池资源、任务查看的信息,优化镜像查看字段和交互方式。 | 2023-02-28 |
Slurm兼容工具 Beta | 新增Slurm兼容工具自动版本检测、安装更新,支持通过Sbatch提交批处理任务,支持设置定时任务、对任务进行暂停、恢复等操作,支持查看所有历史提交信息。 | 2022-12-31 |
Slurm兼容工具 Alpha2 | 支持用户在云开发机内更新Slurm兼容工具,对srun、scontrol、squeue、sinfo等命令支持更多任务配字段配置。 | 2022-10-31 |
Slurm兼容工具 Alpha | 支持用户直接使用slurm原生或类slurm的命令行,如srun、scontrol、scancel、squeue,sinfo等命令进行任务的发起和管理。 | 2022-09-30 |
Slurm兼容工具使用指南
Slurm兼容工具使用详情如下:
1. 身份验证
当您在云开发机的终端内首次使用Slurm兼容工具时,我们将对您的身份进行二次验证,您只需要输入您的租户信息,用户名和密码,即可完成身份验证,并在一定时间内保持对您身份的认证结果,避免您重复验证信息。(需要注意的是,您必须是SenseCore的IAM账号才能使用此功能,租户账号无法使用该功能)
如下图
- Tenant Name:将鼠标移动至SenseCore网站右上角的头像,信息卡片中的租户标识是您的Tenant Name。
- User Name&Password:您的IAM账号名和密码。
2. 作业配置&发送
Slurm兼容工具支持您通过Srun、Sbatch来进行任务的配置和管理,您只需对任务的基本信息作基本的脚本式输入,我们便会为您自动封装解析,发送至高性能AI算力池进行训练。
自动预测功能:当您输入命令时,我们会根据您的历史提交任务,以及当前的环境变量信息,为您预测推荐相应的任务配置,您可以简单交互确认,无需多次重复输入framework字段。您也可以在提交任务配置时,选择跳过自动预测环节。
需要的配置和字段信息如下:
命令内容及配置参数 | 缩写 | 是否必填 | 命令说明 |
---|---|---|---|
srun [options] <usr-cmd> | / | / | 提交一个任务到高性能AI算力池(2.0+版本为集群),任务命令放到最后 |
--job-name | -j | 否 | 为任务取一个名字,如果没有指定,默认从用户命令中取 |
--partition-id | -p | 第一次必填,之后非必填 | 指定提交的高性能AI算力池(2.0+版本为集群ID)的ID,用户首次提交必需此字段,后续会沿用上一次的算力池ID,用户可通过sinfo来查看可用的高性能AI算力池的ID |
--workspace-name | / | 是 | (仅限2.0+版本)指定任务所属工作空间,当前版本workspace-name跟之前workspace-id,语义一样 |
--framework | -f | 是 | 指定训练任务的训练框架,可以是pytorch、tensorflow、senseparrots(新增)、mpi(新增) |
--force | -y | 否 | 指是否要跳过自动推测功能 |
--resource <xxx> | -r | 是 | 指定任务所需的资源规格,仅支持高性能AI算力池当前支持的规格和配比,详见sinfo |
--priority <xxx> | / | 否 | 指定任务优先级,可选字段包括normal、high、highest,工作空间所有者以上权限支持配置high、highest优先级 |
--Node | -n | 是 | 指以上资源规格的数量,如以上规格为8卡,n为2,则该任务总计16卡 |
--container-image=<xxx:tag> | / | 否 | 指定任务所用的镜像名称,不填充时默认使用当前云开发机实例所使用的镜像。需要注意的是私有镜像需要指明命名空间,如:--container-image=/namespace/image_name:1.0 |
--container-mounts=<xxx:xxx,xxx:xxx> | / | 否 | 指定任务挂载的共享存储路径,不填充时默认使用当前云开发机实例所挂载的所有共享存储路径。可以指定多个文件存储进行挂载。如:--container-mounts=volume1_id:path1,volume2_id:path2 |
--transom | / | 否 | (仅限2.0+版本) 开启训练任务容错功能,开启后我们会在任务运行前或出错时为您检测GPU以及通信是否征程 |
--restarttimes-max | / | 否 | (仅限2.0+版本)开启容错后,您可以配置允许执行容错的最大次数,可接受0-100的整数,默认值为3 |
--async | -a | 否 | 异步提交任务,任务提交后cli退出,日志存储在当前/指定路径下 |
--output | -o | 否 | 任务日志输出在指定路径下 |
--version | -v | 否 | 查看srun的当前版本 |
--help | -h | 否 | 查看srun的相关使用说明 |
Sbatch可配置的字段与Srun相同。需要注意的是,Sbatch需要在每一个配置的选项前输入#SBATCH
且需要换行输入。
3. 作业管理
Slurm兼容工具支持您通过Scontrol和Scancel对已创建的任务进行查看和管理,新版本支持用户通过Scontrol进行任务的状态变更,详细如下:
任务查看
命令内容及配置参数 | 缩写 | 命令说明 |
---|---|---|
scontrol show job <jobid> | / | 查看任务详细信息,返回默认结果 |
--format | -o | 以json/yaml/xml格式输出至终端 |
scontrol show image | / | 查看当前可用的镜像情况,包括镜像名称,镜像来源,镜像适配的资源类型,是否使用mpi,适用的框架等信息 |
scontrol show log | / | 查看可用的训练日志 |
scontrol show -h | / | 查看scontrol show相关的使用说明 |
--follow | -f | 未结束的任务的日志以流的方式持续输出 |
--version | -v | 查看scontrol的当前版本 |
--help | -h | 查看scontrol的相关使用说明 |
--page-size | / | 限制获取任务条数,范围:1~500,page size 默认值:10 |
--page-token | / | 跳转到第几页,默认值:1 |
任务暂停/重启
命令内容及配置参数 | 缩写 | 命令说明 |
---|---|---|
scontrol suspend/resume job <jobid> | / | 暂停/重启指定ID的任务 |
--partition-id | -p | 需要暂停的任务所在的高性能AI算力池(2.0+版本为集群ID) |
--workspace-name | / | 是 |
scontrol suspend/resume -v | / | 查看scontrol suspend/resume的当前版本 |
scontrol suspend/resume -h | / | 查看scontrol suspend/resume相关的使用说明 |
注:只有运行中的任务可被暂停,只有被暂停的任务可被重启。重启后的任务将重新进入排队队列。
任务更新
命令内容及配置参数 | 缩写 | 命令说明 |
---|---|---|
scontrol update job <jobid> | / | 更新指定运行中的任务 |
--priority | / | 需要更新的任务的优先级,如,指定--priority=high |
--begin | / | 需要更新的任务的定时时间,可指定现在=now,或指定时间,如=2023-01-02T15:04 |
--partition-id | -p | 需要暂停的任务所在的高性能AI算力池(2.0+版本为集群ID) |
--workspace-name | / | 是 |
scontrol update -v | / | 查看scontrol update的当前版本 |
scontrol update -h | / | 查看scontrol update相关的使用说明 |
任务取消
命令内容及配置参数 | 缩写 | 命令说明 |
---|---|---|
scancel <jobid...> | / | 指定任务id取消任务,可以传多个jobid,上限为30个。 |
--partition-id | -p | 需要暂停的任务所在的高性能AI算力池(2.0+版本为集群ID) |
--workspace-name | / | 是 |
--force | -y | 确认多个任务批量取消 |
--version | -v | 查看scancel的当前版本 |
--help | -h | 查看scancel的相关说明 |
通过scancel删除任务,记录也会一并被删除,sacct也不会查询到该记录。
4. 高性能AI算力池(2.0为集群)查看
Slurm兼容工具支持您通过sinfo和squeue来查看当前高性能AI算力池的资源情况和排队任务情况,详细如下:
高性能AI算力池信息
命令内容及配置参数 | 缩写 | 命令说明 |
---|---|---|
sinfo | / | 用户有权限的集群和工作空间的信息,返回默认结果字段 |
--format | -o | 指定查看的字段 |
--Node | -N | 展示用户有权限的工作空间所关联的集群中的节点 |
--partition-id | -P | 需要结合-N使用,展示指定集群的节点 |
--workspace-name | / | 查看某一个工作空间关联的所有集群的信息以及这些集群的总容量、已用资源和剩余资源,包括GPU、vCPU和内存 |
--states | -t | 需要结合-N使用,展示指定状态的节点,支持DISABLE ENABLED UNKNOW |
--version | -v | 查看sinfo的当前版本 |
--help | -h | 查看sinfo的相关使用说明 |
sinfo的默认展示字段为
- PARTITION_ID(有权限的工作空间所关联的所有集群ID)
- PARTITION_NAME(有权限的工作空间所关联的所有集群名称)
- WORKSPACE_ID(有权限的工作空间ID)
- WORKSPACE_NAME(有权限的工作空间NAME)
- RESOURCE(该集群可以支持的任务规格的ID,在提交训练任务时为resource字段赋值)
- DESCRIPTION(该集群可以支持的任务规格的描述)
用户亦可对以上字段进行配置和指定查看。
排队情况
命令内容及配置参数 | 缩写 | 命令说明 |
---|---|---|
squeue | / | 该用户的所有Running/Pending/Suspended状态的任务,返回默认结果字段 |
--workspace-name | / | (仅限2.0+版本)任务是属于工作空间的,因此必须指定查看某一个工作空间下的任务的排队情况 |
--format | -o | 指定查看的字段 |
--all | -a | 指定所有状态的任务 |
--version | -v | 查看squeue的当前版本 |
--help | -h | 查看squeue的相关使用说明 |
squeue的默认展示字段为
- Partition-id(高性能AI算力池ID,2.0+版本为集群ID)
- WORKSPACE_NAME (工作空间名称)
- User(用户名)
- JobID(任务ID)
- JobName(任务名称)
- Resource(申请资源规格)
- Node(节点数量)
- State(任务状态)
- FrameWork(任务框架类型)
- SubmitTime(创建时间)
- ElapsedTime(运行时长)
- a(查看所有状态任务,对pending的任务做置顶排序)
用户亦可对以上字段进行配置和指定查看。
历史任务提交情况
命令内容及配置参数 | 缩写 | 命令说明 |
---|---|---|
sacct | / | 该用户的历史提交的最近50条记录,返回默认结果字段 |
--workspace-name | / | (仅限2.0+版本)任务是属于工作空间的,因此必须指定查看某一个工作空间下的任务的排队情况 |
--submit=<yyyy-mm-ddThh:mm> | / | 查看指定时间以后提交的任务,如=2022-12-22T15:04 |
--format | -o | 指定查看的字段 |
--version | -v | 查看sacct的当前版本 |
--help | -h | 查看sacct的相关使用说明 |
sacct的默认展示字段为
- JobID(任务ID)
- User(用户名)
- Partition-id(高性能AI算力池ID,2.0+版本为集群ID)
- WORKSPACE_NAME (工作空间名称)
- JobName(任务名称)
- Resource(申请资源规格)
- Node(节点数量)
- State(任务状态)
- FrameWork(任务框架类型)
- ElapsedTime(运行时长)
- SubmitTime(创建时间)
5. 更新安装
若您使用的是新版本算力池产品,那么您需要升级SCC版本,以通过以下链接手动更新安装下载:https://scc.aoss.cn-sh-01.sensecoreapi-oss.cn/latest/install.sh
wget或curl均支持,如:
export SCC_ENV=cn
export SCC_ZONE=cn-sh-01a
curl https://scc.aoss.cn-sh-01.sensecoreapi-oss.cn/latest/install.sh | bash
export SCC_ENV=cn
export SCC_ZONE=cn-sh-01a
wget https://scc.aoss.cn-sh-01.sensecoreapi-oss.cn/latest/install.sh
chmod +x install.sh
./install.sh
当您成功完成安装更新后,应在终端内看到如下提示:
Installed successfully, use srun/sinfo/scancel/squeue/scontrol command to show more info.
并显示当前CLI的最新版本号。
Slurm兼容工具命令示例
当您刚进入云开发机使用Slurm兼容工具时,我们推荐您先使用sinfo,来查看确认当前可用的高性能AI算力池资源,以及相应的高性能AI算力池ID,再根据以上信息提交任务。
- 在
partition10
的集群和workspace10
的工作空间中,运行一个名为vpname1
的pytorch任务,使用mpi通信方式,使用默认资源规格,用在/training目录下的demo.py 文件训练,并设置batchsize=16,epoch=100
srun --partition-id partition10 --workspace-name workspace10 -j vpname1 -m -r --framework pytorch python training/demo.py --batch-size=16 --epoch=100
- 一个分布式代码的示例:
srun -p b181a053-8c87-4e7d-a924-9bc0d1390ed5 \
--workspace-name workspace10 \
-j in1k -r 8xA100-80GB --framework pytorch \
--output out.log \
bash -c " \
conda init bash && \
conda activate cloud-ai-lab && \
PYTHONPATH="$(dirname $0)/.":$PYTHONPATH && \
python -m torch.distributed.run \
--nnodes=1 \
-node rank=$RANK \
--master addr=$MASTER_ADDR \
-nproc_per_node=$WORLD_SIZE \
--master_port=$MASTER_PORT \
$(dirname "$0")/tools/train.py \
$CONFIG \
--launcher pytorch "
- 查看一个在工作空间
workspace10
,高性能AI算力池(集群)partition101
指定任务ID为pt-2igx7wif
的任务情况并以json的格式返回,
show job pt-2igx7wif -p partition101 --workspace-nam workspace10 -o json
- 查看命令说明(sinfo、sbatch、srun、scancel、squeue、sacct、scontrol)
man sinfo/sbatch/srun/scancel/sacct/squeue/scontrol
FAQ
Q1: Slurm兼容工具当前支持的资源规格是怎么样的,是否可以自己配置gpu、cpu和mem?
A1: 当前因算力池仅支持以固定的资源规格提交,slurm兼容工具的规格遵循算力池的定义,可以使用sinfo查看不同集群对应的可提交任务规格(resource字段)
用户可通过配置N(容器)的数量。
Q2: 为什么我在Slurm上用的脚本和代码无法直接复用?
A2: Slurm兼容工具尽可能从功能和命令语法层面来还原用户在Slurm上的使用体验。但因为SenseCore底层采用了基于k8s的容器化高性能AI算力池管理技术,与Slurm系统本身有根本性的差异,有些k8s必须配置的字段是在Slurm使用时无需输入的,也有部分Slurm系统可以直接获取到的配置需要在k8s的系统上用户指定输入。
比如您需要在任务的启动命令里输入一些虚拟环境的激活命令,并配置其他环境变量信息,Slurm兼容工具默认会获取云开发机当前的镜像、环境信息。
Q3: 我在开发机里安装了很多包和工具,为什么在送去高性能AI算力池训练的时候无法生效?
A3: 我们暂时无法实时获取您在开发机内做的所有变动并在高性能AI算力池发起任务的时候复现这些配置。 您可以在云开发机内完成环境的配置后,在云开发机的控制台发起对当前开发机的状态的保存。完成保存后,您将获得一个开发机镜像的快照,并且可在Slurm兼容工具内,通过scontrol查看镜像时,查看到这个您刚创建的镜像快照。 因此您可以后续在提交任务时,配置基于该镜像快照,向算力池提交任务,从而实现开发机的配置状态在算力池内进行复现的效果,减少环境对齐时的工作。
如果您关于Slurm兼容工具有任何疑问或建议,请欢迎随时联系我们。您的支持和反馈是我们进步最大的动力!