slurm作业调度管理系统配置-集群搭建步骤6

        SLURM (Simple Linux Utility for Resource Management)是一种可用于大型计算节点集群的高度可伸缩和容错的集群管理器和作业调度系统,被世界范围内的超级计算机和计算集群广泛采用。SLURM 维护着一个待处理工作的队列并管理此工作的整体资源利用。它以一种共享或非共享的方式管理可用的计算节点(取决于资源的需求),以供用户执行工作。SLURM 会为任务队列合理地分配资源,并监视作业至其完成。如今,SLURM 已经成为了很多最强大的超级计算机上使用的资源管理器,如天河二号上便使用了 SLURM 资源管理系统。

        此次安装配置选择cn03作为管理节点,其他的作为计算节点,管理节点需要运行的slurm服务有slurmdbd(记账服务)、slurmctld(控制管理服务)、slurmd(作业调度服务),其他的节点只需要运行slurmd(作业调度服务)即可。

        此次搭建系统版本: Centos7.9

        主控节点:192.168.1.203(cn03)

        计算节点:192.168.1.201-205(cn01-05)

        搭建之前请确认所有节点防火墙是关闭的,如果不是请执行以下命令

systemctl stop firewalld
systemctl disable firewalld

1、编译slurm安装包

        在编译之前,首先得在系统上安装如下安装包,系统不同可能也需要安装更多的软件包,具体可根据编译slurm包时候的依赖提示进行安装。

        注意:主控节点和计算节点都需要安装       

yum install -y readline-devel perl-ExtUtils* perl-Switch pam-devel mariadb-devel lua-devel hwloc-devel

        下载slurm安装包,当前下载的版本是slurm-21.08.8-2.tar.bz2。下载地址见下方   Downloads | SchedMDicon-default.png?t=N7T8https://www.schedmd.com/downloads.php      下载完成后使用rpmbuild命令编译成rpm包:

#编译时最好不要加-with hwloc参数,要不然后面提交作业时容易报srun 浮点数溢出的错误
rpmbuild -ta -with lua slurm-21.08.8-2.tar.bz2

       root用户编译完成后会在/root/rpmbuild/RPMS/x86_64下生成与slurm有关的rpm包

slurm-21.08.8-2.el7.x86_64.rpm
slurm-contribs-21.08.8-2.el7.x86_64.rpm
slurm-devel-21.08.8-2.el7.x86_64.rpm
slurm-example-configs-21.08.8-2.el7.x86_64.rpm
slurm-libpmi-21.08.8-2.el7.x86_64.rpm
slurm-openlava-21.08.8-2.el7.x86_64.rpm
slurm-pam_slurm-21.08.8-2.el7.x86_64.rpm
slurm-perlapi-21.08.8-2.el7.x86_64.rpm
slurm-slurmctld-21.08.8-2.el7.x86_64.rpm
slurm-slurmd-21.08.8-2.el7.x86_64.rpm
slurm-slurmdbd-21.08.8-2.el7.x86_64.rpm
slurm-torque-21.08.8-2.el7.x86_64.rpm

2、管理节点安装slurm并配置有关服务

2.1 配置slurmdbd服务

 安装之前需在系统上添加slurm用户,用于启动slurm相关服务:

export SLURMUSER=1121
groupadd -g $SLURMUSER slurm 
useradd -m -c "SLURM workload manager" -d /var/lib/slurm -u $SLURMUSER -g slurm -s /bin/bash slurm

使用rpm命令安装slurm相关包:  

rpm -ivh slurm*.rpm

创建有关目录、配置文件并修改权限

#slurmdbd.conf文件为slurmdbd服务的配置文件,所有者必须为slurm用户
touch /etc/slurm/slurmdbd.conf
chown slurm:slurm /etc/slurm/slurmdbd.conf

#slurm.conf文件为slurmd、slurmctld的配置文件,所有者必须为root用户
touch /etc/slurm/slurm.conf
chown root:root /etc/slurm/slurm.conf

#建立slurmctld服务存储其状态等的目录,由slurm.conf中StateSaveLocation参数定义:
mkdir /var/spool/slurmctld
chown slurm:slurm /var/spool/slurmctld

#建立日志文件存储目录,并修改目录权限
mkdir /var/log/slurm
cd /var/log/slurm/
touch slurmd.log
touch slurmctld.log
touch slurmdbd.log
chown slurm:slurm /var/log/slurm

编辑/etc/slurm/slurmdbd.conf文件,添加如下内容:

AuthType=auth/munge  #认证方式,该处采用munge进行认证
AuthInfo=/var/run/munge/munge.socket.2 #为了与slurmctld控制节点通信的其它认证信息

# slurmDBD info
DbdAddr=localhost # 数据库节点名
DbdHost=localhost # 数据库IP地址
DbdPort=6819 # 数据库端口号,默认为6819
SlurmUser=slurm # 用户数据库操作的用户
MessageTimeout=60 # 允许以秒为单位完成往返通信的时间,默认为10秒
DebugLevel=5 # 调试信息级别,quiet:无调试信息;fatal:仅严重错误信息;error:仅错误信息; info:错误与通常信息;verbose:错误和详细信息;debug:错误、详细和调试信息;debug2:错误、详细和更多调试信息;debug3:错误、详细和甚至更多调试信息;debug4:错误、详细和甚至更多调试信息;debug5:错误、详细和甚至更多调试信息。debug数字越大,信息越详细
LogFile=/var/log/slurm/slurmdbd.log # slurmdbd守护进程日志文件绝对路径
PidFile=/var/run/slurmdbd.pid # slurmdbd守护进程存储进程号文件绝对路径

# Database info 
StorageType=accounting_storage/mysql # 数据存储类型
StorageHost=localhost # 存储数据库节点名
StoragePort=3306 # 存储数据库服务端口号
StoragePass=password # 存储数据库密码
StorageUser=slurm # 存储数据库用户名
StorageLoc=slurm_acct_db # 存储位置,对应数据库中的slurm_acct_db的表名称

编辑完成后保存,启动slurmdbd服务并加入开机自启:

systemctl enable slurmdbd
systemctl restart slurmdbd

2.2 配置slurmd服务  

        无配置模式是Slurm的一项新特性(从20.02版起支持),可以允许计算节点和用户登录节点从slurmctld守护进程获取配置而无需采用 /etc/slurm 等目录下的本地配置文件。需要在管理节点的slurm.conf文件配置SlurmctldParameters=enable_configless选项。

编辑/etc/slurm/slurm.conf文件,添加如下内容:

配置的更多详情可参考slurm官方说明:Slurm Workload Manager - slurm.conf

# slurm.conf file. Please run configurator.html
# (in doc/html) to build a configuration file customized
# for your environment.
#

################################################
#                   CONTROL                    #
################################################
ClusterName=hgy       #集群名称
SlurmctldHost=cn03    #管理服务主控节点名
SlurmUser=root        #slurm的主用户
SlurmdUser=root       #slurmd服务的启动用户
SlurmctldPort=6817    #slurmctld服务端口
SlurmdPort=6818        #slurmd服务的端口
AuthType=auth/munge    #采用munge认证,与其他计算节点通信

################################################
#            LOGGING & OTHER PATHS             #
################################################
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurm/slurmd.log
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
SlurmdSpoolDir=/var/spool/slurmd
StateSaveLocation=/var/spool/slurmctld
SlurmctldParameters=enable_configless  #采用无配置模式

################################################
#                  ACCOUNTING                  #
################################################
AccountingStorageEnforce=associations,limits,qos  #account存储数据的配置选项
AccountingStorageHost=cn03    #数据库存储节点
AccountingStoragePass=/var/run/munge/munge.socket.2 #munge认证文件,与slurmdbd.conf文件中的AuthInfo文件同名。
AccountingStoragePort=6819     #slurmd服务监听端口,默认为6819
AccountingStorageType=accounting_storage/slurmdbd   #数据库记账服务
AccountingStorageTRES=cpu,mem,energy,node,billing,fs/disk,vmem,pages,gres/gpu:tesla  #记账信息
AcctGatherEnergyType=acct_gather_energy/none   #作业消耗能源信息,none代表不采集
AcctGatherFilesystemType=acct_gather_filesystem/none
AcctGatherInterconnectType=acct_gather_interconnect/none
AcctGatherNodeFreq=0
AcctGatherProfileType=acct_gather_profile/none
ExtSensorsType=ext_sensors/none
ExtSensorsFreq=0

################################################
#                      JOBS                    #
################################################
JobCompHost=localhost   #作业完成信息的数据库本节点
#JobCompLoc=
JobCompPass=password    #slurm用户数据库密码
JobCompPort=6819        #作业完成信息数据库端口,与上面的端口一致
JobCompType=jobcomp/mysql  #作业完成信息数据存储类型,采用mysql数据库
JobCompUser=slurm        #作业完成信息数据库用户名
JobContainerType=job_container/none
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/linux
PrivateData=jobs,usage
DisableRootJobs=NO

#
################################################
#           SCHEDULING & ALLOCATION            #
################################################
PreemptMode=OFF
PreemptType=preempt/none
PreemptExemptTime=00:00:00
PriorityType=priority/multifactor
SchedulerTimeSlice=300
SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_CPU
SlurmSchedLogLevel=0

################################################
#                   TOPOLOGY                   #
################################################
TopologyPlugin=topology/none

################################################
#                    TIMERS                    #
################################################
BatchStartTimeout=100
CompleteWait=0
EpilogMsgTime=2000
GetEnvTimeout=10
InactiveLimit=0
KillWait=30
MinJobAge=300
SlurmctldTimeout=600
SlurmdTimeout=600
WaitTime=0
MessageTimeout=30
TCPTimeout=10

################################################
#                    POWER                     #
################################################
ResumeRate=300
ResumeTimeout=120
SuspendRate=60
SuspendTime=NONE
SuspendTimeout=60
#
################################################
#                    DEBUG                     #
################################################
DebugFlags=NO_CONF_HASH

################################################
#               PROCESS TRACKING               #
################################################
ProctrackType=proctrack/linuxproc

################################################
#             RESOURCE CONFINEMENT             #
################################################
TaskPlugin=task/affinity
TaskPluginParam=threads


################################################
#                    PRIORITY                  #
################################################
#PrioritySiteFactorPlugin=
PriorityDecayHalfLife=7-00:00:00
PriorityCalcPeriod=00:05:00
PriorityFavorSmall=No
#PriorityFlags=
PriorityMaxAge=7-00:00:00
PriorityUsageResetPeriod=NONE
PriorityWeightAge=0
PriorityWeightAssoc=0
PriorityWeightFairShare=0
PriorityWeightJobSize=0
PriorityWeightPartition=0
PriorityWeightQOS=1000

################################################
#                    OTHER                     #
################################################
AllowSpecResourcesUsage=No
CoreSpecPlugin=core_spec/none
CpuFreqGovernors=Performance,OnDemand,UserSpace
CredType=cred/munge
EioTimeout=120
EnforcePartLimits=NO
MpiDefault=none
FirstJobId=2
JobFileAppend=0
JobRequeue=1
MailProg=/bin/mail
MaxArraySize=1001
MaxDBDMsgs=24248
MaxJobCount=10000
MaxJobId=67043328
MaxMemPerNode=UNLIMITED
MaxStepCount=40000
MaxTasksPerNode=512
MCSPlugin=mcs/none
ReturnToService=2
RoutePlugin=route/default
TmpFS=/tmp
TrackWCKey=no
TreeWidth=50
UsePAM=0
SwitchType=switch/none
UnkillableStepTimeout=60
VSizeFactor=0

################################################
#                    NODES                     #
################################################
NodeName=cn[01-02] CPUs=48 Sockets=2 CoresPerSocket=24 State=UNKNOWN  #节点信息
NodeName=cn[03-05] CPUs=36 Sockets=2 CoresPerSocket=18 State=UNKNOWN  #节点信息

################################################
#                  PARTITIONS                  #
################################################
PartitionName=cn48 Nodes=cn[01-02] Default=YES MaxTime=INFINITE State=UP #分区信息
PartitionName=cn36 Nodes=cn[03-05] MaxTime=INFINITE State=UP    #分区信息

编辑好之后保存,启动slurmd服务并加入开机自启:

systemctl enable slurmd
systemctl start slurmd

此时启动slurmctld服务并加入开机自启:

systemctl enable slurmctld
systemctl start slurmctld

3、计算节点和登录节点配置slurmd服务

        计算节点和登录节点只需要启动slurmd服务即可,相比管理节点,计算节点和登录节点的配置就简单很多了,尤其是slurm从20.02版起支持无配置模式后,登录节点和计算节点都不需要编写/etc/slurm/slurm.conf文件就可以启动slurmd服务。

        配置之前需先安装相关的基础软件包:

yum install -y readline-devel perl-ExtUtils* perl-Switch pam-devel lua-devel hwloc-devel

      在节点上添加slurm用户,slurm用户的uid和gid需与主控节点的一致。

export SLURMUSER=1121
groupadd -g $SLURMUSER slurm 
useradd -m -c "SLURM workload manager" -d /var/lib/slurm -u $SLURMUSER -g slurm -s /bin/bash slurm

安装完之后安装slurm的rpm包,把rpm包放在共享目录下即可。

rpm -ivh slurm*.rpm

       创建日志目录,并添加日志文件:      

mkdir -p /var/log/slurm
cd /var/log/slurm/
touch slurmd.log

        编辑/lib/systemd/system/slurmd.service文件,按照如下所述修改:

#修改前
ExecStart=/usr/sbin/slurmd -D -s $SLURMD_OPTIONS

#修改后
ExecStart=/usr/sbin/slurmd --conf-server cn03:6817 -D -s $SLURMD_OPTIONS

        执行成功后直接启动slurmd服务并加入开机自启即可。  

systemctl daemon-reload
systemctl enable slurmd
systemctl start slurmd

        此时输入sinfo已经可以看到分区信息了,至此slurm安装配置完毕。

         中间出现unk*的是因为这些节点还没有安装slurmd服务,暂时无法获取状态。

4、常见错误处理

4.1 管理节点启动slurmctld服务时报如下错误:

        error: If munged is up, restart with --num-threads=10

        这是因为在slurm.conf文件中AccountingStoragePass选项没有指定到munge认证服务,导致无法与munge通信导致的,按照slurm官方的指示,修改成与slurmdbd.conf文件中的AuthInfo配置选项一样的就可以了。

#修改前
AccountingStoragePass=password

#修改后
AccountingStoragePass=/var/run/munge/munge.socket.2

4.2 管理节点启动slurmctld服务时报如下错误:

        slurmctlderrormysql_real_connect failed1130 Host '***' is not allowed to connect to ****

        这是在slurm.conf文件中的关于JobCom的选项配置错误导致的。修改后如下:   

#修改前
JobCompHost=192.168.1.203
JobCompPort=        #未指定

#修改后
JobCompHost=localhost   
JobCompPort=6819        

        改成localhost之后就可以正常启动slurmctld服务了。

4.3 计算节点执行slurmd --conf-server时报如下错误:

        slurmd: error: Invalid user for SlurmUser slurm, ignored
        slurmd: fatal: Unable to process configuration file

        这是因为管理节点slurm.conf配置文件中的slurmUser用户指定为slurm导致,必须改成root才可以。修改管理节点的slurm.conf配置文件,如下:        

#修改前
SlurmUser=slurm

#修改后
SlurmUser=root        #slurm的主用户

 4.4 计算节点执行slurmd --conf-server时报如下错误:

        (null): _log_init: Unable to open logfile `/var/log/slurm/slurmd.log': No such file or directory

        在指定目录下新建同名文件即可解决。

  • 8
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答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系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值