写点什么

毅硕 HPC | Rocky Linux 9 SLURM 软件编译安装

作者:INSVAST
  • 2025-11-06
    广东
  • 本文字数:4107 字

    阅读完需:约 13 分钟

毅硕HPC | Rocky Linux 9 SLURM软件编译安装

一、 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

  • 使用/dev/urandom 来做熵源

# rngd -r /dev/urandom
# 修改service参数如下nano /usr/lib/systemd/system/rngd.service
[Service]ExecStart=/sbin/rngd -f -r /dev/urandom
复制代码
  • 管理节点启动 rngd

systemctl daemon-reloadsystemctl start rngdsystemctl enable rngd
复制代码

3. 部署 Munge 服务

  • Munge 是认证服务,实现本地或者远程主机进程的 UID、GID 验证。

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

  • 安装 mariadb,作为 Slurm Accounting 配置,在管理节点执行:

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'
复制代码
  • 创建数据库 slurm 用户,并赋予数据库 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 用户

  • 所有节点执行,保证 UID 一致

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 包

  • 下载 slurm 包

wgethttps://download.schedmd.com/slurm/slurm-25.05.2.tar.bz2

  • 编译 slurm,使用 rpmbuild 制作 rpm 包

dnf install rpm-build -yrpmbuild -ta --nodeps slurm-25.05.2.tar.bz2
复制代码
  • 将编译好 slurm 的 rpm 包拷贝到其他节点

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

  • 所有节点安装 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
复制代码
  • 启动 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
复制代码



五、配置文件参考

  • slurm.conf

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
复制代码
  • slurmdbd.conf

# 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
复制代码
  • cgroup.conf

CgroupMountpoint=/sys/fs/cgroupConstrainCores=yesConstrainDevices=yesConstrainRAMSpace=yesConstrainSwapSpace=yes
复制代码



六、总结

Slurm 是现代 HPC 集群不可或缺的核心中间件。通过本教程,您将学习如何在 Rocky Linux 9 系统上从源码编译并安装配置这一强大的调度系统,为构建您自己的高性能计算环境奠定坚实的基础。

用户头像

INSVAST

关注

还未添加个人签名 2023-07-04 加入

还未添加个人简介

评论

发布
暂无评论
毅硕HPC | Rocky Linux 9 SLURM软件编译安装_HPC_INSVAST_InfoQ写作社区