Slurm 本地单机安装与邮件通知
本文记录在 Ubuntu 22.04 单台机器上部署 Slurm(slurm-wlm),并配置任务邮件通知的完整流程,适用于个人工作站或单机测试环境。
环境准备
- 操作系统:Ubuntu 22.04
- 权限:具备
sudo的账户(下文服务以root运行) - 主机名:记下令
hostname命令输出的主机名,下文统一用占位符master表示,请将其全部替换为你的实际主机名
Slurm 要求控制节点(slurmctld)与计算节点(slurmd)的主机名可解析。单机部署时两者为同一台机器,因此
ControlMachine与NodeName需使用同一个主机名。
一、安装 Slurm
sudo apt update
sudo apt install slurm-wlm slurm-wlm-doc -y安装过程中若弹出配置向导(如邮件组件或内核相关提示),一路回车采用默认即可。
验证安装版本:
slurm --version
# 输出版本号,如 slurm-wlm 21.08.x(随 Ubuntu 仓库变化)二、配置 slurm.conf
配置文件位于 /etc/slurm-llnl/slurm.conf(若不存在请新建):
sudo vi /etc/slurm-llnl/slurm.conf参考配置如下(说明已统一改为 # 注释,请按需替换 master 与 CPU 参数):
ClusterName=cool
ControlMachine=[user]
MailProg=/usr/bin/s-nail
SlurmUser=root
SlurmctldPort=6817
SlurmdPort=6818
AuthType=auth/munge
StateSaveLocation=/var/spool/slurmctld
SlurmdSpoolDir=/var/spool/slurmd
SwitchType=switch/none
MpiDefault=none
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmdPidFile=/var/run/slurmd.pid
ProctrackType=proctrack/pgid
ReturnToService=0
# TIMERS
SlurmctldTimeout=300
SlurmdTimeout=300
InactiveLimit=0
MinJobAge=300
KillWait=30
Waittime=0
# SCHEDULING
SchedulerType=sched/backfill
# LOGGING
SlurmctldDebug=info
SlurmctldLogFile=/var/log/slurm-llnl/slurmctld.log
SlurmdDebug=info
SlurmdLogFile=/var/log/slurm-llnl/slurmd.log
JobCompType=jobcomp/none
# COMPUTE NODES
PartitionName=[user] Nodes=[user] Default=NO MaxTime=INFINITE State=UP
NodeName=[user] Sockets=[Sockets] CoresPerSocket=[cpus] ThreadsPerCore=[tpc] State=UNKNOWN关键参数说明
| 参数 | 含义 |
|---|---|
ControlMachine | 控制节点主机名,必须与 hostname 输出一致 |
MailProg | 邮件发送程序路径,须指向后文安装的 s-nail |
PartitionName | 分区名,提交任务时用 -p 指定;Default=NO 时需显式指定 -p master |
NodeName | 计算节点定义;Sockets=物理 CPU 数,CoresPerSocket=每 CPU 核数,ThreadsPerCore=每核线程数(开启超线程为 2,否则为 1) |
State=UNKNOWN | 节点初始状态,slurmd 启动后会自动转为 idle |
获取参数值
用于填写 Sockets / CoresPerSocket:
# Sockets
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l
# CoresPerSocket
cat /proc/cpuinfo| grep "cpu cores"| uniq用于填写 ThreadsPerCore :
#!/bin/bash
cpunum=`cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l`
echo "CPU 个数: $cpunum";
cpuhx=`cat /proc/cpuinfo | grep "cores" | uniq | awk -F":" '{print $2}'`
echo "CPU 核心数:$cpuhx" ;
cpuxc=`cat /proc/cpuinfo | grep "processor" | wc -l`
echo "CPU 线程数:$cpuxc" ;
if [[ `expr $cpunum\*$[cpuhx*2] ` -eq $cpuxc ]];
then
echo "2"
else
echo "1"
fi超线程判断:若逻辑处理器总数(
CPU(s))等于Socket(s) × Core(s) per socket × 2,即已开启超线程,设ThreadsPerCore=2;否则设ThreadsPerCore=1。
三、启动 Slurm
sudo systemctl enable slurmctld --now
sudo systemctl enable slurmd --now查看节点状态:
sinfo
若节点 STATE 不是 idle(例如 drained / down),手动恢复:
sudo scontrol update NodeName=master State=RESUME危险
若节点状态始终异常,参考排查文档:https://github.com/aws/aws-parallelcluster/issues/2467
四、配置邮件通知
Ubuntu 18.04 之后推荐使用 s-nail(而非 mailx / mailutils)作为邮件发送程序,与上文 MailProg 对应。
安装:
sudo apt install s-nail -y编辑 /etc/s-nail.rc,在末尾追加(以 QQ 邮箱为例):
set from="你的邮箱@qq.com"
set smtp="smtps://smtp.qq.com:465"
set smtp-auth-user="你的邮箱@qq.com"
set smtp-auth-password="邮箱授权码"
set smtp-auth=login发送测试邮件,确认可正常投递:
echo "邮件内容" | s-nail -s "邮件主题" 你的邮箱@qq.com确认收到后,重启控制服务使 MailProg 配置生效:
sudo systemctl restart slurmctld五、测试 sbatch 任务
创建测试脚本 test.slurm:
vi test.slurm#!/bin/bash
#SBATCH -J dog
#SBATCH -p master
#SBATCH -N 1
#SBATCH -n 1
#SBATCH --mail-user=你的qq邮箱@qq.com
#SBATCH --mail-type=ALL
sleep 5
whoami提交任务并观察是否收到邮件:
sbatch test.slurm说明:
-p master对应PartitionName=master;因该分区Default=NO,必须显式指定-p。--mail-type=ALL会在任务开始、结束、失败时均发送邮件。