一、 Slurm 的核心作用
Slurm 是一个开源的、高度可扩展的工作负载调度器,专为高性能计算集群设计。它的名字是 Simple Linux Utility for Resource Management 的缩写,但其功能远不止“简单”二字。在现代 HPC 系统中,Slurm 扮演着“集群大脑”或“数字神经中枢”的角色,其主要核心作用包括:
资源分配:管理和分配计算节点、CPU 核心、内存、GPU 等硬件资源给用户提交的计算任务。
任务调度:根据预设的策略(如优先级、队列、资源需求等),决定哪个用户的哪个任务在何时、在哪些节点上运行。
作业管理:提供一套完整的命令,允许用户提交、监控、修改、挂起和终止自己的计算任务。
工作负载均衡:通过高效的调度算法,确保集群资源得到充分利用,避免部分节点过载而其他节点闲置,从而提升整个集群的吞吐量和效率。
二、 Slurm 的使用场景及重要性
Slurm 是学术界和工业界构建 HPC 环境时事实上的标准调度系统。它的典型使用场景包括:
大规模科学计算:在天气预报、流体力学、天体物理等领域,需要运行数百甚至数千个核心并行计算的任务。
人工智能与深度学习:调度需要大量 GPU 资源的模型训练任务,管理多个研究小组对稀缺 GPU 资源的共享使用。
生物信息学:处理基因组测序、分子动力学模拟等需要海量计算的分析流程。
工程仿真与材料科学:进行有限元分析、计算化学等复杂的模拟计算。
其重要性体现在:
从“混乱”到“有序”:没有调度器,用户需要手动登录到特定节点运行任务,极易引发资源冲突和系统不稳定。Slurm 将混乱的“自由竞争”转变为有序的“按需分配”,保证了集群的稳定性和公平性。
提升资源利用率:通过排队和调度,Slurm 可以确保集群 7x24 小时不间断运行,让昂贵的计算硬件投资发挥最大价值。
支持多用户环境:在高校或大型企业研发部门,Slurm 可以设定公平共享策略、资源限额和优先级,确保所有用户和项目组都能公平地获得计算资源。
三、安装 Munge 认证
1. 创建 Munge 用户
Munge 用户要确保管理节点和计算(登录)节点的 UID 和 GID 相同,所有节点都需要安装 Munge:
groupadd -g 1108 mungeuseradd -m -c "Munge Uid 'N' Gid Emporium" -d /var/lib/munge -u 1108 -g munge -s /sbin/nologin munge
复制代码
2. 生成熵池
dnf install -y rng-tools
# rngd -r /dev/urandom
# 修改service参数如下nano /usr/lib/systemd/system/rngd.service
[Service]ExecStart=/sbin/rngd -f -r /dev/urandom
复制代码
systemctl daemon-reloadsystemctl start rngdsystemctl enable rngd
复制代码
3. 部署 Munge 服务
dnf install epel-release -ydnf install munge munge-libs munge-devel -y
复制代码
注意:munge-devel 如果在 rocky9 官方源找不到,请点击以下链接进行查找:https://rockylinux.pkgs.org/9/rockylinux-devel-x86_64/munge-devel-0.5.13-13.el9.x86_64.rpm.html
/usr/sbin/create-munge-key -rdd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key
复制代码
scp -p /etc/munge/munge.key root@login01:/etc/munge/scp -p /etc/munge/munge.key root@compute01:/etc/munge/scp -p /etc/munge/munge.key root@dcv01:/etc/munge/
# 所有节点赋权chown munge: /etc/munge/munge.keychmod 400 /etc/munge/munge.key
复制代码
所有节点都执行启动命令:
systemctl start mungesystemctl enable munge
复制代码
4. 测试 Munge 服务
每个节点与控制节点进行连接验证
munge -n
munge -n | unmunge
munge -n | ssh compute01 unmungemunge
remunge
四、编译安装 Slurm
1. 安装 Mariadb
dnf -y install mariadb-serversystemctl start mariadbsystemctl enable mariadb
ROOT_PASS=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 16) #使用随机密码mysql -e "CREATE USER root IDENTIFIED BY '${ROOT_PASS}'"mysql -uroot -p$ROOT_PASS -e 'create database slurm_hpc_db'
复制代码
mysql -uroot -p$ROOT_PASScreate user slurm;grant all on slurm_hpc_db.* TO 'slurm'@'localhost' identified by '123456' with grant option;flush privileges;
复制代码
2. 创建 Slurm 用户
groupadd -g 1109 slurmuseradd -m -c "Slurm manager" -d /var/lib/slurm -u 1109 -g slurm -s /bin/bash slurm
复制代码
3. 安装 Slurm 依赖
dnf install gcc gcc-c++ readline-devel perl-ExtUtils-MakeMaker pam-devel rpm-build mariadb-devel python3 -y
复制代码
注意:munge-devel 如果在 rocky9 官方源找不到,请点击以下链接进行查找:https://rockylinux.pkgs.org/9/rockylinux-devel-x86_64/munge-devel-0.5.13-13.el9.x86_64.rpm.html
4. 编译 rpm 包
wgethttps://download.schedmd.com/slurm/slurm-25.05.2.tar.bz2
dnf install rpm-build -yrpmbuild -ta --nodeps slurm-25.05.2.tar.bz2
复制代码
mkdir -p /root/rpmbuild/RPMS/scp -r /root/rpmbuild/RPMS/x86_64 root@login01:/root/rpmbuild/RPMS/x86_64scp -r /root/rpmbuild/RPMS/x86_64 root@compute01:/root/rpmbuild/RPMS/x86_64
复制代码
5. 安装配置 Slurm
cd /root/rpmbuild/RPMS/x86_64/ dnf localinstall slurm-*
复制代码
cp /etc/slurm/cgroup.conf.example /etc/slurm/cgroup.confcp /etc/slurm/slurm.conf.example /etc/slurm/slurm.confcp /etc/slurm/slurmdbd.conf.example /etc/slurm/slurmdbd.conf
复制代码
# slurmdbd.conf可不用复制scp -r /etc/slurm/*.conf root@login01:/etc/slurm/scp -r /etc/slurm/*.conf root@compute01:/etc/slurm/
复制代码
mkdir /var/spool/slurmdchown slurm: /var/spool/slurmdmkdir /var/log/slurmchown slurm: /var/log/slurmmkdir /var/spool/slurmctldchown slurm: /var/spool/slurmctldmkdir /var/run/slurmchown slurm: /var/run/slurm
复制代码
# 管理节点systemctl start slurmdbdsystemctl enable slurmdbdsystemctl start slurmctldsystemctl enable slurmctld
# 所有节点systemctl start slurmdsystemctl enable slurmd
复制代码
# 1. 启动slurmdbd时报错(一):slurmdbd: fatal: slurmdbd.conf file /etc/slurm/slurmdbd.conf should be 600 is 644 acc... others# 解决方法chmod 600 slurmdbd.confsystemctl restart slurmdbd
# 2. 启动slurmdbd时报错(二):slurmdbd: fatal: slurmdbd.conf not owned by SlurmUser root!=slurm# 解决方法chown slurm: /etc/slurm/slurmdbd.confsystemctl restart slurmdbd
复制代码
五、配置文件参考
ClusterName=clusterSlurmctldHost=manage01ProctrackType=proctrack/cgroupReturnToService=1SlurmctldPidFile=/var/run/slurm/slurmctld.pidSlurmctldPort=6817SlurmdPidFile=/var/run/slurm/slurmd.pidSlurmdPort=6818SlurmdSpoolDir=/var/spool/slurmdSlurmUser=slurmStateSaveLocation=/var/spool/slurmctldSwitchType=switch/noneTaskPlugin=task/affinityInactiveLimit=0KillWait=30MinJobAge=300SlurmctldTimeout=120SlurmdTimeout=300Waittime=0SchedulerType=sched/backfillSelectType=select/cons_tresSelectTypeParameters=CR_CoreAccountingStorageEnforce=associations,limits,qosAccountingStorageHost=manage01AccountingStoragePass=/var/run/munge/munge.socket.2AccountingStoragePort=6819AccountingStorageType=accounting_storage/slurmdbdJobCompHost=localhostJobCompLoc=slurm_hpc_dbJobCompPass=123456JobCompPort=3306JobCompType=jobcomp/mysqlJobCompUser=slurmJobAcctGatherFrequency=30JobAcctGatherType=jobacct_gather/linuxSlurmctldDebug=infoSlurmctldLogFile=/var/log/slurm/slurmctld.logSlurmdDebug=infoSlurmdLogFile=/var/log/slurm/slurmd.log# HPC NODESNodeName=manage01 NodeAddr=192.168.1.100 CPUs=8 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=200 Procs=1 State=UNKNOWNNodeName=login01 NodeAddr=192.168.1.101 CPUs=8 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=200 Procs=1 State=UNKNOWNNodeName=compute01 NodeAddr=192.168.1.102 CPUs=8 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=1024 Procs=1 State=UNKNOWNNodeName=dcv01 NodeAddr=192.168.1.12 CPUs=8 CoresPerSocket=4 ThreadsPerCore=1 RealMemory=4096 Procs=1 State=UNKNOWN# PARTITIONSPartitionName=compute Nodes=compute01 Default=YES MaxTime=INFINITE State=UPPartitionName=dcv Nodes=dcv01 Default=NO MaxTime=INFINITE State=UPPartitionName=debug Nodes=dcv01,compute01,login01,manage01 Default=NO MaxTime=INFINITE State=UP
复制代码
# Authentication infoAuthType=auth/mungeAuthInfo=/var/run/munge/munge.socket.2# slurmDBD infoDbdAddr=localhostDbdHost=localhostSlurmUser=slurmDebugLevel=verbose#DefaultQOS=normal,standbyLogFile=/var/log/slurm/slurmdbd.logPidFile=/var/run/slurm/slurmdbd.pid#PluginDir=/usr/lib/slurm#PrivateData=accounts,users,usage,jobs# Database infoStorageType=accounting_storage/mysqlStoragePass=123456StorageUser=slurmStorageLoc=slurm_hpc_db
复制代码
CgroupMountpoint=/sys/fs/cgroupConstrainCores=yesConstrainDevices=yesConstrainRAMSpace=yesConstrainSwapSpace=yes
复制代码
六、总结
Slurm 是现代 HPC 集群不可或缺的核心中间件。通过本教程,您将学习如何在 Rocky Linux 9 系统上从源码编译并安装配置这一强大的调度系统,为构建您自己的高性能计算环境奠定坚实的基础。
评论