irpas技术客

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

网络 6011

????????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 lua-devel hwloc-devel

? ? ? ? 下载slurm安装包,当前下载的版本是slurm-21.08.8-2.tar.bz2。下载地址见下方? ?Downloads | SchedMDhttps://·/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的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服务时报如下错误:

????????slurmctld:?error:?mysql_real_connect failed:?1130 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

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


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #slurm集群搭建 #slurm #simple #Linux #Utility #for #resource