安装 SLURM
参考资料:
- https://slurm.schedmd.com/quickstart_admin.html
SLURM 简介
SLURM(Simple Linux Utility for Resource Management)是一个开源的、高可扩展的集群管理和作业调度系统,广泛应用于高性能计算(HPC)环境。
SLURM 集群由多种类型的节点组成,每种节点承担不同的功能:
| 节点类型 | 功能描述 | 关键服务/组件 |
|---|---|---|
| 控制节点 (Controller Node) |
集群的核心调度器,管理作业队列、资源分配和节点监控。可部署备用控制节点以提升服务可用性。 | slurmctld |
| 计算节点 (Compute Node) |
根据需求配置了充足的 CPU/内存/GPU 资源,执行用户提交的计算任务。 | slurmd |
| 登录节点 (Login Node) |
用户提交和管理作业的入口。 | SLURM 客户端工具 |
| 数据库节点 (DBD Node) |
(可选)存储作业记账(accounting)和资源使用记录。 | slurmdbd |
| REST API 节点 | (可选)提供 RESTful API 接口,支持外部系统集成。 | slurmrestd |
集群环境需要满足以下基础条件:
- 统一的 Linux 用户 UID 和组 GID
- 时间同步服务(如 NTP 网络时间协议)
- 共享的存储空间(如 NFS 网络文件系统)
典型的SLURM集群由以下服务器组成:
- 主节点(master):负责用户登录、作业提交和集群管理
- 计算节点(node1, node2,...):专门用于执行计算任务
集群环境需要满足以下基础条件:
- 统一的Linux账户管理系统(如NIS协议:
ypbind,yp-tools) - 时间同步服务(如NTP网络时间协议)
- 共享存储空间(如NFS网络文件系统)
SLURM 系统包含三个主要程序:
- slurmdbd:运行于主节点,负责集群数据同步,通常依赖MySQL数据库
- slurmctld:运行于主节点,作为集群控制守护进程
- slurmd:运行于各计算节点,负责执行任务并向主节点反馈状态
除了这三个主要组件,我们还需要一个用户权限信息管理的软件 munge。
接下来我们将基于 Ubuntu 24.04 LTS 来说明 SLURM 23.11.4 的配置过程。需要注意的是,不同版本的 SLURM 消息格式可能不一样(特别是跨大版本后),从而导致 slurmctld 和 slurmd 无法通信。如果在未来,新加入的计算节点使用了 Ubuntu 26.04 LTS 甚至更高版本的系统,导致 apt 默认安装到的 slurmd 版本更高,从而与主节点的 slurmctld 无法通信。如果发生这种情况,需要降级 slurmd 版本(如果官方源已不支持 24.11,就需要源码安装),或者升级其他所有节点的 SLURM。
主节点的配置
计算节点的配置
安装 munge
我们在新的计算节点上 apt 安装 munge:
安装完成后,我们需要拷贝主节点的 munge.key 到新的计算节点上。需要注意的是,如果主节点和计算节点的 root 间可以 ssh 直连,很容易造成攻击者的横向攻击。所以,最好不要在节点间建 root 间的 ssh 直连方式。我们直接通过自己的机器 ssh 传输 munge.key:
传输完成后,在计算节点上查看 munge.key 的所有者,确保该文件属于 munge 用户(如果不是,请修改)
可在自己机器上运行如下命令,确保
munge配置成功:若上述命令的输出中包含
STATUS: Success (0),则说明配置成功
slurmd 安装
在新计算节点上运行如下命令:
然后查看本机配置:
例如:
# slurmd -C
NodeName=ada-4090 CPUs=32 Boards=1 SocketsPerBoard=1 CoresPerSocket=16 ThreadsPerCore=2 RealMemory=773273
UpTime=2-04:05:01
# nvidia-smi -L
GPU 0: NVIDIA GeForce RTX 4090 (UUID: GPU-c3b2d0dd-ada3-973f-924f-57cfde894c8f)
GPU 1: NVIDIA GeForce RTX 4090 (UUID: GPU-b59b7220-ca11-153c-c20f-9fa6359775c3)
GPU 2: NVIDIA GeForce RTX 4090 (UUID: GPU-e069ce26-0c5e-9258-d539-ce5dd9b7145a)
GPU 3: NVIDIA GeForce RTX 4090 (UUID: GPU-0e1d0f0a-28dc-3e66-a795-a77b8a10d6e0)
插件安装
enroot 安装与配置
enroot 是一个轻量级的容器运行时,需要使用打包压缩为 SquashFS 格式的 .sqsh 镜像运行容器。如果主服务器上还有 enroot 的安装包,可以直接拷贝到计算节点上使用。如果找不到了,可以重新下载。
下载 enroot 安装包:
打开 enroot 的 github 仓库:https://github.com/NVIDIA/enroot,点击右侧 Releases 下的 3.5.0(在我写这篇文档时是当前最新的版本),找到
enroot_3.5.0-1_amd64.deb和enroot+caps_3.5.0-1_amd64.deb下载(如果服务器访问 Github 缓慢,就在网页端下载以后再上传服务器)。
然后在计算节点上安装 enroot:
为了避免 enroot 默认路径盘较小,以及为了增加隔离性,修改 enroot 的运行时和缓存与数据文件的路径。在 /etc/enroot/enroot.conf.d/ 下添加配置文件(文件名随意):
# cat /etc/enroot/enroot.conf.d/ada.conf
ENROOT_RUNTIME_PATH /mnt/node-name/data/enroot/$(id -u)
ENROOT_CACHE_PATH /mnt/node-name/data/enroot/enroot-cache/group-$(id -g)
ENROOT_DATA_PATH /mnt/node-name/data/enroot/enroot-data/user-$(id -u)
请确保 /mnt/node-name/data/enroot 是在该计算节点的一块足够大的固态上。配置完后,请立即创建该路径,并将权限设为 777,否则,该路径将由第一个尝试使用 enroot 的用户自动创建,从而导致其他人没有修改权限。
pyxis 插件安装
如果主服务器上还有 pyxis 的安装包,可以直接拷贝到计算节点上使用。如果找不到了,需要重新编译安装。有了这个 slurm 插件,slurm 便能通过 enroot 来使用容器。
编译 pyxis 安装包:
首先先从 github 下载源码:
然后按如下命令编译安装:
然后上层目录就会出现一个名为
nvslurm-plugin-pyxis_0.20.0-1_amd64.deb的安装包。保留这个安装包,其余文件(如压缩包、源代码、中间文件)都可以删除。
在计算节点上运行如下命令安装并配置 pyxis:
sudo apt install ./nvslurm-plugin-pyxis_0.20.0-1_amd64.deb
sudo ln -s /usr/share/pyxis/pyxis.conf /etc/slurm/plugstack.conf.d/pyxis.conf
主节点配置文件修改
由于我们在主节点上采用了无配置(Configless)模式,因此只用在主节点放置配置文件。我们登录主节点,编辑 /etc/slurm/slurm.conf 和 /etc/slurm/gres.conf 文件。
在 /etc/slurm/slurm.conf 中,添加新节点的配置:
NodeName=ada-4090 CPUs=32 Boards=1 SocketsPerBoard=1 CoresPerSocket=16 ThreadsPerCore=2 RealMemory=773273 Gres=gpu:4090:4 State=UNKNOWN
PartitionName=4090 Nodes=ada-4090 Default=YES MaxTime=INFINITE State=UP
请注意,如果有 GPU 资源,才会添加 Gres 信息, Gres= 后冒号分割的三个参数分别代表:资源名称、资源类型、资源数量。其中资源类型可以自己写任意字符串,如“rtx4090” 也是可以的(该类型是方便用户申请特定GPU型号使用的)。如果有多种不同的 GPU 设备,使用逗号分割,如 Gres=gpu:3090:1,gpu:3080ti:2 表明有 1 块 3090 和 2 块 3080 Ti。
添加 Gres 信息后,还需要修改 /etc/slurm/gres.conf,添加新节点的 GPU 具体通过哪个设备文件访问:
slurmd 配置
我们运行 systemctl cat slurmd.service,在输出中可以看到这么一行:
因此,我们可以把 slurmd 需要的配置写到 /etc/default/slurmd 文件中。由于我们在主节点上采用了无配置(Configless)模式,因此只用在管理节点放置配置文件,而在计算节点上只需要配置 slurmctld 服务运行在哪就可以了。
为了配置方便和可读性,打开 /etc/hosts 写入主节点 IP 地址,形如:(如已配置请跳过)
然后,编辑 -/etc/default/slurmd,写入:
重启服务
在计算节点上运行如下命令重启 slurmd 服务
在主节点上运行如下命令加载新节点配置:
通过 systemctl status slurmd 查看计算节点上服务是否有报错。在主节点上运行 sinfo 检查新节点是否正确添加。