HPC
DCV 应用教程
DCV | Nice DCV 安装手册
DCV | RLM 提取 HOSTID
EF Portal and DCV HA Solution
Enginframe 应用教程
Enginframe | 技术参数说明
毅硕HPC教程
毅硕HPC | HPC环境下的LDAP配置
毅硕HPC | Rocky Linux 9 SLURM软件编译安装
毅硕HPC | RHEL 8 上的NVIDIA驱动安装
毅硕HPC | 配置SLURM作业队列优先级
毅硕HPC | Pritunl + ECS + Frp 搭建远程办公VPN
毅硕HPC | 在HPC集群上优雅地使用 Conda
毅硕HPC | 一文详解HPC环境中的MPI并行计算
毅硕HPC | NVIDIA DGX Spark 万字硬核评测:将AI超级工厂带上桌面
毅硕HPC | Lustre文件系统在HPC集群中的部署实战
毅硕HPC | InfiniBand网络在HPC集群中的核心应用
毅硕HPC | OpenPBS构建高效稳定的HPC作业调度环境
毅硕HPC | HPC集群LSF调度系统部署指南
毅硕HPC | 轻量高效的XFCE桌面环境
毅硕HPC | Ubuntu 24 SLURM 编译安装
-
+
首页
毅硕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 munge useradd -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-reload systemctl start rngd systemctl enable rngd ``` ## 3\. 部署Munge服务 * Munge是认证服务,实现本地或者远程主机进程的UID、GID验证。 ``` dnf install epel-release -y dnf 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 -r dd 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.key chmod 400 /etc/munge/munge.key ``` * 所有节点都执行启动命令: ``` systemctl start munge systemctl enable munge ``` ## 4\. 测试Munge服务 每个节点与控制节点进行连接验证 * 本地查看凭据: ``` munge -n ``` * 本地解码: ``` munge -n | unmunge ``` * 验证远程解码: ``` munge -n | ssh compute01 unmunge ``` * munge凭证基准测试: ``` remunge ``` * * * # 四、编译安装Slurm ## 1\. 安装Mariadb 安装mariadb,作为Slurm Accounting配置,在管理节点执行: ``` dnf -y install mariadb-server systemctl start mariadb systemctl 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_PASS create 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 slurm useradd -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 ``` **注意:** 如mariadb-devel在官方镜像源找不到,请点击以下链接进行查找:https://rockylinux.pkgs.org/9/rockylinux-devel-x86\_64/munge-devel-0.5.13-13.el9.x86\_64.rpm.html ## 4\. 编译rpm包 * 下载slurm包 ``` wget https://download.schedmd.com/slurm/slurm-25.05.2.tar.bz2 ``` * 编译slurm,使用rpmbuild制作rpm包 ``` dnf install rpm-build -y rpmbuild -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_64 scp -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.conf cp /etc/slurm/slurm.conf.example /etc/slurm/slurm.conf cp /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/slurmd chown slurm: /var/spool/slurmd mkdir /var/log/slurm chown slurm: /var/log/slurm mkdir /var/spool/slurmctld chown slurm: /var/spool/slurmctld mkdir /var/run/slurm chown slurm: /var/run/slurm ``` * 启动slurm服务 ``` # 管理节点 systemctl start slurmdbd systemctl enable slurmdbd systemctl start slurmctld systemctl enable slurmctld # 所有节点 systemctl start slurmd systemctl enable slurmd ``` * 可能遇到的报错: ``` # 1. 启动slurmdbd时报错(一): slurmdbd: fatal: slurmdbd.conf file /etc/slurm/slurmdbd.conf should be 600 is 644 acc... others # 解决方法 chmod 600 slurmdbd.conf systemctl restart slurmdbd # 2. 启动slurmdbd时报错(二): slurmdbd: fatal: slurmdbd.conf not owned by SlurmUser root!=slurm # 解决方法 chown slurm: /etc/slurm/slurmdbd.conf systemctl restart slurmdbd ``` * * * # 五、配置文件参考 * slurm.conf ``` ClusterName=cluster SlurmctldHost=manage01 ProctrackType=proctrack/cgroup ReturnToService=1 SlurmctldPidFile=/var/run/slurm/slurmctld.pid SlurmctldPort=6817 SlurmdPidFile=/var/run/slurm/slurmd.pid SlurmdPort=6818 SlurmdSpoolDir=/var/spool/slurmd SlurmUser=slurm StateSaveLocation=/var/spool/slurmctld SwitchType=switch/none TaskPlugin=task/affinity InactiveLimit=0 KillWait=30 MinJobAge=300 SlurmctldTimeout=120 SlurmdTimeout=300 Waittime=0 SchedulerType=sched/backfill SelectType=select/cons_tres SelectTypeParameters=CR_Core AccountingStorageEnforce=associations,limits,qos AccountingStorageHost=manage01 AccountingStoragePass=/var/run/munge/munge.socket.2 AccountingStoragePort=6819 AccountingStorageType=accounting_storage/slurmdbd JobCompHost=localhost JobCompLoc=slurm_hpc_db JobCompPass=123456 JobCompPort=3306 JobCompType=jobcomp/mysql JobCompUser=slurm JobAcctGatherFrequency=30 JobAcctGatherType=jobacct_gather/linux SlurmctldDebug=info SlurmctldLogFile=/var/log/slurm/slurmctld.log SlurmdDebug=info SlurmdLogFile=/var/log/slurm/slurmd.log # HPC NODES NodeName=manage01 NodeAddr=192.168.1.100 CPUs=8 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=200 Procs=1 State=UNKNOWN NodeName=login01 NodeAddr=192.168.1.101 CPUs=8 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=200 Procs=1 State=UNKNOWN NodeName=compute01 NodeAddr=192.168.1.102 CPUs=8 CoresPerSocket=1 ThreadsPerCore=1 RealMemory=1024 Procs=1 State=UNKNOWN NodeName=dcv01 NodeAddr=192.168.1.12 CPUs=8 CoresPerSocket=4 ThreadsPerCore=1 RealMemory=4096 Procs=1 State=UNKNOWN # PARTITIONS PartitionName=compute Nodes=compute01 Default=YES MaxTime=INFINITE State=UP PartitionName=dcv Nodes=dcv01 Default=NO MaxTime=INFINITE State=UP PartitionName=debug Nodes=dcv01,compute01,login01,manage01 Default=NO MaxTime=INFINITE State=UP ``` * slurmdbd.conf ``` # Authentication info AuthType=auth/munge AuthInfo=/var/run/munge/munge.socket.2 # slurmDBD info DbdAddr=localhost DbdHost=localhost SlurmUser=slurm DebugLevel=verbose #DefaultQOS=normal,standby LogFile=/var/log/slurm/slurmdbd.log PidFile=/var/run/slurm/slurmdbd.pid #PluginDir=/usr/lib/slurm #PrivateData=accounts,users,usage,jobs # Database info StorageType=accounting_storage/mysql StoragePass=123456 StorageUser=slurm StorageLoc=slurm_hpc_db ``` * cgroup.conf ``` CgroupMountpoint=/sys/fs/cgroup ConstrainCores=yes ConstrainDevices=yes ConstrainRAMSpace=yes ConstrainSwapSpace=yes ``` * * * # 六、总结 Slurm 是现代HPC集群不可或缺的核心中间件。通过本教程,您将学习如何在 Rocky Linux 9 系统上从源码编译并安装配置这一强大的调度系统,为构建您自己的高性能计算环境奠定坚实的基础。
chsnp
2026年1月28日 09:59
转发
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期