Slurm Workload Manager (slurm) - AWS ParallelCluster

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

Slurm Workload Manager (slurm)

集群容量大小和更新

集群的容量由集群可以扩展的计算节点数量来定义。计算节点由 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 节点状态为DRAIN或DOWN。

为应对集群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 开始,缩小队列大小需要在集群更新之前停止计算队列或将其QueueUpdateStrategyTERMINATE设置为。无需停止计算队列或设置QueueUpdateStrategy为TERMINATE何时:

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

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

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

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

注意事项和限制

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

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

仅使用静态节点会发生容量变化

  • 如果在增加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]
    • 更新-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>并且系统将继续尝试启动 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]
  • 更新于 -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>]来配置集群,系统将终止相应的 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 = 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>]并且系统将终止相应的 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 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]

对就业的影响

在移除节点和 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)

有关信息 Slurm,请参阅https://slurm.schedmd.com。有关下载,请参阅 https://github.com/SchedMD/slur m/tags。有关源代码,请参阅 https://github.com/SchedMD/slurm

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