毅硕HPC | Ubuntu 24 SLURM 编译安装

12 阅读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 任务通信时表现出更低的延迟与更强的稳定性。