集群容量大小和更新 - AWS ParallelCluster

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

集群容量大小和更新

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

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

在创建集群时或群集更新时,为集群中定义的每个计算资源 (Scheduling/SlurmQueues/ ComputeResources) AWS ParallelCluster 启动中配置MinCount的任意数量的 Amazon EC2 实例。为覆盖集群中计算资源的最小节点数量而启动的实例称为静态节点。静态节点一旦启动,就会在集群中持续存在,除非发生特定事件或情况,否则系统不会终止它们。例如,此类事件包括失败 Slurm 或者 Amazon EC2 健康检查和变更 Slurm 节点状态变为 “耗尽” 或 “关闭”。

为应对集群MaxCount 负载增加而1按需启动的 Amazon EC2 实例被称为动态节点,范围为‘MaxCount - MinCount’(减去 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设置为 TERMINATION for。在以下情况下,无需停止计算队列或将其设置QueueUpdateStrategy为 “终止”:

  • 向计划中添加新队列/ 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 参数时,我们可以区分两种不同的情况,一种是 MaxCountMinCount 相等(仅静态容量),另一种是 MaxCount 大于 MinCount(静态和动态混合容量)。

只有静态节点的容量变化

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

  • 如果在减少MinCount(和MaxCount)数量 N 时MinCount == MaxCount,将通过移除最后 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]
    • 更新 MinCountMaxCount: MinCount = MaxCount = 70 上的 -30

    • $ 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>并且系统将继续尝试启动 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]

如果在增加MinCountMaxCount数量相同 N 时MinCount < MaxCount,将通过将静态节点数扩展到新值 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 个静态节点的静态节点来配置集群,系统将终止相应的 Amazon EC2 实例。<Queue/Name>-st-<ComputeResource/Name>-[<old_MinCount - N>...<old_MinCount>此外,为了满足计算资源的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]

如果在减少MinCountMaxCount数量相同的 N 时MinCount < MaxCount,将通过移除最后 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]

如果在减少MaxCount数量 N(假设保持不变)时MinCount < MaxCountMinCount将通过移除最后 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 实例终止的所有情况下,除非没有其他节点满足任务要求,否则在已移除的节点上运行的 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]

这将创建一个 Slurm 在节点maint_for_update上命名的预留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 官方文档。

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

调度器配置更改后,将在集群更新过程中执行以下步骤:

  • 停下来 AWS ParallelCluster clustermgtd (supervisorctl stop clustermgtd)

  • 生成已更新 Slurm 配置中的分区 AWS ParallelCluster 配置

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

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

  • Reload Slurm 配置 (scontrol reconfigure)

  • 启动 clustermgtd (supervisorctl start clustermgtd)