1. Slurm简介 | 您所在的位置:网站首页 › 系统配置管理系统 › 1. Slurm简介 |
1. Slurm简介¶
备注 该文档基于 Slurm 21.08 及 CentOS 7.9 x86_64 ,除非特殊说明,所有命令均采用 root 用户在命令行终端下执行。 1.1. 用途¶Slurm(Simple Linux Utility for Resource Management, http://slurm.schedmd.com/ )是开源的、具有容错性和高度可扩展的Linux集群超级计算系统资源管理和作业调度系统。超级计算系统可利用Slurm对资源和作业进行管理,以避免相互干扰,提高运行效率。所有需运行的作业,无论是用于程序调试还是业务计算,都可以通过交互式并行 srun 、批处理式 sbatch 或分配式 salloc 等命令提交,提交后可以利用相关命令查询作业状态等。 1.2. 架构¶Slurm采用slurmctld服务(守护进程)作为中心管理器用于监测资源和作业,为了提高可用性,还可以配置另一个备份冗余管理器。各计算节点需启动slurmd守护进程,以便被用于作为远程shell使用:等待作业、执行作业、返回状态、再等待更多作业。slurmdbd(Slurm DataBase Daemon)数据库守护进程(非必需,建议采用,也可以记录到纯文本中等),可以将多个slurm管理的集群的记账信息记录在同一个数据库中。还可以启用slurmrestd(Slurm REST API Daemon)服务(非必需),该服务可以通过REST API与Slurm进行交互,所有功能都对应的API。用户工具包含 srun 运行作业、 scancel 终止排队中或运行中的作业、 sinfo 查看系统状态、 squeue 查看作业状态、 sacct 查看运行中或结束了的作业及作业步信息等命令。 sview 命令可以图形化显示系统和作业状态(可含有网络拓扑)。 scontrol 作为管理工具,可以监控、修改集群的配置和状态信息等。用于管理数据库的命令是 sacctmgr ,可认证集群、有效用户、有效记账账户等。 1.3. 术语¶ 节点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:队列、分区。用于对计算节点、作业并行规模、作业时长、用户等进行分组管理,以合理分配资源。 1.4. 插件¶Slurm含有一些通用目的插件可以使用,采用这些插件可以方便地支持多种基础结构,允许利用构建块方式吸纳多种Slurm配置,主要包括如下插件: 记账存储(Accounting Storage):主要用于存储作业历史数据。当采用SlurmDBD时,可以支持有限的基于系统的历史系统状态。 账户收集能源(Account Gather Energy):收集系统中每个作业或节点的能源(电力)消耗,该插件与记账存储Accounting Storage和作业记账收集Job Account Gather插件一起使用。 通信认证(Authentication of communications):提供在Slurm不同组件之间进行认证机制。 容器(Containers):HPC作业负载容器支持及实现。 信用(Credential,数字签名生成,Digital Signature Generation):用于生成电子签名的机制,可用于验证作业步在某节点上具有执行权限。与用于身份验证的插件不同,因为作业步请求从用户的 srun 命令发送,而不是直接从slurmctld守护进程发送,该守护进程将生成作业步凭据及其数字签名。 通用资源(Generic Resources):提供用于控制通用资源(如GPU)的接口。 作业提交(Job Submit):该插件提供特殊控制,以允许站点覆盖作业在提交和更新时提出的需求。 作业记账收集(Job Accounting Gather):收集作业步资源使用数据。 作业完成记录(Job Completion Logging):记录作业完成数据,一般是记账存储插件的子数据集。 启动器(Launchers):控制srun启动任务时的机制。 MPI:针对多种MPI实现提供不同钩子,可用于设置MPI环境变量等。 抢占(Preempt):决定哪些作业可以抢占其它作业以及所采用的抢占机制。 优先级(Priority):在作业提交时赋予作业优先级,且在运行中生效(如,它们生命期)。 进程追踪(Process tracking,为了信号控制):提供用于确认各作业关联的进程,可用于作业记账及信号控制。 调度器(Scheduler):用于决定Slurm何时及如何调度作业的插件。 节点选择(Node selection):用于决定作业分配的资源插件。 站点因子(Site Factor,站点优先级):将作业多因子组件中的特殊的site_factor优先级在作业提交时赋予作业,且在运行中生效(如,它们生命期)。 交换及互联(Switch or interconnect):用于网络交换和互联接口的插件。对于多数网络系统(以太网或InifiniBand)并不需要。 作业亲和性(Task Affinity):提供一种用于将作业和其独立的任务绑定到特定处理器的机制。 网络拓扑(Network Topology):基于网络拓扑提供资源选择优化,用于作业分配和提前预留资源。 1.5. 配置模式¶Slurm客户节点配置,有两种模式: 传统模式:客户节点采用 /etc/slurm/ 目录下的 slurm.conf 等配置文件进行配置。 无配置(configless)模式:客户节点无需配置 /etc/slurm 目录下相应的配置文件。 无配置模式是Slurm的一项新特性(从20.02版起支持),可以允许计算节点和用户登录节点从slurmctld守护进程获取配置而无需采用 /etc/slurm 等目录下的本地配置文件。集群在Slurm控制节点上统一控制配置文件,计算节点、登录节点和其它集群节点只需通过 /lib/systemd/system/slurmd.service 文件配置slurmd服务启动参数,利用启动后的slurmd服务获取所需配置信息即可,而无需复制管理节点上的这些文件成为本地文件(降低文件配置不一样的风险)。支持的配置文件有: slurm.conf acct_gather.conf cgroup.conf cgroup_allowed_devices_file.conf cli_filter.lua ext_sensors.conf gres.conf helpers.conf job_container.conf knl_cray.conf knl_generic.conf oci.conf plugstack.conf topology.conf slurmd服务启动时将从指定的slurmctld节点获取配置文件,slurmctld节点可以采用 --conf-server 参数准确指定或利用DNS SRV记录指定,采用 --conf-server 参数指定的优先级高于采用DNS SRV记录指定: 采用 --conf-server 参数指定(默认端口6817可省略):仅一个管理节点slurmctl-primary: slurmd --conf-server slurmctl-primary:6817 一个管理节点slurmctl-primary和一个备份节点slurmctl-secondary: slurmd --conf-server slurmctl-primary:6817,slurmctl-secondary 采用DNS SRV记录:_slurmctld._tcp 3600 IN SRV 10 0 6817 slurmctl-backup _slurmctld._tcp 3600 IN SRV 0 0 6817 slurmctl-primary 参见: 无配置(configless)模式 2. 规划准备¶集群名:MyCluster 管理节点admin:内网IP:191.168.1.254 /opt/ 目录:通过NFS网络共享给其它节点使用 配置文件: /etc/slurm/ 目录下的 cgroup.conf 、 slurm.conf 、 slurmdbd.conf 等文件 需要启动(按顺序)的守护进程服务: 通信认证:munge 系统数据库:mariadb(也可采用文本保存,更简单,本文不涉及) Slurm数据库:slurmdbd 主控管理器:slurmctld 数据库节点(运行slurmdbd服务)admin:可与管理节点共用,本文档与管理节点共用 用户登录节点login:内网IP:191.168.1.250 /opt/ 目录:通过NFS服务共享管理节点上的 /opt/ 目录 计算节点node[1-10]:内网IP:191.168.1.[1-10] /opt/ 目录:通过NFS服务共享管理节点上的 /opt/ 目录 需要启动(按顺序)的服务:通信认证:munge Slurm数据库:slurmdbd 各节点node[1-10],login:admin节点root用户可以通过密钥无需输入密码ssh进入各节点 安装好munge包 配置有NIS或LDAP等用户信息服务同步admin节点用户信息(管理节点建立slurm用户后,各节点执行 id slurm 可确认其slurm用户是否存在) 并行操作: 各节点执行同样命令可以利用 pdsh 命令或for循环处理: 如需安装PDSH并行shell包,可利用源 http://mirrors.ustc.edu.cn/epel/ 进行安装配置。 在node[1-10]节点执行 id slurm 可用下述命令之一: pdsh: pdsh -w node[1-10] id slurm for循环: for i in `seq 1 10`; do ssh node$i id slurm; done 复制 /etc/hosts 文件到node[1-3,5,7-10]节点 /etc 目录下可执行下述命令之一: pdsh: pdcp -w node[1-3,5,7-10] /etc/hosts /etc for循环: for i in `seq 1 10`; do scp -a /etc/hosts node$i:/etc/; done 管理服务的常用命令(以slurmd为例): 设置开机自启动服务: systemctl enable slurmd 启动服务: systemctl start slurmd 重新启动服务: systemctl restart slurmd 停止服务: systemctl stop slurmd 查看服务状态及出错信息: systemctl status slurmd 查看服务日志: journalctl -xe 3. 编译安装slurm¶可以采用第三方已编译好的RPM或DEB包进行安装,也可以采用源码编译方式。 可以在安装有所需的依赖包的任何节点处理,本例在管理节点进行。 3.1. 安装编译slurm所需的依赖包¶安装编译Slurm时所需软件包,执行: yum -y install mariadb mariadb-devel mariadb-server munge munge-libs munge-devel hwloc-libs hwloc-devel hdf5-devel pam-devel perl-ExtUtils-MakeMaker python3 readline-devel kernel-headers dbus-devel rpm-build 3.2. 下载Slurm源码包¶访问 https://www.schedmd.com/downloads.php 复制所需版本下载源码包链接后,执行: wget https://download.schedmd.com/slurm/slurm-21.08.2.tar.bz2 3.3. 编译成RPM包¶在 slurm-21.08.2.tar.bz2 文件所在目录执行(如有必要改变生成包的内容,可以提前设置 ~/.rpmmacros 文件): rpmbuild -ta slurm-21.08.2.tar.bz2备注 如提示缺少库、包等,请安装对应的包后再执行上面命令。 如所依赖的包安装的不全,上述命令即使没有报错,能生成RPM包,也有可能所需的功能没有。 成功后将在 /root/rpmbuild/RPMS/x86_64/ 目录下生成类似如下RPM文件: slurm-21.08.2-1.el7.x86_64.rpm slurm-libpmi-21.08.2-1.el7.x86_64.rpm slurm-slurmctld-21.08.2-1.el7.x86_64.rpm slurm-contribs-21.08.2-1.el7.x86_64.rpm slurm-openlava-21.08.2-1.el7.x86_64.rpm slurm-slurmd-21.08.2-1.el7.x86_64.rpm slurm-devel-21.08.2-1.el7.x86_64.rpm slurm-pam_slurm-21.08.2-1.el7.x86_64.rpm slurm-slurmdbd-21.08.2-1.el7.x86_64.rpm slurm-example-configs-21.08.2-1.el7.x86_64.rpm slurm-perlapi-21.08.2-1.el7.x86_64.rpm slurm-torque-21.08.2-1.el7.x86_64.rpm 3.4. 不同节点类型所需安装包¶ 管理节点(Head Node,运行slurmctld服务)、计算节点(Compute Node)和用户登录节点(Login Node):slurm slurm-perlapi slurm-slurmctld(仅管理节点需要) slurm-slurmd(仅计算节点需要,用户登录节点如采用无配置模式,则也需要) SlurmDBD节点:slurm slurm-slurmdbd 4. 管理节点操作(也为其它节点配置)¶ 4.1. 设置Slurm的YUM软件仓库¶可以将前面生成的RPM通过NFS服务共享或直接复制到各节点,然后执行 yum localinstall 包文件名 命令安装,或采用下面建立YUM软件仓库后直接用包名方式安装。 建立YUM仓库目录: mkdir -p /opt/src/slurm复制前面生成的RPM文件到 /opt/src/slurm/ 目录: cp /root/rpmbuild/RPMS/x86_64/*.rpm /opt/src/slurm/建立YUM仓库RPM文件索引: 在 /opt/src/slurm/ 目录下运行 createrepo . 命令生成仓库索引。 生成repo配置文件,执行命令: cat >/etc/yum.repos.d/slurm.repo |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |