动态节点

概述

从 Slurm 22.05 开始,可以动态地添加和移除节点。

动态节点通信

对于常规的非动态创建节点,Slurm 通过读取 slurm.conf 知道如何与节点通信。这就是为什么在非动态设置中,确保 slurm.conf 在整个集群中同步是重要的。对于动态创建的节点,控制器会自动获取节点的 NodeAddrNodeHostname 以进行动态 slurmd 注册。然后,控制器将节点地址传递给客户端,以便它们进行通信,甚至可以向其他节点广播。

Slurm 配置

MaxNodeCount=#
设置为系统中可以同时活动的节点数。有关更多详细信息,请参见 slurm.conf 手册
SelectType=select/cons_tres
动态节点仅支持 cons_tres。

分区分配

可以通过使用分区的节点 ALL 关键字或 节点集 并指定节点上的特性,自动将动态节点分配到分区。

例如:

Nodeset=ns1 Feature=f1
Nodeset=ns2 Feature=f2

PartitionName=all  Nodes=ALL Default=yes
PartitionName=dyn1 Nodes=ns1
PartitionName=dyn2 Nodes=ns2
PartitionName=dyn3 Nodes=ns1,ns2

创建节点

可以通过两种方式创建节点:

  1. 动态 slurmd 注册

    使用 slurmd -Z--conf 选项,slurmd 将与控制器注册,并将自动添加到系统中。

    例如:

    slurmd -Z --conf "RealMemory=80000 Gres=gpu:2 Feature=f1"
    

  2. scontrol create NodeName= ...

    使用 scontrol 创建节点,指定与 slurm.conf 中定义的相同的 NodeName 行。有关节点选项,请参见 slurm.conf 手册。仅支持 State=CLOUDState=FUTURE。节点配置应与 slurmd 注册时的配置匹配 (例如 slurmd -C)以及任何附加属性。

例如:
scontrol create NodeName=d[1-100] CPUs=16 Boards=1 SocketsPerBoard=1 CoresPerSocket=8 ThreadsPerCore=2 RealMemory=31848 Gres=gpu:2 Feature=f1 State=cloud

删除节点

可以使用 scontrol delete nodename=<nodelist> 删除节点。 只有没有正在运行的作业且不属于预留的动态节点可以被删除。

动态节点 + 拓扑

可以通过指定节点的 Topology 选项并提供拓扑名称和单元列表,将节点动态添加到在 topology.conftopology.yaml 中定义的拓扑中。 拓扑单元 是块名称或叶子交换机的名称。可以提供中间交换机名称 -- 用 ':' 分隔 -- 并在需要时创建(例如 Topology=topo-tree:sw_root:s1:s2)。

注意:使用 topology.conf 时,拓扑名称为 "default"。

例如:
scontrol create NodeName=d[1-100] ... Topology=topo-switch:s1,topo-block:b1"
slurmd -Z --conf "... Topology=topo-switch:s1,topo-block:b1"
slurmd -Z --conf "... Topology=default:b1"

限制

  1. 动态节点在内部未排序,添加到 Slurm 时,可能会在内部按字母顺序混乱——如果节点名称代表节点的拓扑,可能导致作业分配不理想。

最后修改于 2024 年 12 月 31 日