Slurm常用命令总结

查看可用资源sinfo

[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节点已下线但仍有作业在运行

批处理作业脚本sbatch

​ 批处理是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                  # 执行命令

查看作业状态squeue

[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的作业

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作业超时被杀

删除作业scancel

scancel jobid: 删除 jobid 的作业。

scancel -u username: 删除 username 的全部作业。

scancel -s state: 删除处于 state 状态的作业。

scancel -p partition :仅显示partition分区的任务。

查看任务信息scontrol

scontrol show partition partition_name :详细显示partition_name分区的信息

scontrol show node node_name :详细显示node_name节点信息

scontrol show job job_id :详细显示job_id作业的信息

查询包括已完成作业信息sacct

输出内容会包括,作业号,作业名,分区,计费账户,申请的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

主要负责管理账号,用户,集群分区等资源

# 管理账户

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有对应的优先级,资源限制,最大运行时间,最大作业数以及最大提交数目。

标签: none

添加新评论