LabHub
学习 学习路径 课程

HPC 与 Slurm

把 slurm.conf 写准

在 LabHub 中继续学习

一句话总结

slurm.conf所有节点必须保持一致的唯一事实来源。只要有一个节点不同,它就会悄无声息地退出集群。

概念图: 所有节点必须保持一致的唯一事实来源 · 错误出现得很晚,而且出现在意想不到的地方 · 所有节点都必须能通过 DNS 或 hosts 解析它。 · 保存队列与作业状态的位置。

为什么需要理解这些内容

Slurm 配置错误的特点是:错误出现得很晚,而且出现在意想不到的地方。节点进入 INVALDOWN 状态,日志里其实已经用一行说明了原因;但如果没有看到这一行,人们可能会排查好几天。

它是如何工作的

必需配置项

ClusterName=labhub-hpc
SlurmctldHost=ctl01
SlurmUser=slurm
SlurmdUser=root
StateSaveLocation=/var/spool/slurmctld
SlurmdSpoolDir=/var/spool/slurmd
SlurmctldPidFile=/run/slurmctld.pid
SlurmdPidFile=/run/slurmd.pid
AuthType=auth/munge

调度与资源选择

SchedulerType=sched/backfill
SelectType=select/cons_tres
SelectTypeParameters=CR_Core_Memory
ProctrackType=proctrack/cgroup
TaskPlugin=task/cgroup,task/affinity

节点定义

NodeName=gpu-node01 Sockets=2 CoresPerSocket=16 ThreadsPerCore=2 CPUs=64 RealMemory=257000 Gres=gpu:a100:8 State=UNKNOWN

这里有两个最常见的错误

  1. CPUsSockets × CoresPerSocket × ThreadsPerCore 的计算结果不同。 此时 slurmctld 会以 Low socket*core*thread count 为由,将节点置于 INVAL 状态。
  2. RealMemory 设得比实际物理内存更大。 如果配置值高于节点报告的值,节点会因 Low RealMemory 进入 DOWN 状态;反过来,配置得过小又会浪费内存。惯例是扣除操作系统占用的部分后再填写——例如 256 GB 节点可填写约 RealMemory=257000(单位为 MB)。

可以通过 slurmd -C 查看节点的实际值。直接粘贴它的输出是最安全的做法。

分区定义

PartitionName=batch Nodes=gpu-node[01-03] Default=YES MaxTime=24:00:00 State=UP
PartitionName=short Nodes=gpu-node[01-03] MaxTime=01:00:00 Priority=100 State=UP

日志与状态

SlurmctldLogFile=/var/log/slurm/slurmctld.log
SlurmdLogFile=/var/log/slurm/slurmd.log
AccountingStorageType=accounting_storage/none
JobAcctGatherType=jobacct_gather/cgroup
ReturnToService=2

ReturnToService=2 允许处于 DOWN 状态的节点在使用有效配置重新注册后自动恢复。默认值 0 则要求管理员显式执行 RESUME。

修改之后

scontrol reconfigure            # 대부분의 변경은 이것으로 반영
systemctl restart slurmctld     # 일부 핵심 변경은 재기동 필요
scontrol show config | head -40

不要忘记把配置文件部署到所有节点。 只要一个节点的文件不同,它就会悄无声息地退出。因此,大多数集群会把 /etc/slurm 放在共享存储上,或者通过配置管理系统分发。

实际工作中会遇到的情况

没有直接采用 slurmd -C 输出而引发的问题。 手工计算时漏掉 ThreadsPerCore,或错误计算超线程数量,都会使节点进入 INVAL 状态。最可靠的做法是在该节点运行 slurmd -C,然后原样粘贴输出的那一行。

下一个实验要做什么

根据需求从头编写 slurm.conf,设置正确的 munge 密钥权限,并亲手制作一致性验证脚本。评分器会分别在正常配置和损坏配置下运行这个脚本。