[root@master testMPI]# sinfo
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
debug* up infinite 2 idle node[1-2]
#解释
partition 表示分区名、avail 表示分区状态(up 可用,down 不可用),timelimit 表示分区可供最大运行时长,nodes 表示节点数,state 表示节点运行状态,nodelist 表示分区包含的节点列表。
# 常用参数
--help # 显示sinfo命令的使用帮助信息;
-d # 查看集群中没有响应的节点;
-i <seconds> # 每隔相应的秒数,对输出的分区节点信息进行刷新
-n <name_list> # 显示指定节点的信息,如果指定多个节点的话用逗号隔开;
-N # 按每个节点一行的格式来显示信息;
-p # <partition> 显示指定分区的信息,如果指定多个分区的话用逗号隔开;
-r # 只显示响应的节点;
-R # 显示节点不正常工作的原因
state解释
idle | 节点空闲,可接受作业 |
---|---|
alloacted | 该节点已经分配作业且所有核心用满,在作业释放前不能再被分配作业 |
mix | 使用部分核心,仍可以被分配作业 |
drain | 对应节点已经下线 |
drng | 节点已下线但仍有作业在运行 |
批处理是slurm作业调度系统中最经常使用的作业形式之一(另一个是交互式作业)。
#!/bin/bash
#SBATCH -J test # 作业名为 test,也可用--job-name
#SBATCH -o test.out # 屏幕上的输出文件重定向到 test.out,也可用--output
#SBATCH -e test.error # 指定作业标准错误输出文件的名称为test.error
#SBATCH -p gpu # 作业提交的分区为 gpu
#SBATCH --qos=debug # 作业使用的 QoS 为 debug
#SBATCH -N 1 # 作业申请 1 个节点
#SBATCH -n 1 # 作业申请1个进程 --ntasks
#SBATCH --ntasks-per-node=1 # 单节点启动的进程数为 1
#SBATCH --cpus-per-task=4 # 单任务使用的 CPU 核心数为 4
#SBATCH -t 1:00:00 # 任务运行的最长时间为 1 小时 --time
#SBATCH --gres=gpu:1 # 单个节点使用 1 块 GPU 卡
#SBATCh -w node1 # 指定运行作业的节点是 node1,若不填写系统自动分配节点
#SBATCh -x node2 # 指定不使用node2节点运行作业 --exclude
#SBATCh –-exclusive # 指定作业独占计算节点
# 设置运行环境,使用module 管理不同模块
module load gcc/4.8.5 # 添加 gcc/4.8.5 模块
module load mpi/mpich-3.2-x86_64 # mpi/mpich-3.2-x86_64
# 输入要执行的命令,例如 结合srun 等
srun ./test.mpi # 执行命令
JOBID表示任务ID 编号,PARTITION表示作业所在队列(分区),NAME表示任务名称,USER为用户,ST为作业状态,TIME 为已运行时间,NODES 表示占用节点数,NODELIST(REASON)为任务运行的节点列表或者原因说明。另外,状态列中R-Runing(正在运行),PD-PenDing(资源不足,排队中),CG-COMPLETING(作业正在完成中),CA-CANCELLED(作业被人为取消),CD-COMPLETED(作业运行完成),F-FAILED作业运行失败,NF-NODE_FAIL节点问题导致作业运行失败,PR作业被抢占,S作业被挂起,TO作业超时被杀。
[root@master testMPI]# squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
# 参数示例
squeue -l: 以长列表显示更多信息。
squeue -u username: 仅显示属于用户 username 的任务。
squeue -t state: 仅显示处于 state 状态的任务。
squeue -n job_name:仅显示名称为job_name的作业
squeue -p partition :仅显示partition分区的任务。
squeue -jobs job_id :仅显示作业id为job_id的作业
scancel jobid: 删除 jobid 的作业。
scancel -u username: 删除 username 的全部作业。
scancel -s state: 删除处于 state 状态的作业。
scancel -p partition :仅显示partition分区的任务。
scontrol show partition partition_name :详细显示partition_name分区的信息
scontrol show node node_name :详细显示node_name节点信息
scontrol show job job_id :详细显示job_id作业的信息
输出内容会包括,作业号,作业名,分区,计费账户,申请的CPU数量,状态,结束代码
[root@master testMPI]# sacct
JobID JobName Partition Account AllocCPUS State ExitCode
------------ ---------- ---------- ---------- ---------- ---------- --------
109 test_omp debug root 4 COMPLETED 0:0
109.batch batch root 4 COMPLETED 0:0
109.0 hello.omp root 4 COMPLETED 0:0
110 test_omp debug 4 FAILED 1:0
110.batch batch 4 FAILED 1:0
# 参数解释
-b, --brief:显示简要信息,主要包含:作业号jobid、状态status和退出码exitcode。
-c, --completion:显示作业完成信息而非记账信息。
-e, --helpformat:显示当采用 --format指定格式化输出的可用格式。
-E end_time, --endtime=end_time:显示在end_time时间之前(不限作业状态)的作业。
-i, --nnodes=N:显示在特定节点数上运行的作业。
-j job(step) , --jobs=job(.step):限制特定作业号(步)的信息,作业号(步)可以以,分隔。
-l, --long:显示详细信息。
-N node_list, --nodelist=node_list:显示运行在特定节点的作业记账信息。
-R reason_list, -reason=reason_list:显示由于XX原因没有被调度的作业记账信息。
-s state_list, -state=state_list:显示state_list(以,分隔)状态的作业记账信息。
-S, --starttime:显示特定时间之后开始运行的作业记账信息,有效时间格式参见
主要负责管理账号,用户,集群分区等资源
# 管理账户
sacctmgr show account # 查询账户信息
sacctmgr add account new_account # 添加账户信息
sacctmgr modify account new_account set Parent=slurmtest01 # 修改账户信息
sacctmgr delete account new_account # 删除账户信息
# 管理QOS
sacctmgr show qos # 查询QOS
sacctmgr add qos new_qos # 添加QOS
sacctmgr modify qos new_qos set MaxJobsPerUser=4 # 修改QOS,如用户使用核心数,作业数
sacctmgr delete qos new_qos # 删除QOS
# 用户管理
sacctmgr show user (withassoc) # 查询用户
sacctmgr add user testslurm # 添加用户
sacctmgr update user testslurm set QOS=new_qos # 修改用户信息
sacctmgr delete user testslurm # 删除用户信息
1、分区partition
可以看作为一些节点的集合,是为了实现某一类功能而整合起来的一套计算资源的配置,每个分区都有自己的限制。每个分区配置不同,使用限制也不相同。设置分区的目的是为了使得作业在更适合的配置下运行,避免不必要的资源浪费。另外分区中有个使用时长限制,当分区中的作业在超过使用时长的时候还没结束,将会被自动杀死作业。
2、QOS理解
QoS(Quality ofService)和分区不同,它表示服务质量,它更多刻画了作业的属性而非节点的属性。不同任务的特性不同,指定 QoS 可以使得资源更好分配。
QOS有对应的优先级,资源限制,最大运行时间,最大作业数以及最大提交数目。