当前位置: 首页 > 工具软件 > SLURM > 使用案例 >

Slurm常用命令总结

秋博容
2023-12-01

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

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

 类似资料: