SLURM 使用基础教程

SLURM 使用基础教程

文档概述[编辑 | 编辑源代码]

文档目的[编辑 | 编辑源代码]

介绍 SLURM 基础使用,帮助对 slurm 不了解的人快速入门。

术语与缩略语[编辑 | 编辑源代码]

词语 解释
slurm 一种作业调度系统的简称
作业 完成特定任务的命令序列
队列 带名称的作业容器
Qos Quality of Service
管理节点 运行 slurm 管理进程(通常还包含调度进程)和数据库的节点
计算节点 运行执行进程的节点

参考资料[编辑 | 编辑源代码]

资料名称 出版单位 作者
Quick Start Administrator Guide

Man Pages

Accounting

Quality of Service (QOS)

Resource Limits

Generic Resource (GRES) Scheduling

https://slurm.schedmd.com/

Slurm 官网 Slurm
Gridview 调度系统管理和使用   张涛

提交作业[编辑 | 编辑源代码]

Slurm 提交作业有 3 种模式,分别为交互模式,批处理模式,分配模式,这三种方式只是用户使用方式的区别,在管理,调度,记账时同等对待。

交互模式[编辑 | 编辑源代码]

命令 srun

简介:交互式作业提交,提交命令后,等待作业执行完成之后返回命令行窗口。

示例

交互模式.png

批处理模式[编辑 | 编辑源代码]

命令 sbatch

简介

批处理作业是指用户编写作业脚本,指定资源需求约束,提交后台执行作业。提交批处理作业的命令为 sbatch,用户提交命令即返回命令行窗口,但此时作业在进入调度状态,在资源满足要求时,分配完计算结点之后,系统将在所分配的第一个计算结点(而不是登录结点)上加载执行用户的作业脚本。批处理作业的脚本为一个文本文件,脚本第一行以 “#!” 字符开头,并制定脚本文件的解释程序,如 sh,bash。由于计算节点为精简环境,只提供 sh 和 bash 的默认支持。

计算开始后,工作目录中会生成以 slurm 开头的.out 文件为输出文件。

示例 1 以脚本方式提交

[sugon@gpunode1 ~]$ sbatch sleep.job 

Submitted batch job 19

[sugon@gpunode1 ~]$ cat sleep.job 

#!/bin/bash

#SBATCH -J sleep

#SBATCH -p debug

#SBATCH --time=1

#SBATCH -N 2

#SBATCH -n 2

#SBATCH -o logs/%j.sleep

#SBATCH -e logs/%j.sleep

echo ${SLURM_JOB_NODELIST}

echo run.sh start on $(date)

sleep 100

echo run.sh end on $(date)

[sugon@gpunode1 logs]$ cat 19.sleep 

gpunode[1-2]

run.sh start on 2017 年 08 月 10 日 星期四 11:00:59 CST

run.sh end on 2017 年 08 月 10 日 星期四 11:02:39 CST

示例 2 通过标准输入将批处理脚本传递给 sbatch

[sugon@gpunode1 logs]$ sbatch <<EOF

> #!/bin/bash

> sleep 10

> EOF

Submitted batch job 20

EOF 的解释

“<<EOF EOF” 的作用是在命令执行过程中用户自定义输入,它类似于起到一个临时文件的作用,只是比使用文件更方便灵活。

分配模式[编辑 | 编辑源代码]

命令 salloc

简介

结点资源抢占命令。该命令支持用户在提交作业前,抢占所需计算资源(此时开始计算所用机时)。

执行分为四步

1.提交资源分配请求,作业排队等待资源分配,作业开始运行,开始计费;

2.执行用户指定的命令;

3.命令执行结束;

4.退出作业释放资源,作业停止运行,停止计费。

示例

分配模式.png

查看队列和作业,节点信息[编辑 | 编辑源代码]

显示队列[编辑 | 编辑源代码]

命令 sinfo

显示队列.png

队列中多节点状态不同时分行显示

显示队列-2.png

显示字段包括

PARTITION 队列名称

AVAIL    队列状态

TIMELIMIT 时间限制

NODES   队列分配的节点数

STATE    节点状态

NODELIST 队列节点列表

队列状态值[编辑 | 编辑源代码]
队列状态值.png

可能的值包括:"UP", "DOWN", "DRAIN" and "INACTIVE". 默认值为 "UP"

UP

新提交的作业可能在队列上排队,并且作业可以在队列中运行。

DOWN

新提交的作业可能在队列上排队,但排队的作业可能不会被分配节点并在队列中运行。已经在队列上运行的作业继续运行。

DRAIN

没有任何新作业可能在队列上排队(作业提交请求将被拒绝与错误消息),但已分配的队列上的作业可能被分配节点并运行。

INACTIVE

没有新作业可能在队列上排队,并且已排队的作业可能不会被分配节点并运行。

显示队列详细信息[编辑 | 编辑源代码]

命令 scontrol show partition <partition name>

显示队列详细信息.png
队列参数列表 参数解释
AllowGroups=ALL 此队列允许的用户组
AllowAccounts=ALL 此队列允许的账号
AllowQos=ALL 此队列允许的的 qos
AllocNodes=ALL   
Default=NO 是否是默认队列,设置多个默认队列以最后一行的队列为默认队列
QoS=N/A  
DefaultTime=NONE 用于未指定值的作业的运行时间限制。如果未设置,则使用 MaxTime。 格式与 MaxTime 相同。
DisableRootJobs=NO 如果设置为 “YES”,则用户 root 将被阻止在该分区上运行任何作业。
ExclusiveUser=NO 如果设置为 “YES”,则节点将被专门分配给用户。 同一用户可以运行多个作业,但一次只能有一个用户处于活动状态。 使用 --exclusive = user 选项也可以在每个作业的基础上提供此功能。
GraceTime=0  
Hidden=NO 指定默认情况下是否隐藏分区及其作业。 默认情况下,隐藏的分区不会被 Slurm API 或命令报告。 可能的值为 “是” 和 “否”。默认值为 “否”。
MaxNodes=UNLIMITED 可以分配给任何单个作业的最大节点数。默认值为 “UNLIMITED”
MaxTime=UNLIMITED 分配给此队列的作业的最长运行时间
MinNodes=1  
LLN=NO 调度作业资源到最小负载的节点上的(基于空闲 CPU 的数量)。这通常只适用于具有串行作业的环境。请注意,节点权重优先于每个节点上有多少空闲资源。
MaxCPUsPerNode=UNLIMITED 任何节点上可用于此分区的所有作业的最大 CPU 数。这对调度 GPU 特别有用。
Nodes=gpunode[1,2] 此队列可访问的节点列表
PriorityJobFactor=1  
PriorityTier=1 队列优先级
RootOnly=NO 指定只有用户 ID 为零(即用户 root)可以在此分区中分配资源。用户 root 可以为任何其他用户分配资源,但请求必须由用户 root 启动。默认值为 “NO“。
ReqResv=NO 指定此分区的用户在提交作业时需要指定一个预约。此选项可用于限制可能具有较高优先级的分区或仅在预留中允许的附加资源的使用。 可能的值为 “YES” 和 “NO”。 默认值为 “NO”。
OverSubscribe=NO 控制分区在每个资源上一次执行多个作业的能力,OverSubscribe 的可能值为 “EXCLUSIVE”,“FORCE”,“YES” 和 “NO”。 请注意,值为 “YES” 或 “FORCE” 可能会对具有数千个正在运行的作业的系统产生负面影响。 默认值为 “否”。
OverTimeLimit=NONE  
PreemptMode=OFF  
State=UP 队列状态
TotalCPUs=80 此队列总 cpu 数量,配置文件中节点的 cpu 总数
TotalNodes=2  此队列的节点数量
SelectTypeParameters=NONE 分区特定的资源分配类型。此选项将替换全局 SelectTypeParameters 值。支持的值是 CR_Core,CR_Core_Memory,CR_Socket 和 CR_Socket_Memory。使用需要设置系统范围的 SelectTypeParameters 值。
DefMemPerNode=UNLIMITED  
MaxMemPerNode=UNLIMITED  
命令扩展[编辑 | 编辑源代码]

sinfo -d 可以仅显示状态为 down 的节点

sinfo -V 输出 slurm 版本信息

[root@gv11 ~]# sinfo -d

PARTITION AVAIL  TIMELIMIT NODES  STATE NODELIST

debug*       up  infinite      0    n/a 

nvidia       up  infinite      0    n/a

[root@gv11 ~]# sinfo -V

slurm 17.02.6

作业状态[编辑 | 编辑源代码]

命令 squeue

只显示排队和运行中的作业

作业状态.png

显示字段有

JOBID    作业 ID

PARTITION 队列名称

NAME   作业名

USER    作业所属用户

ST      作业状态

TIME    作业已运行时间

NODES   作业占用节点数

NODELIST(REASON)作业运行的结点列表(不运行作业的原因)

参数列表

-A, --account=account(s) comma separated list of accounts to view, default is all accounts
-j, --job=job(s) comma separated list of jobs IDs to view, default is all
-l, --long long report
-n, --name=job_name(s) comma separated list of job names to view
-o, --format=format format specification
-p, --partition=partition(s) comma separated list of partitions to view, default is all partitions
-u, --user=user_name(s) comma separated list of users to view
实时作业详细信息[编辑 | 编辑源代码]

命令 scontrol show job 2 或者 scontrol show job 2 --detail

实时作业详细信息.png
作业参数列表 参数解释
JobId 作业 id
JobName 作业名
UserId 用户 id
GroupId 用户组
MCS_label  
Priority 作业优先级
Nice 调整作业调度优先值 (仅适用于作业),越小越优先
Account 账号
QOS 服务质量,用户可以使用的资源限制
JobState 作业状态
Reason 作业在当前的原因
Dependency 作业依赖关系。作业只有依赖的作业完成才运行,如显示 NULL, 则无依赖 (仅适用于作业)
Requeue 节点失效时是否重排队,0 为否,1 为是
Restarts 失败时,是否重运行,0 为否,1 为是
BatchFlag 是否批处理设定了标记 (仅限于作业),0 为否,1 为是
Reboot 节点空闲时是否重启节点,0 为否,1 为是
ExitCode 作业退出码
RunTime 已运行时间
TimeLimit 请求的 Walltime 时间
TimeMin 最小时间
SubmitTime 作业提交时间
EligibleTime 预计作业开始时间
StartTime 开始运行时间
EndTime 预计结束时间
Deadline 作业的截止时间
PreemptTime 作业抢占时间
SuspendTime 挂起时间
SecsPreSuspend  
LastSchedEval  
Partition 队列
ReqNodeList 请求的节点列表
ExcNodeList 执行的节点
NodeList 实际运行的节点列表
BatchHost 执行节点 (仅适用于作业),对于分配的回话:显示回话执行节点 (如,srun 或 salloc 命令执行节点)。对于批处理作业:显示的执行批处理节点。
NumNodes 节点数
NumCPUs CPU 数
NumTasks 任务数
CPUs/Task CPU 核数 / 任务数
TRES 使用 CPU 的个数 (对应 TRES 的子属性 cpu:TRES=cpu=1,mem=2847M,node=1,billing=1)
socks/Node  
CoreSpec 各节点预留 CPU 核数,如未包含,则表示 *
MinCPUsNode 每节点最小的 cpu 核数
MinMemoryNode 每节点最小的内存大小,0 表示无限制
MinTmpDiskNode 每节点最小临时存储硬盘大小,0 表示无限制
Features 特性
DelayBoot  
Gres 通用资源
Reservation 预留资源
OverSubscribe 分配给此作业的计算资源能否被其它作业预约 (仅适用于作业),可被预约的资源包含节点,CPU 核,线程。值可以为:YES,NO,USER,MCS,OK
Contiguous 是否需要分配连续节点,OK 是,NO 否
Licenses 作业预留的授权
Network 作业运行的网络
Command 作业执行的命令(仅适用于作业)
WorkDir 工作目录
StdError 错误输出路径
StdIn 标准输入路径
StdOut 标准输出路径
作业状态值[编辑 | 编辑源代码]

常见的状态值为:PENDING, RUNNING, SUSPENDED, COMPLETING, and COMPLETED.

PENDING   排队 PD

RUNNING   运行 R

SUSPENDED 挂起 S

COMPLETED 完成 CD

COMPLETING CG

FAILED      作业运行失败 F   

CANCELLED  作业被取消 CA

TIMEOUT     超时 TO

其中 CD,F,CA,TO 都是运行结束的状态

作业步状态,仅由 srun 加载的任务产生作业步

作业步状态.png
作业步状态-2.png
作业步状态-3.png
作业命令扩展[编辑 | 编辑源代码]

命令

squeue -u <user_name> 查询指定用户名的作业状态

作业命令扩展-1.png

squeue –t <status_name> 查询指定状态的作业

作业命令扩展-2.png

scontrol 常用参数列表

OPTION   COMMAND  
-a or --all equivalent to "all" command cluster  
-d or --details equivalent to "details" command create  
-h or --help   reconfigure  
-M or --cluster equivalent to "cluster" command  NOTE:SlurmDBD must be up. show <ENTITY> [<ID>] display state of identified entity, default is all records. 

may be "aliases", "assoc_mgr"

"burstBuffer",              

"config","daemons","federation", "frontend","hostlist","hostlistsorted", "hostnames","job","layouts", "node", "partition","reservation","slurmd", "step", or "topology"(also for BlueGene only: "block" or "submp").

       
       
       

显示节点[编辑 | 编辑源代码]

节点信息[编辑 | 编辑源代码]

命令 scontrol show node

节点信息.png
节点参数列表 参数解释
NodeName 节点名称
Arch 系统架构
CoresPerSocket  
CPUAlloc 分配给的 CPU 核数
CPUErr 出错的 CPU 核数
CPUTot 总的 CPU 核数
CPULoad CPU 负载
AvailableFeatures 可用特性
ActiveFeatures 激活的特性
Gres 通用资源
NodeAddr 节点 IP 地址
NodeHostName 节点名
Version SLURM 版本
OS 操作系统
RealMemory 实际的物理内存,单位 GB
AllocMem 已分配的内存,单位 GB
FreeMem 可用内存,单位 GB
Sockets  
Boards 主板数
State 节点状态
ThreadsPerCore CPU 线程数
TmpDisk 临时硬盘存储大小
Weight 权重
Owner  
MCS_label  
Partitions  
BootTime 开机实际
SlurmdStartTime SLURM 守护进程启动时间
CfgTRES  
AllocTRES  
CapWatts  
CurrentWatts  
LowestJoules  
ConsumedJoules  
ExtSensorsJoules  
ExtSensorsWatts  
ExtSensorsTemp  
Reason  
   
节点状态值[编辑 | 编辑源代码]

可能的状态包括: 

allocated(alloc), completing(comp),  down(down), drained(drain),  draining(drng),  fail(fail), failing(failg),  future(futr), idle(idle), maint(maint), mixed(mix), perfctrs(npc), power_down(pow_dn), power_up(pow_up), reserved, and unknown(unk)。

请注意,后缀 “*” 标识当前未响应的节点。

idle   表示节点处于空闲状态

alloc  表示节点所有 CPU 都被占用,新提交的作业将排队。

drain 出现这个状态时,不影响正在运行的作业,但是不接受新的作业调度,可以使用命令 sinfo –R 打印节点不正常的状态产生原因

节点状态值.png

mix  节点具有分配 CPU 的作业,而其他的 CPU 状态是 IDLE,新提交的作业继续运行

unk  Slurm 控制器刚刚启动,节点的状态尚未确定。

down 故障节点不可用。

其他状态请参考手册 man page。

作业运行参数[编辑 | 编辑源代码]

下面的参数适用于所有作业提交命令,srun, sbatch, salloc。

参数 参数作用 备注
-J 或者 --job-name 指定作业名称 默认为加载的程序 / 批处理脚本文件名 / 执行的命令
-p 或者 --partition 指定队列资源 作业不能跨分区
-N 或者 –nodes=<number> 指定节点数量  
-n 或者 --ntasks = <number>  总 task 数 (总核数) 指定处理器数量

srun -p debug -N 2 --cpus-per-task=10 -n 2 sleep 10&

NumNodes=2 NumCPUs=20 NumTasks=2 CPUs/Task=10

TRES=cpu=20,node=2

Nodes=gpunode[1-2] CPU_IDs=0-9 

MinCPUsNode=10

默认值为每个节点一个任务,但请注意,--cpus-per-task 选项将更改此默认值。
-o 或者 --output=<filename pattern> 指定 stdout 的输出文件。提供 --output 选项以允许将 stdout 重定向到不同的位置。 如果指定的文件已经存在,它将被覆盖。  
-e 或者 --error=<filename pattern>      指定 stderr 的输出文件。提供 --error 选项以允许将 stdout 和 stderr 重定向到不同的位置。 如果指定的文件已经存在,它将被覆盖。  
-t

或者 --time

时间分辨率是一分钟,第二个值被四舍五入到下一分钟。

=0 为要求不限时。 可接受的时间格式包括 “分钟”,“分钟:秒”,“小时:分钟:秒”,“天 - 小时”,“天 - 小时:分钟” 和 “天 - 小时:分:秒”。

超出时间限制的作业将被终止,作业状态变为 TIMEOUT。

应尽可能准确估计,调度时用此估计时间进行 backfill 判断
-A 或者 --account=<account> [null 指定账号]  
-d 或者 --dependency 指定作业的依赖关系 after:job_id [:jobid...] 在指定作业开始之后

afterok:job_id [:jobid...] 在指定作业成功开始之后

afternotok:job_id [:jobid...] 在指定作业不成功结束之后

afterany:job_id [:jobid...] 在指定作业结束之后

满足依赖关系的作业才能运行;

不可能满足依赖关系的作业将永远不会运行,一直排队。

--priority=<值> [null 作业优先级] 请求具体工作优先级。 可能会受到配置的限制。 值应该是数值或 “TOP”(用于最高可能值)。
     

 

作业控制[编辑 | 编辑源代码]

取消作业[编辑 | 编辑源代码]

命令 scancel jobid 

作业状态标记为 CANCELLED

状态,回收资源

取消作业.png
 
取消作业-2.png
 

挂起作业[编辑 | 编辑源代码]

命令 scontrol suspend 

暂时释放处理器资源

节点被释放,可以分配给其他资源

          挂起正在运行的工作。job_list 参数是逗号分隔的作业 ID 列表。使用 resume 命令恢复执行。用户进程必须在收到 SIGSTOP 信号后停止,并在收到 SIGCONT 后恢复,以使此操作生效。并非所有架构和配置都支持停职。如果重新排出暂停的工作,它将被置于保持状态。

挂起作业.png
 

恢复作业[编辑 | 编辑源代码]

命令 scontrol resume

节点再次分配给作业

恢复作业.png
 

作业重新排队[编辑 | 编辑源代码]

命令 scontrol requeue 67

作业重新排队.png
 

可将运行或挂起批处理的作业重新排队

释放资源,置为 PENDING 状态

不会重新分配作业 ID

提交时间置为重排队时间

保留作业[编辑 | 编辑源代码]

命令 scontrol hold [job list] 

命令解释

防止挂起的作业被启动(将其优先级设置为 0)。使用 release 命令允许作业被调度。job_list 参数是作业 ID 的逗号分隔列表或作业名称的 “jobname =”,它将尝试保存具有该名称的所有作业。请注意,当系统管理员使用 hold 命令保留作业时,只有系统管理员可能会释放作业才能执行(另请参阅 uhold 命令)。当作业被其所有者保留时,也可能由工作所有者 release。此外,当你尝试保留一个 running 的作业时,将不会暂停或取消它。但是,它会将作业优先级设置为 0,并更新作业 reason 字段,这将在以后重新排列时保留该作业。

命令 scontrol uhold job_list

命令解释

防止挂起的作业被启动(将其优先级设置为 0)。job_list 参数是作业 ID 或作业名称的空格分隔列表。使用 release 命令允许作业被调度。此命令是为系统管理员设计的,用于保存作业,以便作业所有者可以释放它,而不需要系统管理员的干预(另请参阅 hold 命令)。

修改作业[编辑 | 编辑源代码]

作业提交后可对其参数等进行修改,不同状态下可修改的参数不同,修改参数时进行类似提交时的权限与资源限制检查

命令 scontrol

改变作业的队列[编辑 | 编辑源代码]

命令 scontrol update jobid=73 partition=nvidia

只能修改排队作业

改变作业的队列.png
 
改变作业的名字[编辑 | 编辑源代码]

命令 scontrol update jobid=73 name=nvidia

排队,运行都可以修改

改变作业的名字.png
 

slurm.conf 文件配置与对应的功能[编辑 | 编辑源代码]

slurm.conf 文件配置[编辑 | 编辑源代码]

大部分选项选择默认即可,一般只需要在 “Control Machines”,“Compute Machines” 以及 “Resource Selection” 部分根据实际情况填写即可。

ControlAddr

管理节点 ip 地址

ControlMachine

              管理节点 hostname

NodeName

计算节点 hostname

NodeAddr

       计算节点 ip

CPUs

       计算节点的 cpu

RealMemory

       计算节点的物理内存

AuthType

auth/munge

AccountingStorageEnforce

              不填写

This option contains a comma separated list of options you may want to enforce. The valid options are:  associations,limits, nojobs, nosteps, qos, safe, and wckeys, or all for all things (expect nojobs and nosteps, they must be requested as well).

  • associations - 如果关联不在数据库中,这将阻止用户运行作业。此选项将阻止用户访问无效帐户。
  • limits - 这将强制设置关联的限制。通过设置此选项,还会设置 'associations' 选项。
  • qos - 这将要求所有作业指定(默认或默认情况下)有效的 qos(服务质量)。为数据库中的每个关联定义了 QOS 值。通过设置此选项,还会设置 “'associations' 选项。

ProctrackType

Pgid

SelectType

              Cons_res

SelectTypeParameters

              CR_Core

TaskPlugin

              Affinity

AccountingStorageType

              MySQL

SlurmctldDebug

              7

SlurmdDebug

              7

AccountingStorageHost

账号存储数据库的计算机的名称。仅用于数据库类型存储插件

AccountingStorageLoc

         数据库名称。仅用于数据库类型存储插件

AccountingStoragePass

         数据库的密码。仅用于数据库类型存储插件

AccountingStoragePort

         数据库的端口号。仅用于数据库类型存储插件

CryptoType=crypto/munge

ReturnToService=2

                     ReturnToService 控制状态为 down 状态的节点是否自动恢复为 idle 状态,建议设置为 2

StateSaveLocation=/opt/slurm17/spool

              安装目录下的 spool 文件夹

SlurmctldLogFile=/opt/slurm17/log

              安装目录下的 log 文件夹

SlurmdLogFile

              安装目录下的 log 文件夹

PartitionName

              队列名称

队列名称.png
 

启用记账[编辑 | 编辑源代码]

配置

Slurm.conf 文件中需要修改如下参数

AccountingStorageEnforce= associations

#AccountingStorageEnforce=associations,limits,qos,safe,wckeys

AccountingStorageHost=gv11

AccountingStorageLoc=slurm_acc

#AccountingStorageLoc=/opt/slurm_acc

AccountingStoragePass=111111

AccountingStoragePort=3309

AccountingStorageType=accounting_storage/mysql

#AccountingStorageType=accounting_storage/filetxt

#AccountingStorageType=accounting_storage/slurmdbd

AccountingStorageUser=root

AccountingStoreJobComment=YES

ClusterName=cluster_gv11

使用

启用记账之后,再次提交作业,待作业运行完成之后,可使用命令 sacct 查看历史作业

启用记账.png
 
查询指定时间段的作业[编辑 | 编辑源代码]

命令 sacct 参数列表

-E, --endtime=end_time 查询在指定时间之前,任何状态的作业。如果通过 - s 参数指定状态则返回在此时间之前的指定状态的作业,有效格式为:

HH:MM[:SS] [AM|PM]

MMDD[YY] or MM/DD[/YY] or MM.DD[.YY]

MM/DD[/YY]-HH:MM[:SS]

YYYY-MM-DD[THH:MM[:SS]]

-S, --starttime= starttime 在指定时间后,任何状态的作业
-T, --truncate Truncate time. 如果一个 job 在 --starttime 之前开始运行,开始时间将被截断为 --starttime 。同样的 作业结束时间 = --endtime.
-o, --format 分号分割的列表的显示字段

示例

查询指定时间段的作业.png
 

-T 参数示例

查询指定时间段的作业-2.png
 
查询指定账号的作业[编辑 | 编辑源代码]
查询指定账号的作业.png
 

形成关联的四个参数来记录 Slurm 账户信息,user, cluster, partition, 和 account:

user 是登录名。

cluster 是 slurm 托管集群的名称,由 slurm.conf 配置文件中的 ClusterName 参数指定。

partition 是该集群上的 Slurm 分区的名称。

account 是一个工作的银行帐户。

预期的操作模式是启动 sacctmgr 命令,添加,删除,修改和 / 或列出关联记录,然后提交更改并退出。

队列相关参数[编辑 | 编辑源代码]

队列配置允许您为各种组(或队列)的节点建立不同的作业限制或访问控制。节点可能在多个队列中,使队列作为默认队列。例如,可以将同一组节点放在两个不同的队列中,每个队列具有不同的约束(时间限制,作业大小,允许使用队列的组等)。作业在单个队列中分配资源。可以使用其中 PartitionName 为 “DEFAULT” 的记录指定默认值。默认条目值仅适用于配置文件中跟随的行,默认值可以在具有多个 “PartitionName = DEFAULT” 的配置文件中重复多次。必须在描述队列配置的每一行上放置 “PartitionName =” 规范。PartitionName 为 “DEFAULT” 的每一行将替换或添加到以前的默认值,而不是重新初始化默认值。单个队列名称不能在多行中显示为 PartitionName 值(重复的队列名称记录将被忽略)。如果正在使用的队列从配置中删除,并且重新启动或重新配置 slurm(scontrol reconfigure),则使用队列的作业将被取消。注意:将每个队列的所有参数放在一行上。每一行队列配置信息都应该表示不同的队列。队列配置文件包含以下信息:

AllowGroups 启用队列的用户访问控制[编辑 | 编辑源代码]

配置

AccountingStorageEnforce=limits

PartitionName=debug Nodes=gv11 Default=YES MaxTime=INFINITE State=UP

PartitionName=nvidia Nodes=gv11 Default=NO MaxTime=INFINITE State=UP AllowGroups=docker

AllowGroups:后边的 docker 组就是 /etc/group 文件中的组名。

使用

由于 docker 组中只有用户 sugon, 所以 ctest1 用户不能提交作业,但是如果运行时不指定队列而使用默认队列 debug 运行时,该用户是可以提交作业的,因为默认队列 debug 没有启用用户访问控制

[ctest1@gv11 ~]$ srun -p nvidia sleep 10&

[1] 17026

[ctest1@gv11 ~]$ srun: error: Unable to allocate resources: User's group not permitted to use this partition

MaxTime 启用队列中作业的最长运行时间[编辑 | 编辑源代码]
PartitionName=nvidia Nodes=gv11 Default=NO MaxTime=INFINITE State=UP MaxTime=1

MaxTime:作业的最长运行时间限制。格式是 “minutes”,“minutes:seconds”,“hours:minutes:seconds”,“days-hours”,“days-hours:minutes”,“days-hours:minutes:seconds” 或者 "UNLIMITED"。

AllowAccounts 启用队列账号管理[编辑 | 编辑源代码]

配置

修改 slurm.conf 文件,需要修改的参数如下图:

AccountingStorageEnforce=limits

PartitionName=debug Nodes=gv11 Default=YES MaxTime=INFINITE State=UP

PartitionName=nvidia Nodes=gv11 Default=NO MaxTime=INFINITE State=UP AllowAccounts= testpartition

AllowAccounts:后的账号名需要自己创建,下面是账号创建步骤。

1.添加集群

命令

sacctmgr add cluster <cluster name>

sacctmgr create cluster <cluster name> 添加集群,create 命令和 add 命令的执行方式和结果是一致的

sacctmgr list cluster                 查询集群

/etc/init.d slurm restart              重启 slurm

此集群名称需要和 slurm.conf 文件中的 ClusterName 一致,如果 slurm.conf 文件中的 ClusterName 集群已存在则无需再创建集群

添加集群.png
 

2. 添加账号

账号一定要创建在对应的集群中,也就是 slurm.conf 文件中的 ClusterName。

命令

sacctmgr add account name=science1 cluster=cluster_gv11

sacctmgr create account name=science1 cluster=cluster_gv11  添加账号

sacctmgr list account                                   查询账号

添加账号.png
 
Nodes 启用队列的节点控制[编辑 | 编辑源代码]

配置

PartitionName=debug Nodes=gpunode[1,2]Default=YES MaxTime=INFINITE State=UP

PartitionName=nvidia2 Nodes=gpunode2Default=YES MaxTime=INFINITE State=UP

PartitionName=nvidia Nodes=gpunode1Default=YES MaxTime=INFINITE State=UP

Nodes: 与此分区关联的逗号分隔的节点列表(或 BlueGene 系统的基本分区)。可以使用上述节点范围表达式语法来指定节点名称。如果分区存在但没有资源,则可以使用空白的节点列表(即 “Nodes =”)。“ALL” 值映射到集群中配置的所有节点。

PriorityTier 优先级[编辑 | 编辑源代码]

配置为修改 slurm.conf 文件

PriorityTier优先级.png
 

提交给具有较高优先级层值的分区的作业将在具有较低优先级层值的分区中的挂起作业之前分派,并且如果可能,它们将从具有较低优先级层值的分区中抢占运行作业。请注意,分区的优先级优先于作业的优先级。值不超过 65533,数值越低优先级越高。

以上为常用的参数,详细参数请参考官方文档。

使用 Qos 启用队列的用户访问控制[编辑 | 编辑源代码]

添加集群[编辑 | 编辑源代码]

查询集群是否正常,命令 sacctmgr list cluster

添加集群.png
 

如果显示不正确,需要添加

添加账号[编辑 | 编辑源代码]

命令:sacctmgr add account name=anna cluster=cluster_gv128

添加账号.png
 
添加用户到帐号并且给用户添加 qos[编辑 | 编辑源代码]

sacctmgr add user name=annaone account=anna qos=qosuser cluster=cluster_gv128

使用Qos启用队列的用户访问控制-添加账号.png
 

sacctmgr list assoc

添加用户到帐号并且给用户添加-2.png
 

使用 sugon 用户登陆提交作业测试

添加用户到帐号并且给用户添加-3.png
 

启用用户的账号管理[编辑 | 编辑源代码]

在集群和账号都创建好后,我们可以开始创建用户

创建 linux 用户[编辑 | 编辑源代码]
[root@gv11 log]# useradd ctest1

[root@gv11 log]# passwd ctest1

给用户绑定账号[编辑 | 编辑源代码]
[root@gv11 log]# sacctmgr create user name=ctest1 cluster=cluster_gv11 account=physics fairshare=10
启用用户 Qos[编辑 | 编辑源代码]

Qos 全称为 Quality of Service,可以为提交给 Slurm 的每个作业指定服务质量(QOS)。与作业相关的服务质量将以四种方式影响作业:

作业调度优先级

工作抢占

工作限制

分区 QOS

系统默认的 qos 为 normal

QOS 配置[编辑 | 编辑源代码]
添加一个新的 qos [编辑 | 编辑源代码]
sacctmgr add qos zebra

sacctmgr show qos format=name,priority

设置 qos[编辑 | 编辑源代码]
sacctmgr modify qos zebra set priority=10 

sacctmgr modify qos zebra set GrpJobs=2

sacctmgr show qos format=name,priority,GrpCPUs

 添加 qos 到用户[编辑 | 编辑源代码]

要先给用户绑定账号

sacctmgr modify user ctest1 set qos=zebra

sacctmgr show assoc format=cluster,user,qos

使用

使用用户 utest1 用户提交作业超过 2 个后,提交的作业处于等待状态,等待上一个作业运行完成才开始执行

QOS 支持的策略 (参数):

     
Fairshare 值为整数,用于确定优先级。 可设为 “parent”,关闭该层的 fairshare,使用 parent association 的 fairshare 优先级。
GrpCPUMins association 及下属可用的 CPU 总时间限制 仅在 Priority Multifactor plugin 下生效
GrpCPURunMins association 及下属可用的 CPU 运行总时间限制 超出限制被 kill
GrpCPUs association 及下属同一时刻可用的 CPU 数量限制 超出限制则排队
GrpJobs association 及下属同一时刻可运行作业数 超出限制则排队
GrpMemory association 及下属同一时刻可用内存总量 超出限制则排队
GrpNodes association 及下属同一时刻可用节点数。 每个作业使用的节点数单独计算
GrpSubmitJobs association 及下属同一时刻已提交作业数。 超出限制则提交失败
GrpWall association 及下属总 wall time 限制  
MaxCPUMinsPerJob association 中每个作业可使用 cpu 时长。 job 达到限制被 kill
MaxCPUsPerJob association 中每个作业可使用 cpu 数量  
MaxJobs association 同一时刻可运行作业数。 超出限制则排队
MaxNodesPerJob association 每个作业可用节点数。 超出限制则提交失败
MaxSubmitJobs association 及下属同一时刻已提交作业数。 超出限制则提交失败
MaxWallDurationPerJob association 总 wall time 限制  
QOS   逗号分隔 association 可用的 QOS
 

 

 

 
posted @ 2020-04-13 19:16  dahu1  Views(23464)  Comments(4Edit  收藏  举报