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 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/201774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【go语言开发】go项目打包成Docker镜像,包括Dockerfile命令介绍、goctl工具生成

本文主要介绍如何将go项目打包成镜像&#xff0c;首先介绍Dockerfile常用命令介绍&#xff0c;然后介绍使用工具goctl用于生成Dockerfile&#xff0c;还可以根据需求自定义指令内容&#xff0c;最后讲解如何将go-blog项目打包成镜像&#xff0c;以及如何运行等 文章目录 前言Do…

提高工厂能源效率的关键:工厂能耗监测平台

工业做为能源消耗的重要场所&#xff0c;所以节能减排对工业来讲是一个亟需解决的问题。除了对设备进行更新换代外&#xff0c;还需要能源管理消耗监测平台&#xff0c;帮助企业实现节能减排的目标。 工厂能源消费量非常庞大&#xff0c;能源比较难以监测与控制。传统能源的管…

【Linux】信号的保存和捕捉

文章目录 一、信号的保存——信号的三个表——block表&#xff0c;pending表&#xff0c;handler表sigset_t信号集操作函数——用户层sigprocmask和sigpending——内核层 二、信号的捕捉重谈进程地址空间&#xff08;第三次&#xff09;用户态和内核态sigaction可重入函数volat…

04 硬件知识入门(二极管)

1 二极管的定义 导电性能介于导体与绝缘体之间的材料称为半导体&#xff0c;常见的半导体材料有硅、锗和硒等。利用半导体材料可以制作各种各样的半导体元器件&#xff0c;如二极管、三极管、场效应管和晶闸管等都是由半导体材料制作而成的。 2 二极管的简介 1&#xff0e;半…

js取出对象数组某个属性拼接成字符串或者取出某些属性组成新的数组

数组users&#xff1a; users[{id:1,name:张三},{id:2,name:李四}] 现在需要把数组里所有的 id、name 取出&#xff0c;拼接成一个以逗号分隔的字符串&#xff0c;直接上代码 let userIds users.map((user) > { return user.id }).join(,) console.log(use…

独立站的优点是什么?/独立站的优点是什么?/独立站的优点是什么?

独立站是指一个独立的电子商务网站&#xff0c;由商家自行搭建和运营&#xff0c;不依赖于任何第三方平台。独立站具有以下优点&#xff1a; 一、自主性和自由度 独立站由商家自行搭建和运营&#xff0c;因此商家具有更高的自主权和自由度。他们可以根据自己的需求和目标受众…

已解决error: (-215:Assertion failed) inv_scale_x > 0 in function ‘cv::resize‘

需求背景 欲使用opencv的resize函数将图像沿着纵轴放大一倍&#xff0c;即原来的图像大小为(384, 512), 现在需要将图像放大为(768, 512)。 源码 import cv2 import numpy as np# 生成初始图像 img np.zeros((384, 512), dtypenp.uint8) img[172:212, 32:-32] 255 H, W …

华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

Vue2学习笔记(数据监测)

Vue监视数据的原理&#xff1a; 1. vue可以监视data中所有层次的数据。 2. 如何监测对象中的数据&#xff1f; 通过setter实现监视&#xff0c;且要在new Vue时就传入要监测的数据。 (1).对象中后追加的属性&#xff0c;Vue默认不做响应式处理 (2).如需给后添加的属性做响应式&…

26、卷积 - 实际上是一个特征提取器

矩阵乘法的本质是特征的融合&#xff0c;卷积算法的本质是特征的提取。 回想一下之前所有介绍卷积的时候&#xff0c;描述了一种卷积运算的场景&#xff0c;那就是一个窗口在图片上滑动&#xff0c;窗口中的数值是卷积核的参数&#xff0c;也就是权值。 卷积的计算本质是乘累…

相似背景搜索相关技术专利总结

CN 110569878 A 一种基于卷积神经网络的照片背景相似度聚类方法及计算机-上海汇付数据服务有限公司2019 思路 对原始图像预处理以校正原始图像中的识别目标的方向前景图像特征与背景图像特征进行实例分割&#xff0c;并进行背景分离&#xff08;在测试时将原始图像中被实例分…

吹响AI技术应用的号角

毫无疑问&#xff0c;各企业正围绕各种技术展开一场持续不断的角逐&#xff0c;力争率先取得领先且具创新性的技术进步&#xff0c;AI技术也不例外。疫情期间&#xff0c;全球各地企业的员工纷纷转向居家办公。因此&#xff0c;为轻松实现这一转型并建立起远程办公的新常态&…

微信小程序中生命周期钩子函数

微信小程序 App 的生命周期钩子函数有以下 7 个&#xff1a; onLaunch(options)&#xff1a;当小程序初始化完成时&#xff0c;会触发 onLaunch&#xff08;全局只触发一次&#xff09;。onShow(options)&#xff1a;当小程序启动或从后台进入前台显示时&#xff0c;会触发 on…

【微信小程序开发】学习小程序的模块化开发(自定义组件和分包加载)

前言 模块化开发是一种将复杂的应用程序分解为一系列独立的模块&#xff0c;每个模块负责完成特定的功能的开发方式。模块化开发可以提高代码的可维护性和可复用性&#xff0c;使开发过程更加高效和灵活。 文章目录 前言模块化开发的重要性和优势自定义组件自定义组件的概念和作…

强强联合!航天科技AIRIOT助力航天电工打造智慧工厂

随着工业4.0时代的到来&#xff0c;电线电缆制造行业正在进入全新的数字化时代&#xff0c;企业需要构建新型智能工厂以助力传统产业智能制造升级。通过搭建智慧系统并结合解决方案&#xff0c;实现从底层产线、车间到工厂资产的全面感知与洞察&#xff0c;以及数据的全量采集与…

接上文 IBM ServeRAID M1015阵列卡 支持RAID5

模块到了&#xff0c;由于着急测试没直接拍照&#xff0c;就是一个跟指甲盖大小的模块&#xff0c;直接安装到阵列卡U1接口上&#xff0c;&#xff0c;不知道U1是哪个位置的参考前文&#xff0c;安装到机器上之后的图片如下 启动服务器&#xff0c;进入WebBIOS&#xff0c;选择…

python向文件写入数据

参考&#xff1a; https://www.jb51.net/article/282371.htm https://blog.51cto.com/u_16213300/7426825 lines [line 1\n, line 2\n, line 3\n]with open(example.txt, w) as f:f.writelines(lines)def generate_lines():yield line 1\nyield line 2\nyield line 3\nwith o…

c语言编译优化引发问题

问题描述 同样的代码,不优化编译,可以正常执行,经过-O2优化编译后,代码被卡住.整体功能涉及多进程,多线程操作. 问题发现 经过加打印,发现卡在while(a!0);//死循环,等待特殊事件发生来解开循环 a初始化为-1; 过一会后,另外有个线程,当特定事件发生的时候,将a置为0; 通过加打…

使用c#罗列、监视、控制进程

个人简介:本人多年从事研发和测试领域工作,有一定的经验; 口号:懒人推动科技进步,学习编程啊脚本啊目的就是要将人从做相同的工作脱离出来,手懒可以但是脑子不能懒,让重复的事情自动完成,能动一下就完成任务就不能动两下,懒到极致才是目标! 方向:本人不怎么将理论的…

阻抗控制下机器人接触刚性环境振荡不稳定进行阻抗调节

在阻抗控制下&#xff0c;当机器人接触刚性环境时&#xff0c;可能会出现振荡不稳定的情况。这可以通过调整机器人的阻抗参数来进行调节。 阻抗接触 阻抗参数中的质量、阻尼和刚度都会对机器人控制系统的性能和稳定性产生重要影响。质量主要影响系统的惯性&#xff0c;从而影响…