动态节点
概述
从 Slurm 22.05 开始,可以动态地添加和移除节点。
动态节点通信
对于常规的非动态创建节点,Slurm 通过读取 slurm.conf 知道如何与节点通信。这就是为什么在非动态设置中,确保 slurm.conf 在整个集群中同步是重要的。对于动态创建的节点,控制器会自动获取节点的 NodeAddr 和 NodeHostname 以进行动态 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
创建节点
可以通过两种方式创建节点:
-
- scontrol create NodeName= ...
-
使用 scontrol 创建节点,指定与 slurm.conf 中定义的相同的 NodeName 行。有关节点选项,请参见 slurm.conf 手册。仅支持 State=CLOUD 和 State=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.conf 或 topology.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"
限制
- 动态节点在内部未排序,添加到 Slurm 时,可能会在内部按字母顺序混乱——如果节点名称代表节点的拓扑,可能导致作业分配不理想。
最后修改于 2024 年 12 月 31 日