单节点也可能需要 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 调度,先把 sinfo、srun hostname、sbatch 跑通。GPU 调度不要急着上,先确认 NVIDIA 驱动稳定,再加 GresTypes=gpu 和 gres.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
验收不是只看服务启动,而是普通用户能提交、队列能显示、输出文件能产生、资源申请和实际分配能对应。
常见错误
NodeName和hostname -s不一致。RealMemory填得过高,节点被判定不可用。- Munge key 权限不正确。
- 修改配置后只重启了
slurmctld,没有处理slurmd。 - 单节点服务器没有做用户资源约束,最后 Slurm 只成了“提交命令外壳”。