本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Slurm Workload Manager (slurm
)
集群容量大小和更新
集群的容量由集群可以扩展的计算节点数量来定义。计算节点由 AWS ParallelCluster 配置 (Scheduling/SlurmQueues/ComputeResources)
中计算资源内定义的 Amazon EC2 实例支持,并组织成队列 (Scheduling/SlurmQueues)
,1:1 映射到 Slurm 分区。
在计算资源中,可以配置集群中必须始终保持运行的计算节点(实例)的最小数量(MinCount
),以及计算资源可扩展到的实例最大数量(MaxCount
3 )。
在创建集群时或更新集群时,AWS ParallelCluster 会为集群中定义的每个计算资源(Scheduling/SlurmQueues/ ComputeResources
)启动 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)
例如,给定以下 AWS 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
时,所有相应的计算节点都将是静态的,所有实例都将在集群创建/更新时启动并保持运行。例如:
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
。从 AWS ParallelCluster 版本 3.9.0 开始,要减小队列的大小,需要在集群更新前停止计算实例集或将 QueueUpdateStrategy 设置为 TERMINATE。在以下情况下,无需停止计算实例集或将 QueueUpdateStrategy 设置为 TERMINATE:
-
将新队列添加到 Scheduling/
SlurmQueues
-
向队列中添加新的计算资源
Scheduling/SlurmQueues/ComputeResources
-
增加计算资源的
MaxCount
-
增加计算资源的 MinCount,并增加同一计算资源的 MaxCount,增加的数量至少相同
注意事项和限制
本节旨在概述在调整集群容量大小时应考虑的任何重要因素、约束或限制。
-
从
Scheduling/https://docs.aws.amazon.com/parallelcluster/latest/ug/Scheduling-v3.html#Scheduling-v3-SlurmQueuesSlurmQueues
中删除队列时,所有名称为<Queue/Name>-*
的计算节点(包括静态和动态节点)都将从 Slurm 配置中删除,相应的 Amazon EC2 实例也将终止。 -
从队列中删除计算资源
Scheduling/SlurmQueues/https://docs.aws.amazon.com/parallelcluster/latest/ug/Scheduling-v3.html#Scheduling-v3-SlurmQueues-ComputeResourcesComputeResources
时,所有名称为<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 预留的更多详情,请在此处
容量变更时的集群更新过程
调度器配置更改后,将在集群更新过程中执行以下步骤:
-
停止 AWS ParallelCluster
clustermgtd (supervisorctl stop clustermgtd)
-
根据 AWS ParallelCluster 配置生成更新的 Slurm 分区配置
-
重启
slurmctld
(通过 Chef 服务配方完成) -
检查
slurmctld
状态(systemctl is-active --quiet slurmctld.service)
-
重新加载 Slurm 配置
(scontrol reconfigure)
-
启动
clustermgtd (supervisorctl start clustermgtd)
有关 Slurm 的信息,请参阅 https://slurm.schedmd.com
AWS ParallelCluster 版本 | 支持的 Slurm 版本 |
---|---|
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 |