

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

# 使用竞价型实例
<a name="spot"></a>

AWS ParallelCluster 如果集群配置设置为 [`cluster_type`](cluster-definition.md#cluster-type) = spot，则使用竞价型实例。竞价型实例比按需型实例更具成本效益，但它们可能会中断。中断造成的影响因使用的特定调度器而异。利用*竞价型实例中断通知可能会有所帮助，这些通知*会在 Amazon EC2 必须停止或终止您的竞价型实例之前提供两分钟的警告。有关更多信息，请参阅《Amazon EC2 用户指南》**中的[竞价型实例中断情况](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-interruptions.html)。以下各部分介绍了竞价型实例可能被中断的三种情形。

**注意**  
使用竞价型实例要求您的账户中存在 `AWSServiceRoleForEC2Spot` 服务相关角色。要使用在您的账户中创建此角色 AWS CLI，请运行以下命令：  

```
aws iam create-service-linked-role --aws-service-name spot.amazonaws.com
```
有关更多信息，请参阅《Amazon EC2 用户指南》**中的[竞价型实例请求的服务相关角色](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html#service-linked-roles-spot-instance-requests)。

## 情形 1：没有运行作业的竞价型实例被中断
<a name="no-jobs"></a>

发生这种中断时，如果调度器队列有需要额外实例的待处理任务，或者活动实例的数量少于[`initial_queue_size`](cluster-definition.md#configuration-initial-queue-size)设置，则 AWS ParallelCluster 尝试替换实例。如果 AWS ParallelCluster 无法预置新实例，则会定期重复对新实例的请求。

## 情形 2：运行单节点作业的竞价型实例被中断
<a name="single-node"></a>

此中断的行为取决于正在使用的调度器。

Slurm  
作业失败，状态代码为 `NODE_FAIL`，并且该作业重新排入队列（除非在提交作业时指定了 `--no-requeue`）。如果节点是静态节点，则会将其替换。如果节点是动态节点，则会终止并重置该节点。有关 `sbatch`（包括 `--no-requeue` 参数）的更多信息，请参阅 *Slurm 文档* 中的 [https://slurm.schedmd.com/sbatch.html](https://slurm.schedmd.com/sbatch.html)。  
在 2.9.0 AWS ParallelCluster 版本中，此行为发生了变化。早期版本在终止作业时会显示状态代码 `NODE_FAIL`，并从调度器队列中删除该节点。

SGE  
这仅适用于 AWS ParallelCluster 2.11.4 及以下的版本。从版本 2.11.5 开始， AWS ParallelCluster 不支持使用 SGE 或 Torque 调度器。
作业已经终止。如果作业已启用重新运行标志（使用 `qsub -r yes` 或 `qalter -r yes`）或队列将 `rerun` 配置设置为 `TRUE`，则重新安排作业。计算实例将从调度器队列中删除。此行为来自这些 SGE 配置参数：  
+ `reschedule_unknown 00:00:30`
+ `ENABLE_FORCED_QDEL_IF_UNKNOWN`
+ `ENABLE_RESCHEDULE_KILL=1`

Torque  
这仅适用于 AWS ParallelCluster 2.11.4 及以下的版本。从版本 2.11.5 开始， AWS ParallelCluster 不支持使用 SGE 或 Torque 调度器。
作业将从系统中删除，节点将从调度器中删除。作业不重新运行。如果实例中断时多个作业正在运行，则 Torque 在删除节点时可能会超时。[`sqswatcher`](processes.md#sqswatcher) 日志文件中可能显示错误。这不会影响缩放逻辑，并且后续重试将执行适当的清理。

## 情形 3：运行多节点作业的竞价型实例被中断
<a name="multi-node"></a>

此中断的行为取决于正在使用的调度器。

Slurm  
作业失败，状态代码为 `NODE_FAIL`，并且该作业重新排入队列（除非在提交作业时指定了 `--no-requeue`）。如果节点是静态节点，则会将其替换。如果节点是动态节点，则会终止并重置该节点。运行已终止作业的其他节点可能会被分配给其他待处理作业，或在经过配置的 [`scaledown_idletime`](scaling-section.md#scaledown-idletime) 时间后进行缩减。  
在 2.9.0 AWS ParallelCluster 版本中，此行为发生了变化。早期版本在终止作业时会显示状态代码 `NODE_FAIL`，并从调度器队列中删除该节点。运行已终止作业的其他节点在经过配置的 [`scaledown_idletime`](scaling-section.md#scaledown-idletime) 时间后可能会进行缩减。

SGE  
这仅适用于 AWS ParallelCluster 2.11.4 及以下的版本。从版本 2.11.5 开始， AWS ParallelCluster 不支持使用 SGE 或 Torque 调度器。
作业未终止，并继续在其余节点上运行。计算节点将从调度器队列中移除，但将作为孤立和不可用的节点显示在主机列表中。  
发生这种情况时，用户必须删除作业 (`qdel <jobid>`)。节点仍然显示在主机列表 (`qhost`) 中，不过这不会影响 AWS ParallelCluster。要从列表中删除主机，请在替换实例后运行以下命令。  

```
sudo -- bash -c 'source /etc/profile.d/sge.sh; qconf -dattr hostgroup hostlist <hostname> @allhosts; qconf -de <hostname>'
```

Torque  
这仅适用于 AWS ParallelCluster 2.11.4 及以下的版本。从版本 2.11.5 开始， AWS ParallelCluster 不支持使用 SGE 或 Torque 调度器。
作业将从系统中删除，节点将从调度器中删除。作业不重新运行。如果实例中断时多个作业正在运行，则 Torque 在删除节点时可能会超时。[`sqswatcher`](processes.md#sqswatcher) 日志文件中可能显示错误。这不会影响缩放逻辑，并且后续重试将执行适当的清理。

有关竞价型实例的更多信息，请参阅《Amazon EC2 用户指南》**中的[竞价型实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html)。