Slurm集群管理系统

Slurm集群管理系统

Slurm(Simple Linux Utility for Resource Management,https://slurm.schedmd.com/)是一个开源的、容错的、高度可扩展的集群管理和作业调度系统,适用于大型和小型高性能计算(HPC)集群。计算系统可利用Slurm对资源和作业进行管理,以避免相互干扰,提高运行效率。所有需运行的作业,无论是用于程序调试还是业务计算,都可以通过交互式并行 srun 、批处理式 sbatch 或分配式 salloc 等命令提交,提交后可以利用相关命令查询作业状态等。作为一个集群工作负载管理器,Slurm有三个关键功能。

  1. 将资源(计算节点)的排他或非排他访问权分配给用户,让他们在一定的时间内执行作业。
  2. 提供了一个框架,用于启动、执行和监控所分配节点上的工作(通常是一个平行作业)。
  3. 通过管理一个待处理作业的队列来仲裁对资源的争夺。

扫码关注微信公众号【生信F3】获取文章完整信息,分享生物信息学最新知识。

ShengXinF3_QRcode
ShengXinF3_QRcode

术语

  • 节点

    Hea Node:头节点、管理节点、控制节点,运行slurmctld管理服务的节点。

    Compute Node:计算节点,运行作业计算任务的节点,需运行slurmd服务。

    Login Node:用户登录节点,用于用户登录的节点,注意不要在登陆节点执行复杂任务。

    SlurmDBD Node:SlurmDBD节点、SlurmDBD数据库节点,存储调度策略、记账和作业等信息的节点,需运行slurmdbd服务。

    客户节点:含计算节点和用户登录节点。

  • 用户

    account:账户,一个账户可以含有多个用户。

    user:用户,多个用户可以共享一个账户。

    bank account:银行账户,对应机时费等。

  • 资源

    GRES:Generic Resource,通用资源。

    TRES:Trackable RESources,可追踪资源。

    QOS:Quality of Service,服务质量,作业优先级。

    association:关联。可利用其实现,如用户的关联不在数据库中,这将阻止用户运行作业。该选项可以阻止用户访问无效账户。

    Partition:队列、分区。用于对计算节点、作业并行规模、作业时长、用户等进行分组管理,以合理分配资源。不同的节点的特性和硬件属性不同,设置分区可以帮助用户更好确定节点的特点,进而选择最适合自己的节点进行运算。此外,如果集群中部分机器是私有的,那么设置分区可以使得只有部分用户能在这个分区提交作业。总的来说,分区(Partition)可看做 一系列节点的集合。

Slurm架构

Slurm由一个运行在每个计算节点上的slurmd守护进程(Slurm Daemon)和一个运行在管理节点上的中央slurmctld守护进程(Slurm Central Daemon)组成。各计算节点需启动slurmd守护进程,以便被作为远程shell使用:等待作业、执行作业、返回状态、再等待更多作业。

slurmdbd数据库守护进程(Slurm DataBase Daemon)可以将多个slurm管理的集群的记账信息记录在同一个数据库中。用户工具包含:

  • srun 运行作业;
  • scancel 终止排队中或运行中的作业;
  • sinfo 查看系统状态;
  • squeue 查看作业状态;
  • sacct 查看运行中或结束了的作业及作业步信息等命令。
  • sview 命令可以图形化显示系统和作业状态(可含有网络拓扑)。
  • scontrol 作为管理工具,可以监控、修改集群的配置和状态信息等。
alt

Slurm守护进程(Slurmd)管理的实体包括:

  • 节点(node),Slurm中的计算资源;
  • 分区(partition),将节点分组为逻辑(可能是重叠的)集合。
  • 作业(job),在特定时间内分配给一个用户的资源分配;
  • 作业步骤(job step),一个作业中的一组(可能是平行的)任务。

分区可以被认为是作业队列,每个队列都有各种各样的约束,如作业大小限制、作业时间限制、允许使用的用户等。按优先级排序的作业在一个分区内被分配节点,直到该分区内的资源(节点、处理器、内存等)被用完。一旦作业被分配到一组节点,用户就能在分配范围内以作业步骤的形式启动并行工作。例如,可以利用分配给作业的所有节点启动一个作业步骤,或者几个作业步骤可以相互独立的使用分配给作业的节点。

alt

Slurm用法

alt
alt

作业提交(Job Submission)

交互式作业任务 srun

srun 用于在Slurm管理的集群上提交并行作业任务。一般情况下,srun将首先创建一个资源分配(jobid),后在其中运行并行作业。srun 有多种选项来指定资源要求,包括:最小和最大的节点数、处理器数、使用或不使用的特定节点,以及特定的节点特性(内存、磁盘空间、某些需要的功能等)。一个作业可以包含多个作业步骤,在作业的节点分配范围内的独立或共享资源上顺序或平行执行。

# 请求在all分区上使用1个线程1G内存执行sh脚本
srun -p all -c 1 --mem 1G sh sleep_1.sh
# 请求在all分区上使用1个线程1G内存执行sleep命令
srun -p all -c 1 sleep 5s

参数详解:

-p, --partition=<name> 指定分区

-c, --cpus-per-task 请求为每个进程分配的 cpu 核数。

批处理提交任务 sbatch

sbatch 用于向集群提交一个批处理脚本。批处理脚本可以通过命令行上的文件名提供给sbatch,如果没有指定文件名,sbatch将从标准输入读入脚本。在将脚本成功转移到Slurm控制器并为其分配Slurm作业ID后,sbatch将立即退出。批处理脚本不一定会立即获得资源,在所需资源可用之前,它可能会在待处理作业队列中等待一段时间。这种方式类似于通过将 srun 指令压入后台执行:

$ sbatch myscript.sh
# 类似于
$ nohup srun -p partition1 sh myscript.sh &

默认情况下,标准输出和标准错误都被定向到名为“slurm-%j”的文件中。,其中“%j”被替换为作业分配号。sbatch 成功时返回 0,失败时返回错误代码。

通常来说,一个sbatch作业脚本分为3个部分:

  1. #!/bin/bash 第一行是脚本语言解释器的路径,一般选择 bash 作为解释器;

  2. (可省略)以 #SBATCH 引导的 Slurm 设置选项;

  3. 要运行的命令。

注意,我们应当把所有的 #SBATCH 开头的行放在一起,同时放在脚本的顶部。必须在所有的 #SBATCH 行结束之后才能写 bash code 和变量设置,一个典型的任务提交脚本如下:

#!/bin/sh
#SBATCH --time=1
srun hostname |sort

将该脚本投递到4个计算节点上执行:

$ sbatch -N4 myscript
salloc: Granted job allocation 65537
$ cat slurm-65537.out
host1
host2
host3
host4

常用设置选项如下:

#SBATCH -J, --job-name=<name> # 指定作业名
#SBATCH -n, --ntasks=<count> # Number of tasks to be launched
#SBATCH -N<minnodes[-maxnodes]> # 指定节点数
#SBATCH -p, --partition=<name> # 指定分区
#SBATCH --mem=<MB> # 指定单个或多个核心可用的整个内存池的大小
#SBATCH --time=minutes # 限定运行时间
#SBATCH -N<minnodes[-maxnodes]> # 请求节点数
#SBATCH -c, --cpus-per-task=<ncpus> # number of cpus required per task
#SBATCH -o, --output=<filename> # 指定用于批处理脚本标准输出的文件
#SBATCH -e, --error=<filename> # 指定用于批处理脚本标准错误输出的文件

作业管理(Job Management)

Slurm 提供了丰富的追踪任务的命令,这些命令有助于查看正在运行或已完成的任务状态。当用户认为任务异常时,可使用这些工具来追踪任务的信息。

sinfo 查询计算节点和分区状态

其中 STATE 常见的有

  • alloc,节点已经被分配给作业任务
  • down,节点当前不可用
  • drain,节点被管理员设置为退出服务
  • idle,节点当前空闲
  • mix,节点有部分计算资源已被分配,还有部分资源空闲可用

squeue 报告作业或作业步骤的状态。它有各种各样的过滤、排序和格式化选项。默认情况下,它按优先顺序报告正在运行的作业,然后按优先顺序报告待处理的作业。

squeue -u Username
squeue -p Partition
squeue -j JobIDs

squeue 显示的信息包括以下内容

  • JobID,作业编号
  • PARTITION,作业在哪个分区上运行
  • NAME,作业名称,默认是作业脚本的名字
  • USER,作业的所有者
  • ST,作业当前状态,详见 Job State Codes,常见的有
    • CG 作业正在完成
    • F 作业失败
    • PD 作业正在等待分配资源
    • R 作业正在运行
  • TIME,作业已运行时间
  • NODES,作业占用的计算节点数
  • NODELIST,作业占用的计算节点名
  • (REASON),作业正在等待执行的原因,详见 Job Reason Codes

显示的状态信息里包括了作业程序运行所在的计算节点名,使用 ssh 计算节点名 可以登录到计算节点。在计算节点上,使用 top 命令可以查看程序使用 CPU 的状况。

scancel 取消作业。先运行 squeue 命令查询作业编号数字 JobID ,然后运行以下命令取消作业:

scancel JOBID

scontrol 是用来查看和/或修改Slurm状态的管理工具。注意,许多 scontrol 命令只能以 root 身份执行。对于正在运行或排队的任务,可以使用

scontrol show job JobID

扫码关注微信公众号【生信F3】获取文章完整信息,分享生物信息学最新知识。

ShengXinF3_QRcode
ShengXinF3_QRcode

参考资料:

作业调度管理系统 http://docs.hpc.whu.edu.cn/files/whuhpcdocs.wiki/slurm_basic.html

Slurm资源管理与作业调度系统安装配置 http://hmli.ustc.edu.cn/doc/linux/slurm-install/slurm-install.html

SLURM 使用参考 https://bicmr.pku.edu.cn/~wenzw/pages/slurm.html

本文由 mdnice 多平台发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值