Amazon ParallelCluster Auto Scaling - Amazon ParallelCluster
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon ParallelCluster Auto Scaling

注意

本节仅适用于 2.11.4 及以下的 Amazon ParallelCluster 版本。从版本 2.11.5 开始,Amazon ParallelCluster 不支持使用 SGE 或 Torque 调度器。您可以在 2.11.4 及之前的版本中继续使用这些调度器,但它们没有资格获得 Amazon 服务和 Amazon 支持团队的未来更新或故障排除支持。

从 Amazon ParallelCluster 版本 2.9.0 开始,不支持将自动扩缩与 Slurm Workload Manager (Slurm) 一起使用。要了解有关 Slurm 和多队列扩展的信息,请参阅多队列模式教程

本主题中介绍的自动扩缩策略适用于使用 Son of Grid Engine (SGE) 或 Torque Resource Manager (Torque) 部署的 HPC 集群。在使用其中一个调度器进行部署时,Amazon ParallelCluster 通过管理计算节点的自动扩缩组,然后根据需要更改调度器配置来实现扩展功能。对于基于 Amazon Batch 的 HPC 集群,Amazon ParallelCluster 依赖于由 Amazon 托管的作业调度器提供的弹性扩展功能。有关更多信息,请参阅 Amazon EC2 Auto Scaling User Guide 中的 What is Amazon EC2 Auto Scaling

使用 Amazon ParallelCluster 部署的集群在多个方面是弹性的。设置 initial_queue_size 可指定 ComputeFleet 自动扩缩组的最小大小值以及所需的容量值。设置 max_queue_size 可指定 ComputeFleet 自动扩缩组的最大大小值。

一个基本自动扩缩组。

纵向扩展

名为 jobwatcher 的进程时刻在头节点上运行。它评估队列中的待处理作业所需的当前实例数。如果繁忙节点和所请求节点的总数大于自动扩缩组中当前需要的值,则会添加更多实例。如果您提交更多作业,则会重新评估队列并更新自动扩缩组(最多为指定的 max_queue_size)。

借助 SGE 计划程序,每个作业需要运行许多槽(一个槽对应于一个处理单元,例如一个 vCPU)。为了评估处理当前的待处理作业所需的实例数,jobwatcher 会将所请求槽的总数除以单个计算节点的容量。与可用 vCPU 的数量对应的计算节点容量依赖于集群配置中指定的 Amazon EC2 实例类型。

借助 Slurm(在 Amazon ParallelCluster 版本 2.9.0 之前)和 Torque 调度器,每个作业可能需要多个节点,每个节点可能需要多个槽,取决于具体情况。对于每个请求,jobwatcher 将确定为满足新的计算要求而需要的计算节点数。例如,假设一个集群的计算实例类型为 c5.2xlarge (8 vCPU),并且有三个已排队的待处理作业,要求如下:

  • 作业 1:2 个节点/每个节点 4 个插槽

  • 作业 2:3 个节点/每个节点 2 个插槽

  • 作业 3:1 个节点/每个节点 4 个插槽

在此示例中,jobwatcher 需要自动扩缩组中的三个新计算实例来处理这三个作业。

当前限制:自动纵向扩展逻辑不考虑部分加载的繁忙节点。例如,正在运行作业的节点即使有空槽,也会被视为忙碌。

缩减

在每个计算节点上,都有一个名为 nodewatcher 的进程运行并评估节点的空闲时间。在满足以下两个条件时,将终止实例:

  • 实例不具有作业的时长已超过 scaledown_idletime(默认设置为 10 分钟)

  • 集群中没有待处理作业

为了终止实例,nodewatcher 将调用 TerminateInstanceInAutoScalingGroup API 操作,这将在自动扩缩组的大小至少为最小自动扩缩组大小时删除实例。此过程将收缩集群,而不会影响正在运行的作业。它还支持弹性集群,具有固定的实例基数。

静态集群

对于 HPC,Auto Scaling 的值与任何其他工作负载的相同。唯一的区别是,Amazon ParallelCluster 的代码使其能够更智能地交互。例如,如果需要静态集群,请将 initial_queue_sizemax_queue_size 参数设置为所需集群的准确大小,然后将 maintain_initial_size 参数设置为 true。这将导致 ComputeFleet 自动扩缩组对于最小、最大和所需容量具有相同的值。