在单台 Rocky Linux 工作站上完全可以安装和使用 Slurm,即使没有多节点集群,也能非常方便地在远程登录时提交后台任务(如 sbatch 提交长时间运行的程序)。这种方式常用于:

  • 一台工作站(含多个CPU核、较大内存、GPU等)
  • 多人或自己远程SSH登录使用
  • 希望通过 Slurm 管理任务队列、记录日志、避免程序中断

一、基本思路

你可以把这台工作站当作一个“单节点集群”(即 node=localhost)。 只需安装并配置以下服务:

  • slurmctld(调度器)
  • slurmd(计算节点守护进程)
  • munged(认证服务)

二、安装步骤

  1. 安装必要软件包
1
2
$ sudo dnf install -y epel-release
$ sudo dnf install -y slurm slurm-slurmctld slurm-slurmd munge
  1. 启用并配置 Munge Munge 负责节点间认证,即使只有一台机器也需要。
1
2
3
4
5
sudo /usr/sbin/create-munge-key
sudo chown -R munge:munge /etc/munge /var/lib/munge /var/log/munge
sudo chmod 0700 /etc/munge /var/lib/munge /var/log/munge
sudo systemctl enable --now munge
sudo systemctl status munge
  1. 配置 Slurm

主配置文件位于 /etc/slurm/slurm.conf。 你可以快速生成一个模板:

1
sudo sh -c 'slurmctld -c > /etc/slurm/slurm.conf'

然后编辑:

1
sudo vim /etc/slurm/slurm.conf

示例最简配置(单节点):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# /etc/slurm/slurm.conf
ClusterName=local
ControlMachine=localhost
SlurmUser=slurm
StateSaveLocation=/var/spool/slurmctld
SlurmdSpoolDir=/var/spool/slurmd
AuthType=auth/munge
SlurmctldPort=6817
SlurmdPort=6818
SlurmdPidFile=/var/run/slurmd.pid
SlurmctldPidFile=/var/run/slurmctld.pid
ProctrackType=proctrack/linuxproc
ReturnToService=2
SlurmctldTimeout=300
SlurmdTimeout=300

# 确保多个用户能共享节点
SelectType=select/cons_tres
# 仅分配核,内存多任务共享
SelectTypeParameters=CR_Core

NodeName=localhost CPUs=96 State=UNKNOWN
PartitionName=seis Nodes=localhost Default=YES MaxTime=INFINITE State=UP

根据你的 CPU 数量调整 CPUs=96

  1. 创建运行目录与用户
1
2
3
4
sudo groupadd slurm
sudo useradd -r -m -g slurm slurm
sudo mkdir -p /var/spool/slurmctld /var/spool/slurmd /var/log/slurm
sudo chown -R slurm:slurm /var/spool/slurm* /var/log/slurm
  1. 启动服务
1
2
sudo systemctl enable --now slurmctld slurmd
sudo systemctl status slurmctld slurmd

三、使用示例 提交任务:

1
sbatch myscript.sh

myscript.sh 示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash
#SBATCH -J testjob
#SBATCH -o test.out
#SBATCH -e test.err
#SBATCH -n 1
#SBATCH -c 24
#SBATCH -t 02:00:00

echo "Running job on $(hostname)"
JFILE=run.jl
julia $JFILE

参考资料

  • ChatGPT