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

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

一、 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 系统上从源码编译并安装配置这一强大的调度系统,为构建您自己的高性能计算环境奠定坚实的基础。

目录
相关文章
|
14天前
|
存储 数据可视化 项目管理
Arya - 功能强大的在线 Markdown 编辑器
Arya(二丫)是一款基于Vue2与Vditor的开源在线Markdown编辑器,集流程图、甘特图、Echarts、PPT预览、五线谱等丰富功能于一体,支持多种编辑模式与一键导出PDF/图片,完美适配公众号等内容平台,3.3k+ GitHub stars,部署简单,体验优雅。
256 13
Arya - 功能强大的在线 Markdown 编辑器
|
12天前
|
架构师 关系型数据库 MySQL
【Java架构师体系课 | MySQL篇】③ Explain执行计划详解
Explain用于分析SQL执行计划,通过模拟优化器行为揭示查询性能瓶颈。它展示索引使用、扫描行数等信息,帮助优化查询语句,提升数据库效率。
106 5
【Java架构师体系课 | MySQL篇】③ Explain执行计划详解
|
5天前
|
消息中间件 Java 调度
深入探讨进程、线程和协程之间的区别和联系
本文深入解析进程、线程与协程的核心区别与联系,涵盖资源分配、调度机制、通信方式及性能对比。结合代码示例与实际场景,阐明三者在高并发系统中的协同应用,助你掌握现代并发编程设计精髓。(239字)
60 11
|
11天前
|
开发工具 图形学 Android开发
《Unity游戏多平台上架零驳回:应用商店适配核心技巧与避坑指南》
本文聚焦Unity游戏多平台上架的核心适配技巧与避坑要点,深入拆解主流应用商店的审核逻辑与技术要求。文章从平台规则差异、Unity技术适配、合规性把控、包体构建细节、审核驳回应对等维度,结合实战经验剖析上架关键环节:强调需穿透商店规则表象,适配不同平台的生态定位与硬件特性,解决引擎与设备的兼容性问题;重点关注隐私政策、支付合规、内容安全等合规红线,同时把控包体格式、签名、渠道标识等流程细节。针对审核驳回,提供精准排查、根源整改与专业申诉的实操思路,助力开发者避开隐形陷阱,实现多平台零驳回顺畅上架,为Unity游戏上架提供兼具深度与实用性的技术指引。
119 10
|
10天前
|
人工智能 运维 Serverless
ModelScope 模型一键上线?FunModel 帮你 5 分钟从零到生产
FunModel 依托 Serverless + GPU,天然提供了简单,轻量,0 门槛的模型集成方案,给个人开发者良好的玩转模型的体验,也让企业级开发者快速高效的部署、运维和迭代模型。在阿里云 FunModel 平台,开发者可以做到:模型的快速部署上线:从原来的以周为单位的模型接入周期降低到 5 分钟,0 开发,无排期;一键扩缩容,让运维不再是负担:多种扩缩容策略高度适配业务流量,实现“无痛运维”。
|
23天前
|
IDE 编译器 开发工具
嵌入式开发必备!Keil uVision5 C51 V9.61 安装激活 + 汉化完整教程, 含(Keil MDK 5.39)
Keil C51 V9.61是一款专用于8051系列单片机的集成开发环境,支持主流厂商芯片,集编辑、编译、仿真于一体,基于μVision5平台,操作便捷。提供C编译器、汇编器、调试器等全套工具,适用于嵌入式开发。附带安装与激活教程,可实现汉化界面,提升使用体验。(237字)
637 7
|
2天前
|
人工智能 Unix Shell
构建AI智能体:三十三、LangChain LCEL深度解析:基于Runnable协议的声明式编程新范式
本文介绍了LangChain表达式语言(LCEL)的核心概念及其优势。LCEL通过Runnable协议和管道操作符(|)提供了一种声明式、模块化的方式来构建AI应用工作流。相比传统SequentialChain,LCEL具有更简洁的语法、更强的组合性和统一调用接口,支持流式传输、批量处理等高级功能。文章通过对比示例展示了LCEL如何简化Prompt模板、LLM模型和输出解析器的组合过程,并演示了复杂链的构建方法。LCEL使开发者能够像搭积木一样灵活组合各种组件,同时自动获得生产级应用所需的功能特性
68 13
|
7天前
|
监控 Java 开发者
Spring Boot 核心原理解析与实践(含代码示例)
Spring Boot基于“约定优于配置”理念,通过自动配置、Starter依赖和内嵌服务器,简化Spring应用的搭建与开发。支持快速集成Web、数据访问、安全等模块,并提供Actuator监控、分布式事务等生产级特性,助力高效构建微服务系统。(238字)
272 17
|
3天前
|
机器学习/深度学习 数据采集 前端开发
Python 开发技术栈梳理:从数据库、爬虫到 Django 与机器学习
很多Python开发者学习碎片化,缺乏系统性。本文整理了一套从基础语法到全栈开发的完整学习资源,涵盖Python核心、数据库、前端、爬虫、Django框架、机器学习与算法,助你构建完整技术体系,适合进阶提升。
|
7天前
|
存储 弹性计算 数据挖掘
阿里云38元轻量应用服务器、99元经济型、199元企业级云服务器区别及选择指南
2025年阿里云有几款价格非常便宜的特价云服务器,其中轻量应用服务器最便宜的为38元1年和298元1年,云服务器最便宜的为99元1年和199元1年。本文将对阿里云目前推出的这三款最低价的云服务器进行详细测评,包括38元、99元、199元云服务器,分析其性能、适用场景以及购买限制等规则,帮助用户做出更合适自己的选择。
236 12