目录
一、前言
本文基于北京超级云计算中心A分区平台介绍Slurm的用法,主要目的是让没接触过Slurm作业调度系统的人可以快速上手,轻松的提交与管理自己的作业。BSCC-A5超算的每个节点具有2颗32核AMD EPYC 7452@2.35GHz CPU组成,单节点64核,256GB内存,每个队伍最多使用2个节点共128核资源,节点间通过56Gb Infiniband 高速网互联。
二、Slurm介绍
Slurm是一个开源,容错,高度可扩展的集群管理和作业调度系统,适用于大型和小型Linux集群。Slurm不需要对其操作进行内核修改,并且相对独立。作为集群工作负载管理器,Slurm有三个关键功能。首先,它在一段时间内为用户分配对资源(计算节点)的独占和/或非独占访问,以便他们可以执行工作。其次,它提供了一个框架,用于在分配的节点集上启动,执行和监视工作(通常是并行作业)。最后,它通过管理待处理工作的队列来仲裁资源争用。
三、如何使用
对于集群使用者而言,其通常不需要过于关注集群的内部结构与节点之间网络连接情况,Slurm就提供了简单易用的命令将集群计算资源的使用难度降到了最低,以下依次列出对于用户而言常用的Slurm指令。
命令 | 功能描述 |
---|---|
sinfo | 查看节点和分区信息 |
squeue | 查看调度队列中作业信息 |
srun | 运行并行作业 |
sbatch | 用批处理脚本提交作业 |
scancel | 取消已提交的作业 |
salloc | 用于申请节点资源 |
sacct | 查看历史作业信息 |
sinfo 查看节点和分区信息
sinfo
查看当前账号可使用的队列资源信息
相关信息解释:
参数 | 解释 |
---|---|
PARTITION | 分区名(队列名) |
AVAIL | 队列是否可用,up(可用)、inact(不可用) |
TIMELIMIT | 该队列作业运行时间限制,infinite(不限时) |
NODES | 节点数 |
STATE | 节点状态,drain(故障)、alloc(已被分配)、idle(可用)、down(下线)、mix(部分占用) |
NODELIST | 节点列表 |
squeue 查看调度队列中作业信息
squeue
查看调度队列中作业信息
相关信息解释:
参数 | 解释 |
---|---|
JOBID | 作业号 |
PARTITION | 作业运行的队列名 |
NAME | 作业名可自定义 |
USER | 该作业所属账号名 |
ST | 作业状态,R(运行中)、PD(排队中)、CG(将完成)、CD(已完成) |
NODES | 作业所使用节点数 |
NODELIST(REASON) | 作业所使用节点列表 |
srun 运行并行作业
一个srun命令样例,表示指定队列名为amd_256
,节点数为1
,每个进程的核数为64
,作业的运行时间限制为1
分钟,作业名为pivot1
,可执行文件为pivot
。
srun -p amd_256 -N 1 -c 64 -t 1 -J pivot1 pivot
常用参数
参数 | 解释 |
---|---|
-N [count] | 指定节点数count |
-n [count] | 指定进程数count |
-c [count] | 指定每个进程核数为count |
-p [name] | 指定提交作业到name队列 |
-w fa[0101-0102] | 指定提交作业到fa0101和fa0102节点 |
-x fa[0103-0104] | 提交作业时排除fa0103和fa0104节点 |
-o [filename] | 指定标准输出到filename文件 |
-e [filename] | 指定重定向错误输出到filename文件 |
-J [jobname] | 指定作业名为jobname |
-t [time] | 限制运行time分钟 |
sbatch 用批处理脚本提交作业
每次都使用一长串命令提交作业比较麻烦,不够优雅,sbatch
命令可以解析已经写好的脚本提交任务,一个脚本示例run.sh
和用法如下。
#!/bin/bash
#SBATCH -p amd_256
#SBATCH -N 1
#SBATCH -c 64
#SBATCH -t 1
#SBATCH -J pivot1
./pivot
该脚本使用方法为
sbatch run.sh
表示指定队列名为amd_256
,节点数为1
,每个进程的核数为64
,作业的运行时间限制为1
分钟,作业名为pivot1
,可执行文件为pivot
。
scancel 取消已提交的作业
前文中我们提交作业后会获得一个唯一的JOBID,如果该作业运行时间过长,你想强行终止该作业,就可以使用
scancel JOBID
强行终止该作业,也可通过其他的信息终止某个作业
参数 | 解释 |
---|---|
-n [jobname] | 终止作业名为jobname的作业 |
-p [name] | 终止队列名为name的作业 |
-t PENDING | 终止正在排队的作业 |
-w fa0101 | 终止运行在fa0104节点的作业 |
salloc 用于申请节点资源
salloc申请节点资源,用法如下:
- 执行salloc -p amd_256
- 执行squeue 查看分配到的节点资源,我们分配的的节点是
fa0307
- 执行ssh fa0307登陆到所分配的节点
- 登陆计算节点后可以使用该节点资源
- 不使用节点后,执行scancel JOBID释放节点资源
sacct 查看历史作业信息
使用方法如下,可以查看历史作业的起止时间、结束状态、作业号、作业名、使用的节点数、节点列表、运行时间等。
四、总结
Slurm基础用法已经介绍完毕,上述命令可以满足大部分提交作业的需求,后续将会针对OpenMP、MPI等类型的任务给出代码和Slurm实例。
如果本文能给你带来帮助的话,点个赞鼓励一下作者吧!
五、参考
[1] Slurm Workload Manager:https://slurm.schedmd.com/documentation.html