作业系统¶
Slurm系统简介¶
在公共集群中使用SLURM作业调度系统进行任务的调度和管理。SLURM (Simple Linux Utility for Resource Management)是一种可用于大型计算节点集群的高度可伸缩和容错的集群管理器和作业调度系统,被世界范围内的超级计算机和计算集群广泛采用。
Slurm常用命令¶
|
查看节点与分区状态 |
|
查看队列状态 |
|
取消作业 |
|
查看历史作业信息 |
|
分配资源 |
|
提交批处理作业 |
|
系统控制 |
|
执行作业 |
日常使用超算资源只需掌握简单的几条命令即可,具体详细的配置请参考SLURM官方文档。
查询状态¶
sinfo
:查看节点与分区状态
$ sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
cpu* up infinite 1 down* n144
cpu* up infinite 168 alloc n[3-143,145-171]
关键词 |
含义 |
|
分区名,对节点的逻辑分组。不同的分区会设置不同权限、资源限制等。 |
|
可用状态: |
|
该分区的作业最大运行时长限制, |
|
节点数量 |
|
状态: |
|
节点列表 |
squeue
:查看队列状态
$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
8628 cpu vasp_cpu yangx17 PD 0:00 2 (QOSMaxNodePerUserLimit)
8629 cpu vasp_cpu yangx17 PD 0:00 2 (QOSMaxNodePerUserLimit)
8630 cpu vasp_cpu yangx17 PD 0:00 2 (QOSMaxNodePerUserLimit)
8636 cpu vasp_cpu mab2019 PD 0:00 4 (Resources)
8637 cpu vasp lizhenhu PD 0:00 1 (Priority)
5042 cpu HICE_WAC xum17 R 16-22:28:14 4 n[114-117]
5044 cpu LICE_WAC xum17 R 16-22:21:58 4 n[29,41-43]
5519 cpu c zhaosy16 R 14-22:00:21 5 n[93-95,165-166]
5783 cpu c liangt20 R 13-20:54:50 5 n[30-32,156-157]
关键词 |
含义 |
|
作业的id号,每个成功提交的任务都会有唯一的id |
|
分区名 |
|
作业名称,默认为提交脚本的名称 |
|
用户名,提交该作业的用户名 |
|
作业状态: |
|
作业运行时间 |
|
作业占节点数 |
|
作业所占节点列表,如果是排队状态的任务,则会给出排队原因 |
scancel
:取消作业
Slurm作业提交¶
Slurm作业通常分为交互式和批量式两种。交互式作业通常用于代码编译、脚本调试、交互式计算等工作。长期后台计算的任务通常以作业脚本的方式进行批量提交。
交互作业¶
集群的登录节点设置有资源限制,请勿在登录节点进行大量计算。
集群的计算节点默认不允许用户直接登录,对需要交互式处理的程序,在登录到集群后,使用salloc
命令分配节点,然后再ssh到分配的节点上进行处理:
计算完成后,使用exit
命令推出节点,注意需要exit
两次,第一次exit
是从计算节点退出到登录节点,第二次exit
是释放所申请的资源。
批量作业¶
可以通过将程序执行命令放入作业提交脚本,并通过sbatch
命令作业提交的方式在集群中进行计算。
一个简单的脚本示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ### 表示这是一个bash脚本
#!/bin/bash
### 设置该作业的作业名
#SBATCH --job-name=JOBNAME
### 指定该作业需要2个节点数
#SBATCH --nodes=2
### 每个节点所运行的进程数为40
#SBATCH --ntasks-per-node=40
### 作业最大的运行时间,超过时间后作业资源会被SLURM回收
#SBATCH --time=2:00:00
### 程序的执行命令
mpirun hostname
|
注意
上述中###
为注释行。
第一行表示这是一个bash脚本,第4-17行以#SBATCH
开头的命令表示这些是需要slurm系统处理的参数。
如下图所示,通过sbatch+作业脚本名
提交作业,系统会返回作业编号,通过squeue
命令可以看到作业运行状态,等作业执行完成后,默认会把程序的输出放到slurm-作业编号.out
的文件中,可通过该文件查看程序的输出。
GPU集群作业提交¶
如果是GPU集群,需要在作业脚本中增加--gres=gpu:<number of card>
参数。例如#SBATCH --gres=gpu:2
,意味着指定2张GPU卡数。
以下为GPU作业的一个示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ### 表示这是一个bash脚本
#!/bin/bash
### 该作业的作业名
#SBATCH --job-name=gpu-example
### 该作业需要1个节点
#SBATCH --nodes=1
### 该作业需要16个CPU
#SBATCH --ntasks=16
### 申请1块GPU卡
#SBATCH --gres=gpu:1
### 程序的执行命令
python test.py
|
注意
GPU集群中提交作业时,需要在srun
或 sbatch
命令中增加参数-s
,或者 --oversubscribe
。表示允许与其它作业共享资源。
例如:
1 | $sbatch -s job.sh
|
常见提交作业参数参考¶
参数 |
说明 |
|
设定作业名称 |
|
设定作业需要的节点数。如果没有指定,默认分配足够的节点来满足 |
|
设定每个节点上的任务数。要和``–nodes=<n>``同时配合使用。 |
|
设定最多启动的任务数。 |
|
设定每个任务所需要的CPU核数。如果没有指定,默认为每个任务分配一个CPU核。一般运行OpenMP等多线程程序时需要,普通MPI程序不需要。 |