TT Lab
开始
学习 学习路径 课程

HPC 与 Slurm

编写 slurm.conf

在 TT Lab 中继续学习

目标

按照要求从头编写 slurm.conf,并亲手制作一致性检查脚本。

为什么重要

Slurm 的配置错误往往出现得晚,而且出现在意想不到的地方。节点变成 INVAL 或 DOWN,日志里明明用一行写着原因,可是不去看,就会白白摸索好几天。最常见的两种错误是:CPUs 与“插槽数×核心数×线程数”不一致,以及分区引用了没有定义的节点。这两种都是人工手算时出的错,也都可以事先用脚本发现。

本实验不会运行真正的 slurmd。评分对象是你编写的配置和检查脚本。

本实验的要求

步骤

  1. 创建 /etc/slurm 和 /root/slurm 两个目录。
  2. 创建 /etc/slurm/slurm.conf,并写入下列键。 ClusterName=labhub-hpc、SlurmctldHost=ctl01、SlurmUser=slurm、StateSaveLocation=/var/spool/slurmctld、SlurmdSpoolDir=/var/spool/slurmd、AuthType=auth/munge
  3. 添加与调度相关的键。 SchedulerType=sched/backfill、SelectType=select/cons_tres、SelectTypeParameters=CR_Core_Memory、ProctrackType=proctrack/cgroup、TaskPlugin=task/cgroup,task/affinity
  4. 定义 3 个节点。每一行以 NodeName= 开头,并且必须包含 Sockets、CoresPerSocket、ThreadsPerCore、CPUs、RealMemory、State。CPUs 的值必须与“插槽数×核心数×线程数”一致。
  5. 定义 2 个分区。batch 带有 Default=YES 和 MaxTime=24:00:00,short 带有 MaxTime=01:00:00。两个分区在 Nodes= 中写的节点,都必须是第 4 步中定义过的节点。
  6. 添加与日志和记账相关的键。 SlurmctldLogFile=/var/log/slurm/slurmctld.log、SlurmdLogFile=/var/log/slurm/slurmd.log、JobAcctGatherType=jobacct_gather/cgroup、ReturnToService=2
  7. 创建 munge 用户和组,把 /etc/munge/munge.key 生成为 1024 字节的随机数据,然后将权限设为 0400,所有者设为 munge:munge。
  8. 编写 /root/slurm/validate.sh。把 slurm.conf 的路径作为第一个参数,检查下面两条规则,没有违规时以退出码 0 结束,有违规时以非 0 的值结束。
    • 规则 1:在每一行 NodeName= 中,CPUs 必须等于 Sockets × CoresPerSocket × ThreadsPerCore
    • 规则 2:每一行 PartitionName= 的 Nodes= 中出现的节点,都必须已通过 NodeName= 定义(要展开范围写法 gpu-node[01-03] 后再确认) 评分器会分别用你的 /etc/slurm/slurm.conf(必须通过)和 /opt/fixtures/slurm/broken/slurm.conf(必须失败)来运行。

参考

准备配置目录

创建 /etc/slurm 和 /root/slurm 两个目录。

标准路径是 /etc/slurm。工作用的目录也请另外创建。

编写基本键

创建 /etc/slurm/slurm.conf,并写入下列键。 ClusterName=labhub-hpc、SlurmctldHost=ctl01、SlurmUser=slurm、StateSaveLocation=/var/spool/slurmctld、SlurmdSpoolDir=/var/spool/slurmd、AuthType=auth/munge

基本项包括集群名称、控制器主机、运行账号、状态保存路径和认证方式。

调度器与资源选择

添加与调度相关的键。 SchedulerType=sched/backfill、SelectType=select/cons_tres、SelectTypeParameters=CR_Core_Memory、ProctrackType=proctrack/cgroup、TaskPlugin=task/cgroup,task/affinity

GPU 集群需要能按核心为单位拆分资源的选择插件。内存也必须计入消耗的资源。

定义节点

定义 3 个节点。每一行以 NodeName= 开头,并且必须包含 Sockets、CoresPerSocket、ThreadsPerCore、CPUs、RealMemory、State。CPUs 的值必须与“插槽数×核心数×线程数”一致。

CPUs 必须等于插槽数 × 核心数 × 线程数。请把计算核对两遍。

定义分区

定义 2 个分区。batch 带有 Default=YES 和 MaxTime=24:00:00,short 带有 MaxTime=01:00:00。两个分区在 Nodes= 中写的节点,都必须是第 4 步中定义过的节点。

Nodes 中写的节点必须全部已定义。默认分区只能指定一个。

日志与记账

添加与日志和记账相关的键。 SlurmctldLogFile=/var/log/slurm/slurmctld.log、SlurmdLogFile=/var/log/slurm/slurmd.log、JobAcctGatherType=jobacct_gather/cgroup、ReturnToService=2

控制器和节点各自都需要日志路径。也请指定资源采集插件。

准备 munge 密钥

创建 munge 用户和组,把 /etc/munge/munge.key 生成为 1024 字节的随机数据,然后将权限设为 0400,所有者设为 munge:munge。

密钥文件的权限和所有者必须准确,munged 才能启动。大小也有规定的值。

一致性检查脚本

编写 /root/slurm/validate.sh。把 slurm.conf 的路径作为第一个参数,检查下面两条规则,没有违规时以退出码 0 结束,有违规时以非 0 的值结束。

评分器会分别用正常配置和夹具中损坏的配置来运行。请用退出码来区分。