集群容量大小和更新 - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

集群容量大小和更新

集群的容量由集群可以扩展的计算节点数量来定义。计算节点由 Amazon ParallelCluster 配置中的计算资源中定义的 EC2 实例提供支持(Scheduling/SlurmQueues/ComputeResources),并按照 1:1 映射到Slurm分区的队列(Scheduling/SlurmQueues)进行组织。

在计算资源中,可以配置集群中必须始终保持运行的最小计算节点(实例)数(MinCount),以及计算资源可以扩展到的最大实例数(MaxCount3)。

在创建集群时或更新集群时,为集群中定义的每个计算资源 (Scheduling/SlurmQueues/ ComputeResources ) Amazon ParallelCluster 启动中MinCount配置的任意数量的 EC2 实例。为覆盖集群中计算资源的最小节点数量而启动的实例称为静态节点启动后,静态节点将在集群中永久存在,除非发生特定的事件或情况,否则它们不会被系统终止。例如,此类事件包括Slurm或 EC2 运行状况检查失败以及 Slurm 节点状态更改为 DRAIN 或 DOWN。

为应对集群增加的1MaxCount MinCount)载而按需启动的 EC2 实例被称为动态节点‘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,所有相应的计算节点都将是静态的,并且所有实例都将在集群创建/更新时启动并保持正常运行。例如:

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为 “终止”:

  • 向计划中添加新队列/ SlurmQueues

  • 向队列添加新的计算资源 Scheduling/SlurmQueues/ComputeResources

  • 增加计算MaxCount资源的使用量

  • 计算资源的增加 MaxCount 和相同计算资源的增加量至少相等 MinCount

注意事项和限制

本节旨在概述在调整集群容量大小时应考虑的任何重要因素、限制或限制。

在更改计算资源的MinCount参数时,我们可以区分两种不同的方案,如果MaxCount保持等于MinCount(仅限静态容量),如果大MaxCountMinCount(静态容量和动态容量混合)。

仅使用静态节点进行容量更改

  • 如果在增加MinCount(和MaxCount)时MinCount == MaxCount,将通过将静态节点的数量扩展到新的值来配置集群,MinCount<Queue/Name>-st-<ComputeResource/Name>-<new_MinCount>并且系统将继续尝试启动 EC2 实例以满足新的所需静态容量。

  • 如果在减少MinCount(和MaxCount)数量 N 时MinCount == MaxCount,将通过移除最后 N 个静态节点来配置集群,<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<old_MinCount>]并且系统将终止相应的 EC2 实例。

    • 初始状态 MinCount = MaxCount = 100

    • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 100 idle queue1-st-c5xlarge-[1-100]
    • 更新-30MinCountMaxCount: MinCount = MaxCount = 70

    • $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST queue1* up infinite 70 idle queue1-st-c5xlarge-[1-70]

混合节点的容量变化

如果在增加MinCount量 N(假设保持不变)时MinCount < MaxCountMaxCount将通过将静态节点的数量扩展到新的值 MinCount (old_MinCount + N): 来配置集群,<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>并且系统将继续尝试启动 EC2 实例以满足新的静态容量需求。此外,为了满足计算资源的MaxCount容量,通过删除最后 N 个动态节点来更新集群配置:<Queue/Name>-dy-<ComputeResource/Name>-[<MaxCount - old_MinCount - N>...<MaxCount - old_MinCount>]系统将终止相应的 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]

如果在增加MinCountMaxCount数量相同 N 时MinCount < MaxCount,将通过将静态节点数扩展到新值 MinCount (old_MinCount + N): 来配置集群,<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount + N>并且系统将继续尝试启动 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 个静态节点静态节点来配置集群,系统将终止相应的 EC2 实例。<Queue/Name>-st-<ComputeResource/Name>-[<old_MinCount - N>...<old_MinCount>此外,为了满足计算资源的MaxCount容量,通过扩展动态节点的数量来更新集群配置以填补空白。MaxCount - new_MinCount: <Queue/Name>-dy-<ComputeResource/Name>-[1..<MazCount - new_MinCount>]在这种情况下,由于这些是动态节点,因此除非调度器在新节点上有待处理的任务,否则不会启动新的 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 = 70 (MaxCount = 120)

  • $ 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]

如果在减少MinCountMaxCount数量相同的 N 时MinCount < MaxCount,将通过移除最后 N 个静态节点来配置集群<Queue/Name>-st-<ComputeResource/Name>-<old_MinCount - N>...<oldMinCount>],系统将终止相应的 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 = 70 (MaxCount = 120)

  • $ 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]

如果在减少MaxCount数量 N(假设保持不变)时MinCount < MaxCountMinCount将通过删除最后 N 个动态节点来配置集群,<Queue/Name>-dy-<ComputeResource/Name>-<old_MaxCount - N...<oldMaxCount>]并且系统将在相应的 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 MaxCount : MinCount = 100 (MaxCount = 120)

  • $ 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]

对就业的影响

在移除节点和 EC2 实例终止的所有情况下,除非没有其他节点满足任务要求,否则在移除的节点上运行的 sbatch 作业都将重新排队。在最后一种情况下,任务将失败,状态为 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]

这将在节点maint_for_update上创建一个名为的Slurm预留qeueu-st-computeresource-[9-10]。从创建预留的那一刻起,就不能再有任务运行到节点中qeueu-st-computeresource-[9-10]。请注意,预留不会阻止最终在节点上分配任务qeueu-st-computeresource-[9-10]

集群大小更新后,如果仅在Slurm调整大小更新期间移除的节点上设置了预留,则维护预留将自动删除。相反,如果您在集群调整大小更新后仍然存在的节点上创建了预留,那么我们可能需要在执行调整大小更新后使用以下命令删除节点上的维护预留 Slurm

sudo -i scontrol delete ReservationName=maint_for_update

有关Slurm预订的更多详情,请在此处查看 SchedMD 官方文档。

容量变更时的集群更新流程

计划程序配置更改后,将在集群更新过程中执行以下步骤:

  • 停止 Amazon ParallelCluster clustermgtd (supervisorctl stop clustermgtd)

  • 根据配置生成更新的Slurm分区 Amazon ParallelCluster 配置

  • 重启slurmctld(通过 Chef 服务配方完成)

  • 查看slurmctld状态 (systemctl is-active --quiet slurmctld.service)

  • 重新加载Slurm配置 (scontrol reconfigure)

  • 启动 clustermgtd (supervisorctl start clustermgtd)