SLURM调度系统教程

SLURM调度系统教程

SLURM(Simple Linux Utility for Resource Management)是一个开源的、用于管理和调度高性能计算(HPC)集群资源的软件工具。它主要用于在大规模计算环境中分配和管理计算任务的资源,确保高性能计算集群的有效利用。SLURM被广泛用于科学研究、工程模拟、数据分析等需要大量计算资源的领域。

SLURM调度系统的主要功能和组件包括:

  • 作业调度: SLURM负责调度和分配计算任务,即作业,到集群中的计算节点上。它通过一种灵活的分区(Partition)和队列(Queue)系统,根据作业的需求和系统的可用资源来合理分配计算资源。

  • 资源管理: SLURM管理集群中的计算节点资源,包括处理器核心、内存、GPU等。通过资源管理,SLURM确保每个作业都得到足够的资源以顺利执行,同时避免资源冲突和浪费。

  • 用户权限控制: SLURM支持对集群资源的精细权限控制,确保只有经过授权的用户能够提交和管理作业。这有助于维护集群的安全性和稳定性。

  • 作业监控: SLURM提供作业监控和状态查询的功能,使用户能够随时了解自己作业的执行情况,包括作业是否在运行、已完成或出现错误等信息。

  • 灵活的调度策略: SLURM允许管理员根据集群的特定需求配置灵活的调度策略,以适应不同类型的作业和工作负载。

img

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 ,可认证集群、有效用户、有效记账账户等。

slurm安装

slurm 的核心组件:

  1. slurmctld(Controller Daemon):
    • slurmctld 是 SLURM 中的主控制守护程序,负责整个集群的管理和协调。它接受用户提交的作业请求,分配资源,进行作业调度,并监控计算节点的状态。
  2. slurmd(Compute Node Daemon):
    • slurmd 是在每个计算节点上运行的守护程序,负责接收控制节点的指令并执行。它负责启动和停止作业、监测节点资源利用情况、报告节点状态等。
  3. slurmdbd(Database Daemon):
    • slurmdbd 是一个可选的组件,用于将 SLURM 的状态和事件信息记录到数据库中,以便进行后续的查询和分析。数据库支持多种,如MySQL、PostgreSQL等。
  4. slurmctld和slurmd通信机制:
    • slurmctld 和 slurmd 之间通过RPC(Remote Procedure Call)进行通信,用于传递控制信息、作业状态等。通信是通过 Slurm Communications Library(slurmctld、slurmd和其他组件之间的通信库)完成的。
  5. Slurm命令行工具:
    • SLURM 提供了一系列命令行工具,用于用户提交作业、查询集群状态、监控作业执行等。常见的命令包括 sbatch(提交作业)、squeue(查询作业队列)、sinfo(查询节点信息)等。

slurm 安装包:

Slurm的源代码可以从 https://www.schedmd.com/downloads.php 下载。 Index of /slurm (schedmd.com)

Slurm也已经被打包适用于DebianUbuntu(名为 slurm-wlm),Fedora,以及NetBSD(在pkgsrc中)和FreeBSD

不过,通过系统的安装包安装的slurm版本一般都比较旧,建议可以通过源码安装。

slurm 安装依赖:

在安装SLURM时,有一些组件和依赖项是必须的,以确保SLURM正常运行。以下是一些常见的SLURM组件及其依赖项:

  1. slurmctld(Controller Daemon):
    • 依赖于 slurmdbd(如果启用数据库支持)、MUNGE(用于安全通信)。
    • 可能依赖于数据库(MySQL或MariaDB)作为 slurmdbd 的后端存储。
  2. slurmd(Compute Node Daemon):
    • 依赖于 MUNGE(用于安全通信)。
    • 可能依赖于其他节点间通信的网络组件。
  3. slurmdbd(Database Daemon):
    • 依赖于数据库(MySQL或MariaDB)。
  4. MUNGE(身份验证服务):
    • 可能依赖于系统库和安全库。
  5. 数据库(MySQL或MariaDB):
    • MySQL或MariaDB服务器软件。
    • 可能需要客户端库,以便slurmctld和slurmdbd能够与数据库通信。
  6. 其他可能的依赖项:
    • Perl:某些SLURM组件可能需要Perl支持。
    • Python:SLURM的一些脚本和工具可能需要Python支持。
    • Lua:用于支持特定的功能,如Lua SPANK插件。

这里重点关注,两个依赖项:mysql和munge。

安装命令如下:

apt-get install make hwloc libhwloc-dev libmunge-dev libmunge2 munge mariadb-server libmysqlclient-dev -y

mysql 配置

Slurm支持将账户信息等记录到简单的纯文本文件中、或直接存入数据库(MySQL或MariaDB等)、或对于多集群的某个安全管理账户信息的服务。该文档采用将记账信息等存储到数据库方式。

MySQL 和 MariaDB 都是开源数据库技术。您可以使用它们以包含行和列的表格格式存储数据。MySQL 是最广泛采用的开源数据库。它是许多热门网站、应用程序和商业产品的主要关系数据库。MariaDB 是 MySQL 的修改版本。在 MySQL 被 Oracle 公司收购后,出于许可和分发方面的问题,MySQL 的原始开发团队制作了 MariaDB。自收购以来,MySQL 和 MariaDB 经历了不同的发展。但是,MariaDB 采用 MySQL 的数据和表定义文件,还使用相同的客户端协议、客户端 API、端口和套接字。这是为了让 MySQL 用户能够轻松切换到 MariaDB。

systemctl enable mariadb         // 设置mariadb开机自启动
systemctl start mariadb          // 启动mariadb服务
systemctl status mariadb         // 查看mariadb状态

设置数据库权限

执行 mysql 命令进入MariaDB控制台,然后在MariaDB控制台中执行下面命令(注意#开始的是注释,不要执行):

# 生成slurm用户,以便该用户操作slurm_acct_db数据库,其密码是SomePassWD
create user 'slurm'@'localhost' identified by '123456';

# 生成账户数据库slurm_acct_db
create database slurm_acct_db;
# 赋予slurm从本机localhost采用密码SomePassWD登录具备操作slurm_acct_db数据下所有表的全部权限
grant all on slurm_acct_db.* TO 'slurm'@'localhost' identified by '123456' with grant option;
# 赋予slurm从system0采用密码SomePassWD登录具备操作slurm_acct_db数据下所有表的全部权限
grant all on slurm_acct_db.* TO 'slurm'@'system0' identified by '123456' with grant option;

# 生成作业信息数据库slurm_jobcomp_db
create database slurm_jobcomp_db;
# 赋予slurm从本机localhost采用密码SomePassWD登录具备操作slurm_jobcomp_db数据下所有表的全部权限
grant all on slurm_jobcomp_db.* TO 'slurm'@'localhost' identified by '123456' with grant option;
# 赋予slurm从system0采用密码SomePassWD登录具备操作slurm_jobcomp_db数据下所有表的全部权限
grant all on slurm_jobcomp_db.* TO 'slurm'@'system0' identified by '123456' with grant option;
启动munge服务

munge为slurm默认的验证机制,各节点 /etc/munge/munge.key 的内容需要一致,且所有者都为munge用户。

systemctl enable munge   // 设置munge开机自启动
systemctl start munge    // 启动munge服务
systemctl status munge   // 查看munge状态

生成密钥信息(如果这个目录已经存在,则不需要生成)

dd if=/dev/random bs=1 count=1024 >/etc/munge/munge.key

拷贝密钥(主节点拷贝其他节点)

#拷贝主节点密钥到其余节点
scp /etc/munge/munge.key munge@ip:/etc/munge

重启munge服务

systemctl restart munge
编译安装slurm
wget https://download.schedmd.com/slurm/slurm-21.08.8.tar.bz2
tar -jxvf slurm-21.08.8.tar.bz2
cd slurm-21.08.8/
./configure --prefix=/usr/local --sysconfdir=/etc/slurm
make -j16
make install
cp -r etc/slurm*.service /etc/systemd/system/

5. 修改slurm 主节点的配置文件

mkdir -p /etc/slurm

在/etc/slurm/ 下创建cgroup.conf文件:(原封不动的粘进去)

###
#
# Slurm cgroup support configuration file
#
# See man slurm.conf and man cgroup.conf for further
# information on cgroup configuration parameters
#--
CgroupAutomount=yes

ConstrainCores=no
ConstrainRAMSpace=no

在/etc/slurm 下创建slurm.conf文件:(原封不动的粘进去,一些密码需要修改 )这个配置文件,实现了 gpus 的限制,以及队列的分配,

ClusterName=slurm-test
SlurmctldHost=cn01
#SlurmctldHost=
#
MpiDefault=none
ProctrackType=proctrack/cgroup
ReturnToService=1
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/var/spool/slurmd
SlurmdUser=root
StateSaveLocation=/var/spool/slurmctld
SwitchType=switch/none
TaskPlugin=task/affinity

#
#
# TIMERS
InactiveLimit=0
KillWait=30
MinJobAge=300
SlurmctldTimeout=120
SlurmdTimeout=300

Waittime=0

# SCHEDULING
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core_Memory
#
#
# JOB PRIORITY
AccountingStorageEnforce=qos,limits
AccountingStorageHost=localhost
AccountingStoragePass=/var/run/munge/munge.socket.2
AccountingStorageType=accounting_storage/slurmdbd
AccountingStorageTRES=gres/gpu
JobCompHost=localhost
JobCompLoc=slurm_acct_db
JobCompPass=123456
JobCompType=jobcomp/none
JobCompUser=slurm
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/linux
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurmd.log
#GresTypes=gpu
NodeName=cn01  RealMemory=120000 State=UNKNOWN Sockets=2 CoresPerSocket=18 CPUs=36
PartitionName=cpu Nodes=cn01 Default=YES MaxTime=168:00:00 State=UP

上面的代码中的ClusterName表示集群名字,随便填写一个,SlurmctldHost表示主节点的节点名称,可以从hostname获得;

NodeName=computenode 表示计算节点的名称,可以从计算节点的hostname中获取;

Sockets表示服务器cpu的个数,cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l可以获取

CoresPerSocket表示每个cpu的核数,cat /proc/cpuinfo| grep "cpu cores"| uniq

CPUs表示cpu的总数,在没有开启超线程的情况下等于Sockets* CoresPerSocket, 开了超线程的话,cat /proc/cpuinfo | grep "processor" | wc -l可以获取。

在/etc/slurm 下创建gres.conf文件:在服务端里面不放任何内容

在/etc/slurm 下创建slurmdbd.conf文件(原封不动粘进去,一些密码需要修改)

AuthType=auth/munge
AuthInfo=/var/run/munge/munge.socket.2
#
# slurmDBD info
DbdAddr=127.0.0.1
DbdHost=localhost
#DbdPort=7031
SlurmUser=root
#MessageTimeout=300
DebugLevel=verbose
#DefaultQOS=normal,standby
LogFile=/var/log/slurm/slurmdbd.log
PidFile=/var/run/slurmdbd.pid
#PluginDir=/usr/lib/slurm
#PrivateData=accounts,users,usage,jobs
#TrackWCKey=yes
#
# Database info
StorageType=accounting_storage/mysql
StorageHost=localhost
StoragePort=3306
StoragePass=12345
StorageUser=slurm
StorageLoc=slurm_acct_db

chmod 600 /etc/slurm/slurmdbd.conf

启动slurm服务
在服务端只需要启动 slurmdbd  slurmctld
systemctl enable slurmdbd
systemctl start slurmdbd
systemctl status slurmdbd
 
systemctl enable slurmctld
systemctl start slurmctld
systemctl status slurmctld

至此slurm安装完毕,如果启动服务的过程中报错,使用调试方式启动查看启动服务的过程中报错

$ slurmctld -Dvvvvv
$ slurmdbd -Dvvvvv
$ slurmd -Dvvvvv

客户端安装

1.安装必要库文件

sudo su
apt-get install make hwloc libhwloc-dev libmunge-dev libmunge2 munge  -y

2.启动munge服务

systemctl enable munge   // 设置munge开机自启动
systemctl start munge    // 启动munge服务
systemctl status munge   // 查看munge状态
#拷贝主节点密钥到其余节点
scp /etc/munge/munge.key munge@ip:/etc/munge

重启munge服务

systemctl restart munge

3.编译安装slurm

wget https://download.schedmd.com/slurm/slurm-21.08.8.tar.bz2
tar -jxvf slurm-21.08.8.tar.bz2
cd slurm-21.08.8/
./configure --prefix=/usr/local --sysconfdir=/etc/slurm
make -j16
make install
cp -r etc/slurm*.service /etc/systemd/system/

4. 根据计算节点信息更新主节点的slurm配置

查看计算节点的名称:hostname

查看计算节点的CPU、内存等信息,然后更新主节点的slurm.conf

# 比如:cn02
NodeName=cn02  RealMemory=120000 State=UNKNOWN Sockets=2 CoresPerSocket=18 CPUs=36
PartitionName=cpu Nodes=cn01,cn02 Default=YES MaxTime=168:00:00 State=UP

如果该节点是GPU节点,则

在/etc/slurm 下创建gres.conf文件:

Name=gpu Type=A800 File=/dev/nvidia[0-7]

并且将slurm.conf中的如下配置项更新:

#GresTypes=gpu
去掉注释,更新为:
GresTypes=gpu
NodeName=cn02  RealMemory=120000 State=UNKNOWN GRES=gpu:8 Sockets=2 CoresPerSocket=18 CPUs=36

更新配置后,在主节点执行下如下命令重新加载配置项:

scontrol reconfigure

5. 把master的slurm配置项拷贝过来

mkdir -p /etc/slurm
#拷贝主节点的slurm.conf和cgroup.conf
scp /etc/slurm/slurm.conf root@ip:etc/slurm/
scp /etc/slurm/cgroup.conf root@ip:/etc/slurm/
scp /etc/slurm/gres.conf root@ip:/etc/slurm/

6.启动slurm服务

在客户端只需要启动slurmd
systemctl enable slurmd
systemctl start slurmd
systemctl status slurmd

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Slurm作业调度系统是一个用于分配和管理计算任务的开源软件。它允许用户在一个大规模的计算集群上提交、管理和监视作业。 首先,用户需要了解Slurm的基本概念。在Slurm中,一个作业是用户指定的一项计算任务,可以包括一个或多个任务。任务是作业的一个单元,可能会在不同的计算节点上执行。作业可以使用不同的资源进行调度,如CPU、内存和 GPU。用户需要清楚地定义作业的资源需求,以便Slurm可以正确地分配资源。 使用Slurm提交作业非常简单。用户只需要编写一个作业提交脚本,该脚本包含了作业的配置信息,如资源需求、输入文件、输出文件等。然后使用`sbatch`命令提交这个脚本即可。Slurm会按照其配置进行作业调度,将作业分配给相应的计算节点进行执行。 一旦作业提交后,用户可以使用`squeue`命令来跟踪作业的状态。该命令显示了作业的ID、状态、开始时间和节点信息等。用户可以根据需要使用`scancel`命令来取消作业。 Slurm还提供了一些高级功能,用于更精细地控制作业的调度和资源分配。用户可以使用`srun`命令在计算节点上启动特定的任务,并通过在作业提交脚本中设置一些参数来控制任务的执行方式。 总之,Slurm作业调度系统是一个强大且灵活的工具,可以帮助用户有效地管理和调度计算任务。通过了解基本概念和使用指南,用户可以更好地使用Slurm来利用集群资源进行高性能计算。 ### 回答2: Slurm作业调度系统是一个开源的、高效的集群管理和作业调度工具。它被广泛用于大规模计算集群和超级计算机系统。以下是使用Slurm的一些指南: 1. 提交作业:通过使用sbatch命令,可以向Slurm系统提交作业。作业通常是一个可执行的程序或脚本。可以使用sbatch命令指定作业的名称、资源需求、作业优先级等。 2. 查看作业状态:可以使用squeue命令查看当前正在运行的作业以及等待运行的作业和队列中的作业。squeue命令可以提供作业的ID、状态、用户等信息。 3. 取消作业:如果需要取消一个已经提交的作业,可以使用scancel命令。需要提供作业的ID来取消作业。 4. 调整作业优先级:使用sprio命令可以调整作业的优先级。较高优先级的作业将更早地得到处理。可以根据需求调整作业的优先级。 5. 资源管理:Slurm可以有效地分配集群的资源给不同的作业。可以使用scontrol命令设置和管理资源分配策略。可以向Slurm系统添加、删除或修改节点。 6. 队列管理:使用squeue和scontrol命令可以管理队列。可以创建、暂停、恢复、删除队列。可以根据不同的作业需求和优先级配置不同的队列。 7. 使用预定义脚本:Slurm提供了一些预定义的脚本,可以用于常见的作业操作,比如提交作业、取消作业等。可以根据需要进行修改和使用这些脚本。 8. 集群监控:Slurm提供一些工具来监控集群的状态和性能。可以使用sinfo命令查看集群中的节点状态和资源使用情况。可以使用sacct命令查看作业的执行情况和资源使用情况。 总之,Slurm作业调度系统是一个功能强大的集群管理工具,可以帮助用户高效地管理和调度作业。通过使用上述指南,用户可以更好地了解和使用Slurm系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值