毅硕HPC | Ubuntu 24 SLURM 编译安装

1 阅读5分钟

随着 Ubuntu 24.04 LTS 的发布,许多工程师在享受新内核带来的性能红利时,也面临着依赖库更新、GCC 版本变动以及系统级服务管理的兼容性挑战。 

对于追求极致性能和功能定制的工程师来说,包管理器提供的版本往往过于陈旧。本文将带你从零开始,在 Ubuntu 24.04 环境下深度编译 Slurm。我们不只是在敲命令,而是在构建一个稳定、可扩展且符合 2026 年技术标准的科研底座。无论你是初入 HPC 的新手,还是寻找 Ubuntu 环境适配方案的高级工程师,这篇指南都将是你案头必备的“避坑手册”。


一、环境准备

在高性能计算领域,CentOS 的隐退使得 Ubuntu 24.04 LTS 成为了许多超算中心和 AI 算力集群的新宠。

  • 现代内核支持: Ubuntu 24.04 搭载的 Linux 6.8+ 内核对最新的硬件(如英伟达 H/B 系列 GPU、英特尔至强处理器)有更好的原生支持。
  • GCC 13/14 编译器: 默认自带的高版本编译器能够更好地优化 Slurm 源码,提升调度守护进程的执行效率。
  • 全栈 Cgroup v2: Ubuntu 24.04 彻底告别了 Cgroup v1。这意味着在配置 Slurm 的资源限制(内存、CPU 隔离)时,我们必须采用全新的思路。

1.  网络与主机名解析

Slurm 对主机名极其敏感。必须确保所有节点能够通过主机名互访。

  • 编辑 /etc/hosts: 确保所有节点都包含全集群的 IP 映射,避免依赖外部 DNS 导致的抖动。
  • 配置静态 IP (Netplan): Ubuntu 24.04 使用 Netplan。请确保渲染器为 networkd,并关闭 DHCP,防止租约变化导致调度中断。

2.  关键系统服务设置

时钟同步 (Chrony): Slurm 内部通信有严格的时间戳校验。

sudo apt install chrony -y
# 管理节点作为时间源
sudo nano /etc/chrony/chrony.conf
# 添加/修改以下行
# 外部时间源 
pool ntp.aliyun.com iburst 
pool time.apple.com iburst  
# 允许计算节点所在网段访问(假设网段为 192.168.1.0/24) 
allow 192.168.1.0/24  
# 即使失去外部同步,也以本地硬件时钟为准提供时间服务
local stratum 10
# 重启服务
sudo systemctl restart 
chrony chronyc sources -v

# 计算节点同步管理节点
sudo nano /etc/chrony/chrony.conf  
# 删除默认 server/pool 行,只指向管理节点 
server 192.168.1.100 iburst  # 此处填管理节点 IP  
sudo systemctl restart chrony
  • 关闭 Swap (可选但推荐): 为了保证计算性能的确定性,通常在计算节点禁用 swap。
sudo swapoff -a 
sudo sed -i '/swap/d' /etc/fstab
  • 无密码 SSH: 为了后期实施(如使用 Ansible 批量分发配置),建立管理节点到计算节点的 SSH 信任是必经之路。

3.  用户环境和初始化

Slurm 需要统一的用户 ID (UID) 和组 ID (GID) 全集群同步。

  • 创建 Slurm 用户:
# 确保全集群 UID/GID 一致(例如:1100) 
sudo groupadd -g 1100 slurm 
sudo useradd -m -c "Slurm Manager" -d /var/lib/slurm -u 1100 -g slurm -s /bin/bash slurm

二、编译和安装

1.  依赖安装

sudo apt-get install libmunge-dev libmunge2 munge \
libpmix-dev libpmix2t64 libssl-dev libsystemd-dev \
libpam0g-dev libnuma-dev libhwloc-dev hwloc \
libreadline-dev libhdf5-dev libyaml-dev libjson-c-dev \
libcurl4-openssl-dev liblz4-dev libjwt-dev libbpf-dev \   
libsqlite3-dev libgtk2.0-dev liblua5.3-dev lua5.3 python3-dev \
pkg-config libmysqlclient-dev librrd-dev mariadb-server \
libfreeipmi-dev libjwt-dev libhttp-parser-dev \
build-essential gcc g++ make cmake autoconf automake libtool

2.  下载并解压 tar.bz2 包

sudo apt-get install tar bzip2
tar -xvjf slurm-25.05.0.tar.bz2

ec1b7777-1208-4967-8885-13d5e73c1de6

3.  配置并安装

./configure --prefix=/opt/slurm/25.05 --sysconfdir=/etc/slurm \
--with-munge=/usr --with-hwloc=/usr --enable-multiple-slurmd \
--enable-pam --enable-cgroupv2 --enable-slurmrestd --enable-shared \
--with-json=/usr --with-hdf5=/usr/lib/x86_64-linux-gnu/hdf5 --with-lz4=/usr \
--with-systemdsystemunitdir=/etc/systemd/system --with-pmix=/usr/lib/x86_64-linux-gnu/pmix2

没有报错就执行编译安装:

make -j$(nproc) && make install 

4.  配置Munge

  • 管理节点 munge 生成key
sudo -u munge /etc/munge/munge.key
  • 分发到各节点并赋权
scp -p /etc/munge/munge.key root@login01:/etc/munge/
scp -p /etc/munge/munge.key root@compute01:/etc/munge/

chown munge: /etc/munge/munge.key
chmod 400 /etc/munge/munge.key
  • 所有节点启动 munge
systemctl start munge
systemctl enable munge

5.  编辑 conf 文件

  • slurm.conf
ClusterName=cluster
SlurmctldHost=master
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=master
AccountingStoragePass=/var/run/munge/munge.socket.2
AccountingStoragePort=6819
AccountingStorageType=accounting_storage/slurmdbd
JobCompHost=localhost
JobCompLoc=slurm_hpc_db
JobCompPass=admin@1234
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=master NodeAddr=127.0.0.1 CPUs=4 CoresPerSocket=2 ThreadsPerCore=2 RealMemory=500 Procs=1 State=UNKNOWN
NodeName=compute01 NodeAddr=172.16.56.33 CPUs=4 CoresPerSocket=4 ThreadsPerCore=2 RealMemory=20000 Procs=1 State=UNKNOWN

# PARTITIONS
PartitionName=Compute Nodes=compute01 Default=YES MaxTime=INFINITE State=UP
  • cgroup.conf
CgroupMountpoint=/sys/fs/cgroup
ConstrainCores=yes
ConstrainRAMSpace=yes
ConstrainSwapSpace=yes
ConstrainDevices=yes
  • 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=admin@1234
StorageUser=slurm
StorageLoc=slurm_hpc_db

6.  创建目录并设置权限

sudo mkdir -p /var/run/slurm/
sudo mkdir -p /var/spool/slurmd
sudo mkdir -p /var/spool/slurmctld
sudo mkdir -p /var/log/slurm/

sudo chown slurm:slurm /var/run/slurm/ /var/spool/slurmd /var/spool/slurmctld /var/log/slurm/
chmod 400 /etc/slurm/slurmdbd.conf
chown slurm:slurm /etc/slurm/slurmdbd.conf

7.  启动slurm服务

# 管理节点
systemctl start slurmdbd
systemctl enable slurmdbd
systemctl start slurmctld
systemctl enable slurmctld

# 所有节点
systemctl start slurmd
systemctl enable slurmd

三、结语

选择 Ubuntu 24.04 运行 Slurm 并非仅仅是随波逐流,而是站在了算力管理的技术前沿。得益于 Ubuntu 对 Cgroup v2 的原生深层集成,Slurm 现在可以更精准、更高效地实现多租户资源的严格隔离,彻底解决了复杂作业下 CPU 与内存争抢的顽疾。同时,借助 Ubuntu 24.04 搭载的 Linux 6.8+ 内核,调度系统在处理高并发、大规模 MPI 任务通信时表现出更低的延迟与更强的稳定性。