top

CHESS调度系统

一、基本概念

1.1常用术语

user:用户名

node:泛指计算节点

core:CPU核

job:作业

job step:作业步,单个作业(job)可以有多个作业步

partition:分区(可理解为LSF、PBS等作业调度系统中的队列),作业需在特定分区中运行,一般不同分区之间资源不一样

QOS:服务质量,可理解为用户可使用的CPU、内存等资源限制

tasks:任务数,默认一个任务使用一个CPU核,可理解为作业所需的CPU核数

socket:CPU插槽,可理解为物理CPU颗数

stdout:标准输出文件,程序运行正常时输出信息的文件,一般指输出到屏幕的信息

stderr:标准错误文件,程序运行出错时输出信息的文件,一般指输出到屏幕的信息

1.2常用命令

sbatch:提交作业脚本。此脚本一般会包含一个或多个srun命令启动并行任务

sinfo:显示分区或节点状态,可以通过参数选项进行过滤、和排序

squeue:显示队列的作业及作业状态

scancel:取消排队或运行中的作业

scontrol:显示或设定slurm作业、分区、节点等状态

sacctmgr:显示和设置账户关联的QOS等信息

sacct:显示历史作业信息

srun:运行并行作业,具有多个选项,如:最大和最小节点数、处理器数、是否

指定和排除节点。

1.3常用环境变量

SLURM_NODELIST

当前作业被分配的节点列表

SLURM_JOB_NODELIST

当前作业被分配的节点列表

SLURM_JOB_NAME

当前作业的作业名称

SLURMD_NODENAME

当前作业执行任务的主机名

SLURM_NODE_ALIASES

当前作业执行节点的主机别名

SLURM_ARRAY_JOB_ID

当前组数作业的ID号码

SLURM_ARRAY_TASK_ID

当前数组作业的任务ID号

SLURM_ARRAY_TASK_COUNT

当前数组作业的任务总数

SLURM_ARRAY_TASK_MAX


当前数组作业的最大任务ID号


SLURM_ARRAY_TASK_MIN

当前数组作业的最小任务ID号


SLURM_ARRAY_TASK_STEP


当前数组作业任务ID号增长步长

SLURM_NNODES

当前作业使用的节点数目

SLURM_JOBID

当前作业ID号

SLURM_JOB_ID

当前作业ID号

SLURM_TASKS_PER_NODE

当前作业每个节点任务数

SLURM_JOB_USER

当前作业执行用户

SLURM_JOB_UID

当前作业实行用户的UID

SLURM_NODEID

当前作业执行时主机编号(每个任务从0开始)

SLURM_SUBMIT_DIR

当前作业提交时所在目录

SLURM_TASK_PID

当前任务执行时的进程号

SLURM_CPUS_ON_NODE

当前作业执行时做个节点使用的cpu数目

SLURM_PROCID

当前作业执行时CPU的号码

SLURM_LOCALID

当前作业节点上的本地任务的ID号

SLURM_JOB_GID

当前作业执行用户的GID

SLURM_JOB_CPUS_PER_NODE

当前作业执行时每节点使用的CPU数目

SLURM_CLUSTER_NAME

当前作业执行时所在的slurm集群名称

SLURM_GTIDS

当前作业在节点上运行时的全局任务ID号,以0为原点,逗号隔开

SLURM_SUBMIT_HOST

当前作业的提交主机名称

SLURM_JOB_PARTITION

当前作业提交时所用的partition

SLURM_JOB_NUM_NODES

当前作业所用的节点总数(单位:个)

SLURM_MEM_PER_NODE

当前作业每个节点使用的内存(单位:M)

SLURM_MEM_PER_CPU

当前作业每个节点上的每个CPU占用的内存大小

二、使用CHESS调度

2.1提交作业

CHESS支持使用sbatch命令提交作业方式,sbatch命令在脚本正确传递给作业调度系统后立即退出,同时获取一个作业号。作业等所需资源满足后开始运行。

sbatch提交一个批处理作业脚本到调度系统。批处理脚本名可以在命令行上通过传递给sbatch,也可以定义在批处理脚本中,如果没有指定文件名,则sbatch从标准输入中获取脚本内容。

脚本文件基本格式:

第一行以#!/bin/bash等指定改脚本的解释程序,/bin/bash可以变为/bin/sh、/bin/csh等。

在可执行命令之前的每行“#SBATCH”前缀后跟的参数作为作业调度系统的参数。默认情况下,标准输出和标准错误都定向到同一个文件slurm-%j.out,“%j”将被作业号代替。

例子如下:

# cat my.script

#! /bin/bash

#SBATCH -J test

#SBATCH -n 2

srun -l /bin/hostname

srun -l /bin/pwd

# sbatch my.script

Submitted batch job 117

 cat slurm-117.out

1: node1

0: node1

1: /root

0: /root

常用参数

-J,--job-name

指定作业名称

-N,--nodes

节点数量

-n,--ntasks

使用的CPU核数

--mem

指定每个节点上使用的物理内存

-t,--time

运行时间,超出时间限制的作业将被终止

-p,--partition

指定分区

--reservation

执行资源预留名称

-w,--nodelist

指定特定的节点

-x,--exclude

分配给作业的节点中不要包含指定节点

--ntasks-per-node

指定每个节点使用几个CPU核心

--begin

指定作业开始时间

-D,--chdir

指定脚本/命令的工作目录

--export-file=

通过文件filename设定环境变量。文件中的环境变量格式为

NAME=value,变量之间通过空格分隔。

-o,--output=

采用--output可以将其重定向到同一文件中

2.2 查看作业

squeue

#:squue

JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)

 115     batch     1.sh     root PD       0:00      1 (Resources)

 116     batch     1.sh     root PD       0:00      1 (Priority)

 112     batch     1.sh     root  R       0:08      1 node1

 113     batch     1.sh     root  R       0:05      1 node1

 114     batch     1.sh     root  R       0:05      1 node1

JOBID:作业号                                        

PARITION:分区名

NAME:作业名                                        

USER:用户名

ST:状态,常见的状态包括:

      - PD、Q:排队中 ,PENDING

      - R:运行中 ,RUNNING

      - CA:已取消,CANCELLED

      - CG:完成中,COMPLETIONG

      - F:已失败,FAILED

      - TO:超时,TIMEOUT

      - NF:节点失效,NODE FAILURE

      - CD:已完成,COMPLETED

- NODELIST(REASON):分配给的节点名列表(原因)

      - AssociationJobLimit:作业达到其最大允许的作业数限制

      - AssociationResourceLimit:作业达到其最大允许的资源限制

      - AssociationTimeLimit作业:作业达到时间限制

      - Resource:作业等待期所需资源可用

      - QOSJobLimit:作业的QOS达到其最大的作业数限制

      - QOSResourceLimit:作业的QOS达到其最大资源限制

      - QOSTimeLimit:作业的QOS达到其最大时间限制

      - PartitionNodeLimit:作业所需的节点超过所用分区当前限制

      - PartitionTimeLimit:作业所需的分区达到时间限制

      - Priority :作业所需的分区存在高等级作业或预留

      - NodeDown:作业所需的节点宕机

      - JobHeldUser:作业被用户自己挂起

      - InvalidQOS:作业的QOS无效

2.3取消作业

scancel

用户使用yhcancel命令取消自己的作业。命令格式如下:

yhcancel jobid

jobid可通过squeue获得。对于排队作业,取消作业将简单地把作业标记为CANCELLED状态而结束作业。对于运行中或挂起的作业,取消作业将终止作业的所有作业步,包括批处理作业脚本,将作业标记为CANCELLED状态,并回收分配给作业的结点。

2.4 挂起作业

scontrol  hold  job_list

scontrol hold job_list命令可使得排队中尚未运行的作业(设置优先级为0)暂停被分配运行,被挂起的作业将不被执行,这样可以让其他作业优先得到资源运行。被挂起的作业在使用squeue命令查询显示时NODELIST(REASON)状态标志为JobHelduser(被用户自己挂起)或JobheldAdmin(被系统管理员挂起),利用scontrol release job_list 可取消挂起。

三、其他命令

3.1查看节点状态

sinfo

$: sinfo

PATITION    AVAIL    TIMELIMIT    NODES     STATE      NODELIST

debug*        up        30:30         3       idle      node[01-03]

debug*        up        30:30         2     down*     node[04-05]

debug*        up        30:30         2     alloc       node[06-07]

3.1.1  常见输出

PARRITION:节点所在分区。

AVAIL:分区状态,up标识可用,down标识不可用。

TIMELIMIT: 程序运行最大时长,infinite表示不限制,

限制格式为days-houres:minutes:seconds。

NODES:节点数。

NODELIST:节点名列表。

STATE:节点状态,可能的状态包括:

           - allocated、alloc :已分配

           - completing、comp:完成中

           - down:宕机

           - drained、drain:已失去活力

           - fail:失效

           - idle:空闲

           - mixed:混合,节点在运行作业,但有些空闲CPU核,可接受新作业

           - reserved、resv:资源预留

           - unknown、unk:未知原因

注意:如果状态带有后缀*,表示节点没有响应

3.1.2 主要参数

-a、--all

显示全部分区信息

-d、--dead

仅显示无响应或已宕机节点

-i

秒间隔持续自动更新显示信息

-I

显示详细信息

-n

显示指定节点信息

-N

以每行一个节点方式显示信息,即显示各节点信息

-p

显示分区信息

-r

仅显示响应节点信息

-R

显示不响应(down、drained、fail或者failing状态)节点的原因

-o

按照格式输出信息,type[:[.]size],

默认为“%#P %5a %.101 %.6D %.6t %N”

- %all:所有字段信息。

- %a:分区的状态及是否可用。

- %A:以“allocated/idle”格式显示状态对应的节点信息

- %B:分区中每个节点可分配给作业的core数。

- %c:各节点core数。

- %C:以“allocated/idle/other.total”格式显示core数。

- %D:节点数。

- %e:节点空闲内存。

- %E:节点无效的原因。

- %g:可使用此节点的用户组。

- %n:节点主机名。

- .:指明为右对齐,默认为左对齐。

- size:最小字段大小,如没有指明,则最大为20个字符

3.2查看节点信息

scontorl show node [node]

$: scontrol show node node4

   CPUAlloc=0 CPUErr=0 CPUTot=32 CPULoad=44.09

   AvailableFeatures=(null)

   ActiveFeatures=(null)

   Gres=(null)

   NodeAddr=node4 NodeHostName=node4

   RealMemory=64000 AllocMem=0 FreeMem=72333 Sockets=32 Boards=1

   State=DOWN* ThreadsPerCore=1 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A

   Partitions=batch

   BootTime=None SlurmdStartTime=None

   CfgTRES=cpu=32,mem=62.50G,billing=32

   AllocTRES=

   CapWatts=n/a

   CurrentWatts=0 LowestJoules=0 ConsumedJoules=0

   ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s

CPUAlloc:该节点已分配的core数量

CPUTot:该节点core总数

CPULoad:该节点负载情况

NodeHostName:该节点主机名

Partitions:该节点属于哪个分区

RealMemory:该节点内存大小

State:该节点状态值

3.3查看分区信息

scontrol show partition

$:scontrol show partition

PartitionName=batch

   AllowGroups=ALL AllowAccounts=ALL AllowQos=ALL

   AllocNodes=ALL Default=YES QoS=N/A

   DefaultTime=NONE DisableRootJobs=NO ExclusiveUser=NO GraceTime=0 Hidden=NO

   MaxNodes=UNLIMITED MaxTime=UNLIMITED MinNodes=1 LLN=NO MaxCPUsPerNode=UNLIMITED

   Nodes=node4

   PriorityJobFactor=1 PriorityTier=1 RootOnly=NO ReqResv=NO OverSubscribe=NO

   OverTimeLimit=NONE PreemptMode=OFF

   State=UP TotalCPUs=32 TotalNodes=1 SelectTypeParameters=NONE

   DefMemPerNode=UNLIMITED MaxMemPerNode=UNLIMITED

DisableRootJobs:不允许root提交作业                  

Maxtime:最大运行时间

LLN:是否按最小负载节点调度                              

Maxnodes:最大节点数

Hidden:是否为隐藏分区                                         

Default:是否为默认分区

OverSubscribe:是否允许超时                                 

ExclusiveUser:排除的用户


foot