本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Slurm Workload Manager (slurm)
集群容量大小和更新
集群的容量由集群可以扩展的计算节点数量来定义。计算节点由 Amazon ParallelCluster 配置中的计算资源中定义的 Amazon EC2 实例提供支持(Scheduling/SlurmQueues/ComputeResources),并按照 1:1 映射到Slurm分区的队列(Scheduling/SlurmQueues)进行组织。
在计算资源中,可以配置集群中必须始终保持运行的最小计算节点(实例)数(MinCount),以及计算资源可以扩展到的最大实例数(MaxCount3)。
在创建集群时或更新集群时,为集群中定义的每个计算资源 (Scheduling/SlurmQueues/ ComputeResources) Amazon ParallelCluster 启动中配置MinCount的任意数量的 Amazon EC2 实例。为覆盖集群中计算资源的最小节点数量而启动的实例称为静态节点。静态节点一旦启动,就会在集群中持续存在,除非发生特定事件或情况,否则系统不会终止它们。例如,此类事件包括 Slurm 或 Amazon EC2 运行状况检查失败,以及 Slurm 节点状态变为 DRAIN 或 DOWN。
为应对集群负载增加而按需启动的 Amazon EC2 实例(范围在 1 到 ‘MaxCount -
MinCount’(MaxCount 减去 MinCount))之间)称为“动态节点”。这些节点的性质是短暂的,启动它们是为了处理待处理的作业,一旦它们闲置了一段时间(由集群配置中的 Scheduling/SlurmSettings/ScaledownIdletime 定义)(默认值:10 分钟),就会被终止。
静态节点和动态节点符合以下命名方案:
-
静态节点
<Queue/Name>-st-<ComputeResource/Name>-<num>,其中<num> = 1..ComputeResource/MinCount -
动态节点
<Queue/Name>-dy-<ComputeResource/Name>-<num>,其中<num> = 1..(ComputeResource/MaxCount - ComputeResource/MinCount)
例如,给定以下 Amazon ParallelCluster 配置:
Scheduling: Scheduler: Slurm SlurmQueues: - Name: queue1 ComputeResources: - Name: c5xlarge Instances: - InstanceType: c5.xlarge MinCount: 100 MaxCount: 150
将在 Slurm 中定义以下节点
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
当计算资源拥有时MinCount == MaxCount,所有相应的计算节点都将是静态的,并且所有实例都将在集群 creation/update 时启动并保持正常运行。例如:
Scheduling: Scheduler: slurm SlurmQueues: - Name: queue1 ComputeResources: - Name: c5xlarge Instances: - InstanceType: c5.xlarge MinCount: 100 MaxCount: 100
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
集群容量更新
集群容量的更新包括添加或删除队列、计算资源或更改计算资源的 MinCount/MaxCount。从 Amazon ParallelCluster 版本 3.9.0 开始,缩小队列大小需要在集群更新之前停止计算队列或将其QueueUpdateStrategy设置为 TERMINATION for。在以下情况下,无需停止计算队列或将其设置QueueUpdateStrategy为 “终止”:
-
将新队列添加到 Scheduling/SlurmQueues
-
向队列中添加新的计算资源
Scheduling/SlurmQueues/ComputeResources -
增加计算资源的
MaxCount -
计算资源的增加 MaxCount 和相同计算资源的增加量至少相等 MinCount
注意事项和限制
本节旨在概述在调整集群容量大小时应考虑的任何重要因素、约束或限制。
-
从
Scheduling/SlurmQueues中删除队列时,所有名称为<Queue/Name>-*的计算节点(包括静态和动态节点)都将从 Slurm 配置中删除,相应的 Amazon EC2 实例也将终止。 -
从队列中删除计算资源
Scheduling/SlurmQueues/ComputeResources时,所有名称为<Queue/Name>-*-<ComputeResource/Name>-*的计算节点(包括静态和动态节点)都将从 Slurm 配置中删除,相应的 Amazon EC2 实例也将终止。
在更改计算资源的 MinCount 参数时,我们可以区分两种不同的情况,一种是 MaxCount 与 MinCount 相等(仅静态容量),另一种是 MaxCount 大于 MinCount(静态和动态混合容量)。
只有静态节点的容量变化
-
如果
MinCount == MaxCount,当增加MinCount(和MaxCount)时,通过将静态节点数扩展到MinCount<Queue/Name>-st-<ComputeResource/Name>-<new_MinCount>的新值来配置集群,并且系统将不断尝试启动 Amazon EC2 实例来满足新的静态容量需求。 -
如果
MinCount == MaxCount,当MinCount(和MaxCount)的数量减少 N 时,通过移除最后 N 个静态节点<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<old_MinCount>]来配置集群,系统将终止相应的 Amazon EC2 实例。-
初始状态
MinCount = MaxCount = 100 -
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100] -
更新
MinCount和MaxCount: MinCount = MaxCount = 70上的-30 -
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 70 idle queue1-st-c5xlarge-[1-70]
-
混合节点的容量变化
如果 MinCount < MaxCount,当 MinCount 的数量增加 N 时(假设 MaxCount 保持不变),通过将静态节点数扩展到 MinCount 的新值(old_MinCount + N)来配置集群(<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount +
N>),并且系统将不断尝试启动 Amazon EC2 实例来满足新的静态容量需求。此外,为了满足计算资源的 MaxCount 容量,通过删除最后 N 个动态节点来更新集群配置(<Queue/Name>-dy-<ComputeResource/Name>-[<MaxCount -
old_MinCount - N>...<MaxCount - old_MinCount>]),系统将终止相应的 Amazon EC2 实例。
-
初始状态:
MinCount = 100; MaxCount = 150 -
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100] -
将 +30 更新为
MinCount : MinCount = 130 (MaxCount = 150) -
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 20 idle~ queue1-dy-c5xlarge-[1-20] queue1* up infinite 130 idle queue1-st-c5xlarge-[1-130]
如果 MinCount < MaxCount,当 MinCount 和 MaxCount 的数量都增加 N 时,通过将静态节点数扩展到 MinCount 的新值(old_MinCount + N)来配置集群(<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount +
N>),并且系统将不断尝试启动 Amazon EC2 实例来满足新的静态容量需求。此外,动态节点的数量不会因新的
MaxCount 值。
-
初始状态:
MinCount = 100; MaxCount = 150 -
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100] -
将 +30 更新为
MinCount : MinCount = 130 (MaxCount = 180) -
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 20 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 130 idle queue1-st-c5xlarge-[1-130]
如果 MinCount < MaxCount,当 MinCount 的数量减少 N 时(假设 MaxCount 保持不变),通过移除最后 N 个静态节点 <Queue/Name>-st-<ComputeResource/Name>-[<old_MinCount -
N>...<old_MinCount> 来配置集群,系统将终止相应的 Amazon EC2 实例。此外,为了满足计算资源的 MaxCount 容量,通过扩展动态节点数来更新集群配置(MaxCount - new_MinCount:
<Queue/Name>-dy-<ComputeResource/Name>-[1..<MazCount -
new_MinCount>])。在这种情况下,由于这些是动态节点,因此除非调度器在新节点上有待处理的作业,否则不会启动新的 Amazon EC2 实例。
-
初始状态:
MinCount = 100; MaxCount = 150 -
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100] -
更新
MinCount : MinCount = 70 (MaxCount = 120)上的 -30 -
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 80 idle~ queue1-dy-c5xlarge-[1-80] queue1* up infinite 70 idle queue1-st-c5xlarge-[1-70]
如果 MinCount < MaxCount,当 MinCount 和 MaxCount 的数量都减少 N 时,通过移除最后 N 个静态节点来配置集群(<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount -
N>...<oldMinCount>]),系统将终止相应的 Amazon EC2 实例。
此外,动态节点的数量不会因新的 MaxCount 值而发生变化。
-
初始状态:
MinCount = 100; MaxCount = 150 -
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100] -
更新
MinCount : MinCount = 70 (MaxCount = 120)上的 -30 -
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 80 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 70 idle queue1-st-c5xlarge-[1-70]
如果 MinCount < MaxCount,当 MaxCount 的数量减少 N 时(假设 MinCount 保持不变),通过移除最后 N 个动态节点来配置集群(<Queue/Name>-dy-<ComputeResource/Name>-<old_MaxCount -
N...<oldMaxCount>]),系统将终止正在运行的相应 Amazon EC2 实例。预计不会对静态节点产生影响。
-
初始状态:
MinCount = 100; MaxCount = 150 -
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 50 idle~ queue1-dy-c5xlarge-[1-50] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100] -
更新
MaxCount : MinCount = 100 (MaxCount = 120)上的 -30 -
$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 20 idle~ queue1-dy-c5xlarge-[1-20] queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
对作业的影响
在移除节点和终止 Amazon EC2 实例的所有情况下,在已移除节点上运行的批处理作业将重新排队,除非没有其它节点满足作业要求。在最后一种情况下,任务失败,状态为 NODE_FAIL,并从队列中消失,必须手动重新提交。
如果您计划执行集群大小调整更新,可以防止作业在计划更新期间将被移除的节点上运行。这可以通过将要移除的节点设置为维护状态来实现。请注意,将节点设置为维护状态不会影响最终已在该节点上运行的作业。
假设在计划的集群大小调整更新中,您将移除节点 qeueu-st-computeresource-[9-10]。您可以使用以下命令创建 Slurm 预留
sudo -i scontrol create reservation ReservationName=maint_for_update user=root starttime=now duration=infinite flags=maint,ignore_jobs nodes=qeueu-st-computeresource-[9-10]
这将在节点 qeueu-st-computeresource-[9-10] 上创建一个名为 maint_for_update 的 Slurm 预留。从创建预留开始,qeueu-st-computeresource-[9-10] 节点上就不能再运行任何作业。请注意,预留不会阻止作业最终在 qeueu-st-computeresource-[9-10] 节点上分配。
集群大小调整更新后,如果 Slurm 预留只设置在调整大小更新期间被移除的节点上,维护预留将自动删除。如果您在集群大小调整更新后仍然存在的节点上创建了 Slurm 预留,我们可能希望在执行大小调整更新后删除节点上的维护预留,方法是使用以下命令
sudo -i scontrol delete ReservationName=maint_for_update
有关 Slurm 预留的更多详情,请在此处
容量变更时的集群更新过程
调度器配置更改后,将在集群更新过程中执行以下步骤:
-
停下来 Amazon ParallelCluster
clustermgtd (supervisorctl stop clustermgtd) -
根据 Amazon ParallelCluster 配置生成更新的 Slurm 分区配置
-
重启
slurmctld(通过 Chef 服务配方完成) -
检查
slurmctld状态(systemctl is-active --quiet slurmctld.service) -
重新加载 Slurm 配置
(scontrol reconfigure) -
启动
clustermgtd (supervisorctl start clustermgtd)
有关 Slurm 的信息,请参阅 https://slurm.schedmd.com
支持的集群版本和 SLURM 版本
下表列出了 Amazon 支持的 Amazon ParallelCluster 和Slurm版本。
| Amazon ParallelCluster 版本 | 支持的 Slurm 版本 |
|---|---|
|
3.13.0 |
24.05.07 |
|
3.12.0 |
23.11.10 |
|
3.11.0 |
23.11.10 |
|
3.9.2、3.9.3、3.10.0 |
23.11.7 |
|
3.9.0、3.9.1 |
23.11.4 |
|
3.8.0 |
23.02.7 |
|
3.7.2 |
23.02.6 |
|
3.7.1 |
23.02.5 |
|
3.7.0 |
23.02.4 |
|
3.6.0、3.6.1 |
23.02.2 |
|
3.5.0、3.5.1 |
22.05.8 |
|
3.4.0、3.4.1 |
22.05.7 |
|
3.3.0、3.3.1 |
22.05.5 |
|
3.1.4、3.1.5、3.2.0、3.2.1 |
21.08.8-2 |
|
3.1.2、3.1.3 |
21.08.6 |
|
3.1.1 |
21.08.5 |
|
3.0.0 |
20.11.8 |