

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

# 最佳实践
<a name="best-practices-v3"></a>

以下各节提供了最佳使用实践 AWS ParallelCluster，其中包括网络性能和预算提醒。如果您在遵循这些最佳做法后仍遇到问题，[AWS ParallelCluster 故障排除](troubleshooting-v3.md)请参见以了解可能的解决方案。

## 最佳实践：头节点实例类型选择
<a name="best-practices-head-node-instance-type"></a>

尽管头节点不运行作业，但其功能和大小对集群的整体性能至关重要。在选择用于头节点的实例类型时，请考虑以下特征：

**集群大小：**头节点编排集群的扩展逻辑，并负责将新节点附加到调度器。要纵向扩展和缩减具有大量节点的集群，请为头节点提供一些额外的计算容量。

**共享文件系统：**当您使用共享文件系统时，请选择具有足够网络带宽和足够的 Amazon EBS 带宽的实例类型来处理您的工作流程。确保头节点既能够为集群公开足够的 NFS 服务器目录，又能够处理需要在计算节点和头节点之间共享的构件。

## 最佳实践：网络性能
<a name="best-practices-network-performance-v3"></a>

网络性能对于高性能计算 (HPC) 应用程序至关重要。如果没有可靠的网络性能，这些应用程序就无法正常运行。为了优化网络性能，请考虑以下最佳实践。
+ **置放群组：**如果您使用的是 Slurm，请考虑将每个 Slurm 队列配置为使用集群置放群组。集群*置放群组* 是单个可用区中的实例的逻辑分组。有关更多信息，请参阅 *Amazon EC2 用户指南*中的[置放群组](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/placement-groups.html)。您可以在队列的 [`Networking`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Networking) 部分指定 [`PlacementGroup`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Networking-PlacementGroup)，每个计算资源都将分配给队列的置放群组。在计算资源的 [`Networking`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Networking) 部分指定 [`PlacementGroup`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Networking-PlacementGroup) 时，该特定计算资源将分配给该置放群组。计算资源置放群组规范优先于计算资源的队列规范。有关更多信息，请参阅 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`Networking`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Networking)/[`PlacementGroup`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Networking-PlacementGroup) 和 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`ComputeResources`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources)/[`Networking`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Networking)/[`PlacementGroup`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Networking-PlacementGroup)。

  ```
  Networking:
    PlacementGroup:
      Enabled: true
      Id: your-placement-group-name
  ```

  或者， AWS ParallelCluster 请为您创建一个置放群组。

  ```
  Networking:
    PlacementGroup:
      Enabled: true
  ```

  从 3.3.0 AWS ParallelCluster 版开始，对置放群组的创建和管理进行了修改。在指定要启用的置放群组时，如果没有指定 `name` 或 `Id`，则在队列中，会为每个计算资源分配自己的托管置放群组，而不是为整个队列分配一个托管群组。这有助于减少容量不足错误。如果您需要为整个队列设置一个置放群组，则可以使用命名置放群组。

  添加了 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`Networking`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Networking)/[`PlacementGroup`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Networking-PlacementGroup)/[`Name`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Networking-PlacementGroup-Name) 作为 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues)/[`Networking`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Networking)/[`PlacementGroup`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Networking-PlacementGroup)/[`Id`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Networking-PlacementGroup-Id) 的首选替代方案。

  有关更多信息，请参阅 [`Networking`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-Networking)。
+ **增强联网：**考虑选择支持增强联网的实例类型。此建议适用于所有[当前一代实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#current-gen-instances)。有关更多信息，请参阅[《*Amazon EC2 用户指南》*中的 Linux 增强联网功能](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enhanced-networking.html)。
+ **Elastic Fabric Adapter：**要支持高水平可扩展实例间通信，请考虑为网络选择 EFA 网络接口。EFA 量身定制的操作系统 (OS) 旁路硬件可利用 AWS 云的按需弹性和灵活性增强实例间通信。您可以配置每个 Slurm 队列 [`ComputeResource`](Scheduling-v3.md#Scheduling-v3-SlurmQueues-ComputeResources) 以使用 [`Efa`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-ComputeResources-Efa)。有关将 EFA 与配合使用的更多信息 AWS ParallelCluster，请参阅[Elastic Fabric Adapter](efa-v3.md)。

  ```
  ComputeResources:
    - Name: your-compute-resource-name
      Efa:
        Enabled: true
  ```

  有关 EFA 的更多信息，请参阅 *Amazon Linux 实例 EC2 用户指南*中的[弹性结构适配器](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html)。
+ **实例带宽：**带宽随实例大小而扩展。*有关不同实例类型的信息，请参阅《[亚马逊用户指南》中的 Amazon EBS 优化实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html)和 [Amazon EBS 卷类型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html)。 EC2 *

## 最佳实践：预算提醒
<a name="best-practices-budget-alerts-v3"></a>

要管理中的资源成本 AWS ParallelCluster，我们建议您使用 AWS Budgets 操作来创建预算。您还可以为选定 AWS 资源创建已定义的预算阈值提醒。有关更多信息，请参阅 *AWS Budgets 用户指南* 中的[配置预算操作](https://docs.aws.amazon.com/cost-management/latest/userguide/budgets-controls.html)。同样，您也可以使用 Amazon CloudWatch 创建账单警报。有关更多信息，请参阅[创建账单警报以监控 AWS 预估费用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/monitor_estimated_charges_with_cloudwatch.html)。

## 最佳实践：将集群移至新的 AWS ParallelCluster 次要版本或补丁版本
<a name="best-practices-cluster-upgrades-v3"></a>

当前，每个 AWS ParallelCluster 次要版本及其 `pcluster` CLI都是独立的。要将集群迁移至新的次要版本或修补版本，必须使用新版本的 CLI 重新创建集群。

为了优化将集群迁移到新的次要版本或修补版本的过程，我们建议执行下列操作：
+ 将个人数据保存在集群外部创建的外部卷中，例如 Amazon EFS 和 FSx For Lustre。这样，您以后便可以轻松地将数据从一个集群迁移到另一个集群。
+ 使用以下类型创建共享存储系统。您可以使用 AWS CLI 或创建这些系统 AWS 管理控制台。
  + [`SharedStorage`](SharedStorage-v3.md) / [`EbsSettings`](SharedStorage-v3.md#SharedStorage-v3-EbsSettings) / [`VolumeId`](SharedStorage-v3.md#yaml-SharedStorage-EbsSettings-VolumeId)
  + [`SharedStorage`](SharedStorage-v3.md) / [`EfsSettings`](SharedStorage-v3.md#SharedStorage-v3-EfsSettings) / [`FileSystemId`](SharedStorage-v3.md#yaml-SharedStorage-EfsSettings-FileSystemId)
  + [`SharedStorage`](SharedStorage-v3.md) / [`FsxLustreSettings`](SharedStorage-v3.md#SharedStorage-v3-FsxLustreSettings) / [`FileSystemId`](SharedStorage-v3.md#yaml-SharedStorage-FsxLustreSettings-FileSystemId)

  在集群配置中将某个文件系统或卷定义为现有文件系统或卷。这样，当您删除集群时，这些文件系统或卷会被保留下来，并且可以附加到新集群。

  我们建议您使用 Amazon EFS 或 FSx Lustre 文件系统。这两个系统可以同时附加到多个集群。此外，您可以在删除现有集群之前将其中任何一个系统附加到新集群。
+ 使用[自定义引导操作](custom-bootstrap-actions-v3.md)来自定义您的实例，而不是使用自定义 AMI。如果您改为使用自定义 AMI，则需要对每次新版本发布删除并重新创建该 AMI。
+ 我们建议您按以下顺序应用上述建议：

  1. 更新现有集群配置以使用现有文件系统定义。

  1. 验证 `pcluster` 版本并在需要时进行更新。

  1. 创建并测试新集群。在测试新集群时，请检查以下内容：
     + 确保您的数据在新集群中可用。
     + 确保您的应用程序可以在新集群中正常运行。

  1. 在新集群经过全面测试并可正常运行，并且您不再需要现有集群后，将现有集群删除。