资源(Resource)
集群(Cluster)
作业(Job)
分区(Partition)
作业调度系统(Job Schedule System)
调度系统主要作用
单一系统映像
系统资源整合
多任务管理
资源访问控制
换句话说,调度系统是面向集群的操作系统。
Slurm
Slurm是一个开源,容错,高度可扩展的集群管理和作业调度系统,适用于大型和小型Linux集群。Slurm不需要对其操作进行内核修改,并且相对独立。作为集群工作负载管理器,Slurm有三个关键功能。首先,它在一段时间内为用户分配对资源(计算节点)的独占和/或非独占访问,以便他们可以执行工作。其次,它提供了一个框架,用于在分配的节点集上启动,执行和监视工作(通常是并行作业)。最后,它通过管理待处理工作的队列来仲裁资源争用。
(1)主控服务slurmctld
故障切换 资源监控 队列管理 作业调度
(2)记账存储服务slurmdbd
记账数据 配置信息 故障切换
(3)数据库MySQL
记账和配置信息存储
(4)计算代理slurmd
启动任务 监控任务 分层通信
(5)认证服务munge
内部通信认证
扩展性(功能/规模)高性能(提交/调度)灵活性(自定义插件)容错性(服务/节点/作业
资源绑定(CPU、MEM、类GPU加速卡等各类资源)关联调度(如类GPU加速卡关联CPU)
能耗管理(限频、开关机、记账等)拓扑调度(基于拓扑结构调度,限定交换机数等)
优先级策略(Multi-Factor)
作业调度(FairShare/Backfill/ FCFS, etc)
资源竞争(Exclusive/Preempt/Gang, etc)
多级限制(Cluster/Account/User/Partition, etc)
资源预留(CPU/MEM/类GPU加速卡/License等)
MPI兼容(IntelMPI/MVAPICH/OpenMPI,etc)
LSF兼容(bsub/bjobs/bqueue/bhosts, etc)
PBS兼容(qsub/qstat/pbsnodes/pestat, etc)
分析工具(融合Influxdb/ES/HDF5等,方便分析)
批处理作业(采用sbatch命令提交,最常用方式):
对于批处理作业(提交后立即返回该命令行终端,用户可进行其它操作)使用sbatch命令提交作业脚本,作业被调度运行后,在所分配的首个节点上执行作业脚本。在作业脚本中也可使用srun命令加载作业任务。提交时采用的命令行终端终止,也不影响作业运行。
交互式作业提交(采用srun命令提交):
资源分配与任务加载两步均通过srun命令进行:当在登录shell中执行srun命令时,srun首先向系统提交作业请求并等待资源分配,然后在所分配的节点上加载作业任务。采用该模式,用户在该终端需等待任务结束才能继续其它操作,在作业结束前,如果提交时的命令行终端断开,则任务终止。一般用于短时间小作业测试。
实时分配模式作业(采用salloc命令提交):
分配作业模式类似于交互式作业模式和批处理作业模式的融合。用户需指定所需要的资源条件,向资源管理器提出作业的资源分配请求。提交后,作业处于排队,当用户请求资源被满足时,将在用户提交作业的节点上执行用户所指定的命令,指定的命令执行结束后,运行结束,用户申请的资源被释放。在作业结束前,如果提交时的命令行终端断开,则任务终止。典型用途是分配资源并启动一个shell,然后在这个shell中利用srun运行并行作业。
注意:
(1)salloc后面如果没有跟定相应的脚本或可执行文件,则默认选择/bin/sh,用户获得了一个合适环境变量的shell环境。
(2)salloc和sbatch最主要的区别是salloc命令资源请求被满足时,直接在提交作业的节点执行相应任务,而sbatch则当资源请求被满足时,在分配的第一个节点上执行相应任务。
(3)salloc在分配资源后,再执行相应的任务,很适合需要指定运行节点和其它资源限制,并有特定命令的作业。
(1)查看分区——sinfo
sinfo命令参数 | |
---|---|
-p --partition= |
查看指定分区的状态,对应环境变量SINFO_PARTITION。 示例:sinfo -p caspra |
-n --nodes= |
查看指定节点的信息。 示例:sinfo -p caspra -n e02r4n[00-19] |
-N, --Node | 以面向节点(默认为分区)的格式打印信息,每行一个节点。 示例:sinfo -N -p caspra -n e02r4n[00-19] |
-t --states= |
查询指定节点状态的分区或节点的信息。 常见状态包括:alloc idle drain down drng |
-t --states= |
查询指定节点状态的分区或节点的信息。 常见状态包括:alloc idle drain down drng |
-s, --summarize | 查看分区中节点状态的摘要信息。 主要是限制分区中节点的状态统计,如已分配数alloc、空闲数idle、总数total等 |
-o --format= 按照指定的格式显示信息,对应变量SINFO_FORMAT。 |
格式为“%[[.]size] 其中,点号(.)表示右对齐,size表示字段长度,type为代表特定字段的字符(或字符串)。 示例如下: sinfo -o %all 以数显分隔的形式显示所有字段。 sinfo -o "%9P %.5a %.10l %.6D %.6t %N" 显示内容:分区名-分区状态 -最大运行时间-节点数-节点状态-节点列表 |
-O --Format= |
按照指定的字段显示状态信息。 格式为“type[:[.]size],type[:[.]size],…”。 其中,type为代表特定字段的字段名,点号(.)表示右对齐,size表示字段长度。示例如下: sinfo -O all sinfo -O Partition:9,available:.6,time:.11,nodes:.6,statecompact:.6,nodelist:.12 |
(2)查询排队和运行状态的作业——squeue
参数 | 说明 |
-A, --account=account(s) | 查询指定账号的作业,默认全部账号下的作业 |
-j, --jobs |
查看指定JOB IDS的作业信息, 默认显示全部 |
-n, --name= |
查看指定名称的作业信息 |
-p, --partition= |
查看指定分区的作业信息 |
--state= |
指定状态查看作业信息 |
--users= |
指定用户名称查看作业信息 |
(3)删除作业命令——scancel
命令 | 解释 |
scancel |
删除指定作业 |
scancel -t ST | 删除指定状态的作业 |
scancel --account= |
删除指定账号的作业 |
scancel --name= |
删除指定名称的作业 |
scancel --partition= |
删除指定分区的作业 |
scancel --reservation= |
删除指定预约名称的作业 |
scancel --state= |
删除指定状态的作业 |
scancel --user= |
删除指定用户的作业 |
scancel --nodelist= |
删除指定节点的作业 |
(4)控制作业命令——scontrol
命令 | 解释 | 备注 |
scontrol suspend |
挂起作业 | 运行作业可挂起 |
scontrol resume |
恢复作业 | 挂起作业可恢复 |
scontrol requeue |
作业重新排队 | 运行作业可重新排队 |
scontrol hold |
保留作业 | 排队作业可保留 |
scontrol release |
释放作业 | 保留作业可释放 |
6.写在最后
Slurm China社区,以Slurm为切入口讨论HPC相关问题,致力于守卫中国HPC集群稳定运行,推广国产调度器助力中国HPC进步。大家有想加入Slurm China 社区的小伙伴,可以私信或评论区联系我。