

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

# Amazon ParallelCluster Auto Scaling
<a name="autoscaling"></a>

**注意**  
本节仅适用于Amazon ParallelCluster 2.11.4 及以下的版本。从版本 2.11.5 开始，Amazon ParallelCluster不支持使用 SGE 或 Torque 调度器。您可以在 2.11.4 及之前的版本中继续使用它们，但它们没有资格获得Amazon服务和支持团队的未来更新或故障排除Amazon支持。  
从 2.9.0 Amazon ParallelCluster版本开始，不支持 Auto Scaling 与 Slurm Workload Manager () Slurm 一起使用。要了解有关 Slurm 和多队列扩展的信息，请参阅[多队列模式教程](tutorial-mqm.md)。

本主题中介绍的自动扩缩策略适用于使用 Son of Grid Engine (SGE) 或 Torque Resource Manager (Torque) 部署的 HPC 集群。在使用其中一个调度器进行部署时，Amazon ParallelCluster通过管理计算节点的自动扩缩组，然后根据需要更改调度器配置来实现扩展功能。对于基于的 HPC 集群Amazon Batch，Amazon ParallelCluster依赖托Amazon管作业调度器提供的弹性扩展功能。有关更多信息，请参阅 [Amazon A EC2 uto Scaling 用户指南中的什么是](https://docs.amazonaws.cn/autoscaling/ec2/userguide/what-is-amazon-ec2-auto-scaling.html) *Amazon A EC2 uto Scaling*。

使用部署的集群在多个方面具有Amazon ParallelCluster弹性。设置[`initial_queue_size`](cluster-definition.md#configuration-initial-queue-size)指定了 ComputeFleet Auto Scaling 组的最小大小值以及所需的容量值。设置[`max_queue_size`](cluster-definition.md#configuration-max-queue-size)指定了 ComputeFleet Auto Scaling 组的最大大小值。

![一个基本自动扩缩组。](http://docs.amazonaws.cn/parallelcluster/v2/ug/images/as-basic-diagram.png)


## 纵向扩展
<a name="scaling-up"></a>

名为 [https://github.com/aws/aws-parallelcluster-node/tree/v2.11.4/src/jobwatcher](https://github.com/aws/aws-parallelcluster-node/tree/v2.11.4/src/jobwatcher) 的进程时刻在头节点上运行。它评估队列中的待处理作业所需的当前实例数。如果繁忙节点和所请求节点的总数大于自动扩缩组中当前需要的值，则会添加更多实例。如果您提交更多作业，则会重新评估队列并更新自动扩缩组（最多为指定的 [`max_queue_size`](cluster-definition.md#configuration-max-queue-size)）。

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

在Slurm（2.9.0 Amazon ParallelCluster版之前）和Torque调度器中，每个作业可能需要为每个节点设置多个节点和多个插槽，具体视情况而定。对于每个请求，`jobwatcher` 将确定为满足新的计算要求而需要的计算节点数。例如，假设一个集群的计算实例类型为 `c5.2xlarge` (8 vCPU)，并且有三个已排队的待处理作业，要求如下：
+ 作业 1：2 个节点/每个节点 4 个插槽
+ 作业 2：3 个节点/每个节点 2 个插槽
+ 作业 3：1 个节点/每个节点 4 个插槽

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

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

## 缩减
<a name="scaling-down"></a>

在每个计算节点上，都有一个名为 [https://github.com/aws/aws-parallelcluster-node/tree/v2.11.4/src/nodewatcher](https://github.com/aws/aws-parallelcluster-node/tree/v2.11.4/src/nodewatcher) 的进程运行并评估节点的空闲时间。在满足以下两个条件时，将终止实例：
+ 实例不具有作业的时长已超过 [`scaledown_idletime`](scaling-section.md#scaledown-idletime)（默认设置为 10 分钟）
+ 集群中没有待处理作业

要终止实例，`nodewatcher`请调用 [TerminateInstanceInAutoScalingGroup](https://docs.amazonaws.cn/autoscaling/ec2/APIReference/API_TerminateInstanceInAutoScalingGroup.html)API 操作，如果 Auto Scaling 组的大小至少为 Auto Scaling 组的最小大小，则该操作会移除实例。此过程将收缩集群，而不会影响正在运行的作业。它还支持弹性集群，具有固定的实例基数。

## 静态集群
<a name="static-cluster"></a>

对于 HPC，Auto Scaling 的值与任何其他工作负载的相同。唯一的区别是，Amazon ParallelCluster的代码使其能够更智能地交互。例如，如果需要静态集群，请将 [`initial_queue_size`](cluster-definition.md#configuration-initial-queue-size) 和 [`max_queue_size`](cluster-definition.md#configuration-max-queue-size) 参数设置为所需集群的准确大小，然后将 [`maintain_initial_size`](cluster-definition.md#maintain-initial-size) 参数设置为 true。这会导致 ComputeFleet Auto Scaling 组的最小容量、最大容量和所需容量值相同。