单节点也可能需要 Slurm

一台服务器被多人共享时,直接 SSH 登录后手工运行程序很快会失控:有人占满 CPU,有人把显存用完,有人长期后台跑任务但没人知道。单节点 Slurm 的价值不是“像超算中心一样复杂”,而是把资源申请、排队、日志和可追踪性做起来。

配置前要先确定资源模型,而不是先写 slurm.conf

先记录节点事实

hostname -s
lscpu
free -h
lsblk
nvidia-smi -L
ip addr show

重点确认四件事:

  • NodeName 使用短主机名还是完整域名。
  • Slurm 中登记的 CPUs 是否和实际可调度线程数一致。
  • RealMemory 不要填满物理内存,通常要给系统和缓存留余量。
  • GPU 是否要通过 GRES 管理,如果要,必须同时维护 gres.conf

Munge 必须先正常

Slurm 依赖 Munge 做认证。很多“节点 down/drain/无法提交”的问题,本质是 Munge key、权限或时间同步问题。

常用检查:

systemctl status munge
munge -n | unmunge
ls -l /etc/munge/munge.key
timedatectl

/etc/munge/munge.key 权限过宽、属主错误、节点之间 key 不一致,都会导致 Slurm 组件之间认证失败。

最小 slurm.conf 思路

单节点配置可以先从一个分区开始,先让普通用户能提交短作业,再逐步加入 GPU、QOS、Accounting 等功能。

需要先确认这些字段:

ClusterName
SlurmctldHost
NodeName
PartitionName
SelectType
SelectTypeParameters

如果只做 CPU 调度,先把 sinfosrun hostnamesbatch 跑通。GPU 调度不要急着上,先确认 NVIDIA 驱动稳定,再加 GresTypes=gpugres.conf

验收命令

systemctl status slurmctld
systemctl status slurmd
scontrol ping
sinfo -Nel
scontrol show node
srun -N1 -n1 hostname

提交一个最小作业:

cat > test.sbatch <<'EOF'
#!/bin/bash
#SBATCH -J slurm-check
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 00:02:00

hostname
date
EOF

sbatch test.sbatch
squeue

验收不是只看服务启动,而是普通用户能提交、队列能显示、输出文件能产生、资源申请和实际分配能对应。

常见错误

  • NodeNamehostname -s 不一致。
  • RealMemory 填得过高,节点被判定不可用。
  • Munge key 权限不正确。
  • 修改配置后只重启了 slurmctld,没有处理 slurmd
  • 单节点服务器没有做用户资源约束,最后 Slurm 只成了“提交命令外壳”。