Slurm 命令使用说明

发布时间: 更新时间: 总字数:3553 阅读时间:8m 作者:IP:上海 网址
专栏文章
  1. Slurm 开发
  2. Slurm rpmbuild
  3. Slurm 相关术语
  4. Slurm QoS 使用
  5. Slurm Job
  6. Slurm Partition 使用
  7. Slurm REST API 使用
  8. Slurm scontrol 命令
  9. Slurm sacct/sacctmgr 命令
  10. Slurm 命令使用说明(当前)
  11. Slurm sreport 命令
  12. Slurm FaQ
  13. Slurm 安装部署

Slurm Client 使用介绍

常用命令

  • sacct 查看历史作业信息
  • sacctmgr 显示和设置账户关联的 QOS 等信息
  • salloc 分配资源
  • sattach 将标准输入、输出和错误信号功能附加到正在运行的作业或作业步骤
  • sbatch 提交批处理作业,指定的脚本一般会包含一个或多个 srun 命令启动并行任务
  • sbcast 将文件从本地磁盘传输到分配给作业的节点上的本地磁盘
  • scancel 取消排队或运行中的作业
  • scontrol 系统控制
  • sdiag 调度诊断工具
  • seff Perl tools to print Slurm job state information(slurm-contribs)
  • sinfo 查看节点与分区状态
  • smap 作业、分区和节点的状态信息以图形方式显示
  • squeue 查看作业队列状态
  • sreport 从 slurm 会计数据生成报告
  • srun 执行作业
  • sshare 列出群集关联共享的工具,NormShares 表示 公平分享
  • sstat 显示正在运行的作业/步骤的各种状态信息
  • strigger 获取或查看事件触发器
  • sview 图形用户界面,获取和更新 Slurm 管理的作业、分区和节点的状态信息。安装命令 yum install -y slurm-sview-ohpc

sinfo

检查节点状态

bash
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
normal       up 1-00:00:00      3   idle c[1-3]

$ sinfo -R
REASON               USER      TIMESTAMP           NODELIST

$ sinfo -l
Sun Aug 15 15:36:38 2021
PARTITION AVAIL  TIMELIMIT   JOB_SIZE ROOT OVERSUBS     GROUPS  NODES       STATE NODELIST
normal       up 1-00:00:00 1-infinite   no       NO        all      3   allocated c[1-3]

# 查看计算节点 CPU allocated/idle/other/total 情况
$ sinfo --format="%12P %.10n %.5T %.14C"
PARTITION     HOSTNAMES STATE  CPUS(A/I/O/T)
normal        c1        idle      0/32/0/32
normal        c2        idle      0/32/0/32
normal        c3        idle      0/32/0/32

$ sinfo -o "%P %C"
PARTITION CPUS(A/I/O/T)
normal 0/32/0/32
debiug* 0/0/32/32

$ sinfo -p force1 -O CPUs,Nodes,CPUsState

$ sinfo -p normal -O "CPUs,Nodes,AllocMem,Gres,available,CPUsState"
CPUS                NODES               ALLOCMEM            GRES                AVAIL               CPUS(A/I/O/T)
256                 1                   600                 (null)              up                  6/250/0/256

$ sinfo -O GresUsed,Gres
GRES_USED           GRES
gpu:0               (null)
gpu:tesla:0(IDX:N/A)gpu:tesla:2

$ sinfo -o "%P %C %T %G %GresUsed"
PARTITION CPUS(A/I/O/T) STATE GRES GRESresUsed
p1 12/244/0/256 mixed (null) (null)resUsed
p2 0/48/0/48 idle gpu:tesla:2 gpu:tesla:2resUsed
gpu 0/48/0/48 idle gpu:tesla:2 gpu:tesla:2resUsed

$ sinfo -o "%all"
AVAIL|ACTIVE_FEATURES|CPUS|TMP_DISK|FREE_MEM|AVAIL_FEATURES|GROUPS|OVERSUBSCRIBE|TIMELIMIT|MEMORY|HOSTNAMES|NODE_ADDR|PRIO_TIER|ROOT|JOB_SIZE|STATE|USER|VERSION|WEIGHT|S:C:T|NODES(A/I) |MAX_CPUS_PER_NODE |CPUS(A/I/O/T) |NODES |REASON |NODES(A/I/O/T) |GRES |TIMESTAMP |PRIO_JOB_FACTOR |DEFAULTTIME |PREEMPT_MODE |NODELIST |CPU_LOAD |PARTITION |PARTITION |ALLOCNODES |STATE |USER |CLUSTER |SOCKETS |CORES |THREADS
up|(null)|256|0|1951925|(null)|all|YES:4|3-00:00:00|2051799|c3|c3|1|no|1-infinite|mix|Unknown|20.11.8|1|2:64:2|1/0 |UNLIMITED |12/244/0/256 |1 |none |1/0/0/1 |(null) |Unknown |1 |n/a |GANG,REQUEUE |c3 |8.26 |p1 |p1 |all |mixed |Unknown |N/A |2 |64 |2
up|(null)|48|0|353600|(null)|all|YES:4|3-00:00:00|385414|c1|c1|1|no|1-infinite|mix|Unknown|20.11.8|1|2:12:2|1/0 |UNLIMITED |6/42/0/48 |1 |none |1/0/0/1 |gpu:tesla:2 |Unknown |1 |n/a |GANG,REQUEUE |c1 |0.02 |p2 |p2 |all |mixed |Unknown |N/A |2 |12 |2
up|(null)|48|0|353600|(null)|all|YES:4|3-00:00:00|385414|c1|c1|1|no|1-infinite|mix|Unknown|20.11.8|1|2:12:2|1/0 |UNLIMITED |6/42/0/48 |1 |none |1/0/0/1 |gpu:tesla:2 |Unknown |1 |n/a |GANG,REQUEUE |c1 |0.02 |gpu |gpu |all |mixed |Unknown |N/A |2 |12 |2

$ sinfo -o "%10P %.5a %.10l %.16F  %40N %E"
PARTITION  AVAIL  TIMELIMIT   NODES(A/I/O/T)  NODELIST                                 REASON
normal       up 3-00:00:00          1/0/0/1  c3                  none
normal       up 3-00:00:00          1/0/0/1  c1                         none
gpu           up 3-00:00:00          1/0/0/1  c1                         none

$ sinfo -p normal -o "%m %e %a %n"
MEMORY FREE_MEM AVAIL HOSTNAMES
505465 N/A up c1
505465 493951 up c2
505465 494037 up c3

参数含义

  • PARRITION:节点所在分区
  • AVAIL:分区状态
    • up 可用
    • down 不可用
  • TIMELIMIT:程序运行最大时长,infinite 表示不限制,限制时格式为:days-houres:minutes:seconds
  • NODES:节点数
  • STATE:节点状态(如果状态后跟*,表示节点没有响应),可能的状态包括:
    • allocated、alloc:已分配
    • completing、comp:完成中
    • down:宕机
    • drained、drain:已失去活力
    • fail:失效
    • idle:空闲
    • mixed:混合,节点在运行作业,但有些空闲 CPU 核,可接受新作业
    • reserved、resv:资源预留
    • unknown、unk:未知原因
  • NODELIST:节点名列表

命令行参数

  • -a, –all 查看所有分区信息
  • -d, –dead 查看处于 dead 状态的详细信息
  • -l, –long 查看分区详细信息
  • -N, –Node 查看节点信息
  • -p , –partition= 查看指定分区信息
  • -t , –state= 查看指定状态的节点

squeue

bash
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 4    normal     bash xiexianb  R      13:43      3 c[1-3]
$ squeue -r/-q all/-a

# 查看指定作业的信息
$ squeue -j <job-id>

# 查看指定作业的详细信息
$ squeue -j <job-id> -l

# 查看指定账户的作业信息
$ squeue -u <usename>

# 查看指定 parition 的作业信息
$ squeue -p <parition-name>

# 查看指定节点的作业信息
$ squeue -w <hostname>

# 交替显示作业队列,SchedulerTimeSlice=30
$ squeue -i 30

参数含义:

  • JOBID:作业号
  • PARITION:分区名
  • NAME:作业名
  • USER:用户名
  • ST:状态,常见的状态包括:
    • PD:排队中,PENDING
    • R:运行中,RUNNING
    • CA:已取消,CANCELLED
    • CF:配置中,CONFIGURING
    • CG:完成中,COMPLETING
    • CD:已完成,COMPLETED
    • F:已失败,FAILED
    • TO:超时,TIMEOUT
    • NF:节点失效,NODE FAILURE
    • SE:特殊退出状态,SPECIAL EXIT STATE
    • S:挂起,SUSPENDED
    • PR:抢占,PREEMPTED
  • TIME:运行时长,格式为:days-houres:minutes:seconds
  • NODELIST(REASON):节点名列表,若异常显示原因
    • AssociationCpuLimit:作业指定的关联 CPU 已在用,作业最终会运行
    • AssociationMaxJobsLimit:作业关联的最大作业数已到,作业最终会运行
    • AssociationNodeLimit:作业指定的关联节点已在用,作业最终会运行
    • AssociationJobLimit:作业达到其最大允许的作业数限制
    • AssociationResourceLimit:作业达到其最大允许的资源限制
    • AssociationTimeLimit:作业达到时间限制
    • BadConstraints:作业含有无法满足的约束
    • BeginTime:作业最早开始时间尚未达到
    • Cleaning:作业被重新排入队列,并且仍旧在执行之前运行的清理工作
    • Dependency:作业等待一个依赖的作业结束后才能运行
    • FrontEndDown:没有前端节点可用于执行此作业
    • InactiveLimit:作业达到系统非激活限制
    • InvalidAccount:作业用户无效,建议取消该作业重新采用正确账户提交
    • InvalidQOS:作业 QOS 无效,建议取消该作业重新采用正确 QoS 提交
    • JobHeldAdmin:作业被系统管理员挂起
    • JobHeldUser:作业被用户自己挂起
    • JobLaunchFailure:作业无法被启动,有可能因为文件系统故障、无效程序名等
    • Licenses:作业等待相应的授权
    • NodeDown:作业所需的节点宕机
    • NonZeroExitCode:作业停止时退出代码非零
    • PartitionDown:作业所需的队列出于 DOWN 状态
    • PartitionInactive:作业所需的队列处于 Inactive 状态
    • PartitionNodeLimit:作业所需的节点超过所用队列当前限制
    • PartitionTimeLimit:作业所需的队列达到时间限制
    • PartitionCpuLimit:该作业使用的队列对应的 CPU 已经被使用,作业最终会运行
    • PartitionMaxJobsLimit:该作业使用的队列的最大作业数已到,作业最终会运行
    • PartitionNodeLimit:该作业使用的队列对指定的节点都已在用,作业最终会运行
    • Priority:作业所需的队列存在高等级作业或预留
    • Prolog:作业的 PrologSlurmctld 前处理程序仍旧在运行
    • QOSJobLimit:作业的 QOS 达到其最大作业数限制
    • QOSResourceLimit:作业的 QOS 达到其最大资源限制
    • QOSGrpCpuLimit: 作业的 QoS 的指定所有 CPU 已被占用,作业最终会运行
    • QOSGrpMaxJobsLimit:作业的 QoS 的最大作业数已到,作业最终会运行
    • QOSGrpNodeLimit:作业的 QoS 指定的节点都已经被占用,作业最终会运行
    • QOSTimeLimit:作业的 QOS 达到其时间限制
    • QOSUsageThreshold:所需的 QOS 阈值被违反
    • ReqNodeNotAvail:作业所需的节点无效,如节点宕机
    • Reservation:作业等待其预留的资源可用
    • Resources:作业将要等待所需要的资源满足后才运行
    • SystemFailure:Slurm 系统失效,如文件系统、网络失效等
    • TimeLimit:作业超过去时间限制
    • QOSUsageThreshold:所需的 QOS 阈值被违反
    • WaitingForScheduling:等待被调度中

节点

slurm 节点状态:

  • alloc 节点已经分配了一个或者多个作业且所有核心用满
  • drain 节点已经下线
  • down 节点下线
  • drng 已下线但仍有作业在运行
  • idle 节点可用
  • mix 核心部分占用
  • unk 未知

计算节点:

text
slurmd -C

scancel

bash
# 取消作业
$ scancel <job-id>
# Cancel array ID 1 to 3 from job array 20
$ scancel 20_[1-3]

# Cancel array ID 4 and 5 from job array 20
$ scancel 20_4 20_5

# Cancel all elements from job array 20
$ scancel 20

# Cancel the current job or job array element (if job array)
if [[ -z $SLURM_ARRAY_JOB_ID ]]; then
  scancel $SLURM_JOB_ID
else
  scancel ${SLURM_ARRAY_JOB_ID}_${SLURM_ARRAY_TASK_ID}
fi

# 取消指定作业名的作业
scancel -n <job-name>

# 取消指定队列的作业
scancel -p <parition-name>

# 取消正在排队的作业
scancel -t PENDING

# 取消指定计算节点上的作业
scancel -w <hostname>

# 取消执行用户的作业
scancel -u <uid>

大量作业需要取消时,使用 scancel 会有限制删除策略。要快速删除作业,可以将 slurmctld 服务停止后删除 job_state 文件,再重启服务。

sbcast

bash
$ salloc -N1024 bash
$ sbcast a.out /tmp/joe.a.out

seff

bash
# 查看作业的 CPU、Memory 使用率
$ seff 301
Job ID: 301
Cluster: hpc
User/Group: abc/abc
State: CANCELLED (exit code 0)
Nodes: 1
Cores per node: 2
CPU Utilized: 00:00:26
CPU Efficiency: 48.15% of 00:00:54 core-walltime
Job Wall-clock time: 00:00:27
Memory Utilized: 0.00 MB (estimated maximum)
Memory Efficiency: 0.00% of 4.88 GB (2.44 GB/core)

strigger

text
# 获取触发器
strigger --get

sdiag

bash
[root@sms ~]# sdiag
*******************************************************
sdiag output at Sun Aug 15 13:50:03 2021 (1629049803)
Data since      Sun Aug 15 13:51:03 2021 (1629049863)
*******************************************************
Server thread count:  3
Agent queue size:     0
Agent count:          0
Agent thread count:   0
DBD Agent queue size: 0

Jobs submitted: 0
Jobs started:   0
Jobs completed: 0
Jobs canceled:  0
Jobs failed:    0

Job states ts:  Sun Aug 15 13:50:03 2021 (1629049803)
Jobs pending:   0
Jobs running:   0

Main schedule statistics (microseconds):
	Last cycle:   47
	Max cycle:    47
	Total cycles: 1
	Mean cycle:   47
	Mean depth cycle:  0
	Last queue length: 0

Backfilling stats
	Total backfilled jobs (since last slurm start): 0
	Total backfilled jobs (since last stats cycle start): 0
	Total backfilled heterogeneous job components: 0
	Total cycles: 0
	Last cycle when: N/A
	Last cycle: 0
	Max cycle:  0
	Last depth cycle: 0
	Last depth cycle (try sched): 0
	Last queue length: 0
	Last table size: 0

Latency for 1000 calls to gettimeofday(): 20 microseconds

Remote Procedure Call statistics by message type
	REQUEST_PARTITION_INFO                  ( 2009) count:2      ave_time:412    total_time:825
	MESSAGE_NODE_REGISTRATION_STATUS        ( 1002) count:1      ave_time:857    total_time:857
	REQUEST_NODE_INFO                       ( 2007) count:1      ave_time:711    total_time:711
	REQUEST_JOB_INFO                        ( 2003) count:1      ave_time:310    total_time:310
	REQUEST_STATS_INFO                      ( 2035) count:1      ave_time:427    total_time:427

Remote Procedure Call statistics by user
	root            (       0) count:6      ave_time:521    total_time:3130

Pending RPC statistics
	No pending RPCs

sprio

查看作业优先级的具体构成因素

bash
$ sprio
          JOBID PARTITION   PRIORITY       SITE  FAIRSHARE  PARTITION        QOS
             23 debug           1219          0        220       1000          0
             24 normal          2000          0       1000       1000          0

sstat

报告正在运行的作业/作业步的信息,包含状态采集

bash
$ sstat 2 -p
JobID|MaxVMSize|MaxVMSizeNode|MaxVMSizeTask|AveVMSize|MaxRSS|MaxRSSNode|MaxRSSTask|AveRSS|MaxPages|MaxPagesNode|MaxPagesTask|AvePages|MinCPU|MinCPUNode|MinCPUTask|AveCPU|NTasks|AveCPUFreq|ReqCPUFreqMin|ReqCPUFreqMax|ReqCPUFreqGov|ConsumedEnergy|MaxDiskRead|MaxDiskReadNode|MaxDiskReadTask|AveDiskRead|MaxDiskWrite|MaxDiskWriteNode|MaxDiskWriteTask|AveDiskWrite|TRESUsageInAve|TRESUsageInMax|TRESUsageInMaxNode|TRESUsageInMaxTask|TRESUsageInMin|TRESUsageInMinNode|TRESUsageInMinTask|TRESUsageInTot|TRESUsageOutAve|TRESUsageOutMax|TRESUsageOutMaxNode|TRESUsageOutMaxTask|TRESUsageOutMin|TRESUsageOutMinNode|TRESUsageOutMinTask|TRESUsageOutTot|
2.0|1337996K|c1|0|1337996K|876440K|c1|0|876440K|0|c1|0|0|00:02.000|c1|0|00:02.000|1|0|Unknown|Unknown|Unknown|0|8526169|c1|0|8526169|34422|c1|0|34422|cpu=00:00:02,energy=0,fs/disk=8526169,mem=876440K,pages=0,vmem=1337996K|cpu=00:00:02,energy=0,fs/disk=8526169,mem=876440K,pages=0,vmem=1337996K|cpu=c1,energy=c1,fs/disk=c1,mem=c1,pages=c1,vmem=c1|cpu=00:00:00,fs/disk=0,mem=0,pages=0,vmem=0|cpu=00:00:02,energy=0,fs/disk=8526169,mem=876440K,pages=0,vmem=1337996K|cpu=c1,energy=c1,fs/disk=c1,mem=c1,pages=c1,vmem=c1|cpu=00:00:00,fs/disk=0,mem=0,pages=0,vmem=0|cpu=00:00:02,energy=0,fs/disk=8526169,mem=876440K,pages=0,vmem=1337996K|energy=0,fs/disk=34422|energy=0,fs/disk=34422|energy=c1,fs/disk=c1|fs/disk=0|energy=0,fs/disk=34422|energy=c1,fs/disk=c1|fs/disk=0|energy=0,fs/disk=34422|

AveCPU:作业中所有 task 的平均 CPU 耗时(Average CPU time of all tasks,即系统态与用户态 CPU 时间的均值;而总消耗 CPU 时间对应 TotalCPU)

sshare

查看各账号的公平共享相关数据

bash
[root@sms1 ~]# sshare
             Account       User  RawShares  NormShares    RawUsage  EffectvUsage  FairShare
-------------------- ---------- ---------- ----------- ----------- ------------- ----------
root                                          0.000000      140134      1.000000
 root                      root          1    0.333333           0      0.000000   1.000000
 user1                                   1    0.333333           1      0.000011
 user2                                   1    0.333333           0      0.000000