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
简介:交互式作业提交,提交命令后,等待作业执行完成之后返回命令行窗口。
示例
批处理模式[编辑 | 编辑源代码]
命令 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.退出作业释放资源,作业停止运行,停止计费。
示例
查看队列和作业,节点信息[编辑 | 编辑源代码]
显示队列[编辑 | 编辑源代码]
命令 sinfo
队列中多节点状态不同时分行显示
显示字段包括
PARTITION 队列名称
AVAIL 队列状态
TIMELIMIT 时间限制
NODES 队列分配的节点数
STATE 节点状态
NODELIST 队列节点列表
队列状态值[编辑 | 编辑源代码]
可能的值包括:"UP", "DOWN", "DRAIN" and "INACTIVE". 默认值为 "UP"
UP
新提交的作业可能在队列上排队,并且作业可以在队列中运行。
DOWN
新提交的作业可能在队列上排队,但排队的作业可能不会被分配节点并在队列中运行。已经在队列上运行的作业继续运行。
DRAIN
没有任何新作业可能在队列上排队(作业提交请求将被拒绝与错误消息),但已分配的队列上的作业可能被分配节点并运行。
INACTIVE
没有新作业可能在队列上排队,并且已排队的作业可能不会被分配节点并运行。
显示队列详细信息[编辑 | 编辑源代码]
命令 scontrol show partition <partition name>
队列参数列表 | 参数解释 |
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
只显示排队和运行中的作业
显示字段有
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
作业参数列表 | 参数解释 |
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 加载的任务产生作业步
作业命令扩展[编辑 | 编辑源代码]
命令
squeue -u <user_name> 查询指定用户名的作业状态
squeue –t <status_name> 查询指定状态的作业
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
节点参数列表 | 参数解释 |
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 打印节点不正常的状态产生原因
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
状态,回收资源
挂起作业[编辑 | 编辑源代码]
命令 scontrol suspend
暂时释放处理器资源
节点被释放,可以分配给其他资源
挂起正在运行的工作。job_list 参数是逗号分隔的作业 ID 列表。使用 resume 命令恢复执行。用户进程必须在收到 SIGSTOP 信号后停止,并在收到 SIGCONT 后恢复,以使此操作生效。并非所有架构和配置都支持停职。如果重新排出暂停的工作,它将被置于保持状态。
恢复作业[编辑 | 编辑源代码]
命令 scontrol resume
节点再次分配给作业
作业重新排队[编辑 | 编辑源代码]
命令 scontrol requeue 67
可将运行或挂起批处理的作业重新排队
释放资源,置为 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
只能修改排队作业
改变作业的名字[编辑 | 编辑源代码]
命令 scontrol update jobid=73 name=nvidia
排队,运行都可以修改
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
队列名称
启用记账[编辑 | 编辑源代码]
配置
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 查看历史作业
查询指定时间段的作业[编辑 | 编辑源代码]
命令 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 | 分号分割的列表的显示字段 |
示例
-T 参数示例
查询指定账号的作业[编辑 | 编辑源代码]
形成关联的四个参数来记录 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 集群已存在则无需再创建集群
2. 添加账号
账号一定要创建在对应的集群中,也就是 slurm.conf 文件中的 ClusterName。
命令
sacctmgr add account name=science1 cluster=cluster_gv11
sacctmgr create account name=science1 cluster=cluster_gv11 添加账号 sacctmgr list account 查询账号 |
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 文件
提交给具有较高优先级层值的分区的作业将在具有较低优先级层值的分区中的挂起作业之前分派,并且如果可能,它们将从具有较低优先级层值的分区中抢占运行作业。请注意,分区的优先级优先于作业的优先级。值不超过 65533,数值越低优先级越高。
以上为常用的参数,详细参数请参考官方文档。
使用 Qos 启用队列的用户访问控制[编辑 | 编辑源代码]
添加集群[编辑 | 编辑源代码]
查询集群是否正常,命令 sacctmgr list cluster
如果显示不正确,需要添加
添加账号[编辑 | 编辑源代码]
命令:sacctmgr add account name=anna cluster=cluster_gv128
添加用户到帐号并且给用户添加 qos[编辑 | 编辑源代码]
sacctmgr add user name=annaone account=anna qos=qosuser cluster=cluster_gv128
sacctmgr list assoc
使用 sugon 用户登陆提交作业测试
启用用户的账号管理[编辑 | 编辑源代码]
在集群和账号都创建好后,我们可以开始创建用户
创建 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 |
开启评论自动刷新