

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

# 开始使用并 AWS 行计算服务
<a name="getting-started"></a>

这是一个创建简单集群的教程，你可以用它来试用 AWS PCS。下图显示了集群的设计。

![\[教程集群的架构图：这两个计算节点组是您的 AWS 账户 资源，它们连接到在服务拥有的服务器中运行的 Slurm 集群控制器。 AWS 账户两个计算节点组中的 EC2 实例都连接到 Amazon EFS 和 Amazon for Lustre 中的共享存储。 FSx\]](http://docs.aws.amazon.com/zh_cn/pcs/latest/userguide/images/aws-pcs-tutorial-environment-diagram.png)


集群设计教程包含以下关键组件：
+ 满足 PCS 联网[要求的 V AWS PC 和子网](working-with_networking_vpc-requirements.md)。
+ Amazon EFS 文件系统，将用作共享的主目录。
+ Amazon FSx for Lustre 文件系统，它提供共享的高性能目录。
+ 一个 AWS PCS 集群，它提供 Slurm 控制器。
+ 2 AWS 个 PCS 计算节点组。
  + `login`节点组，它提供对系统的基于 shell 的交互式访问。
  + `compute-1`节点组提供弹性伸缩实例来运行作业。
+ 1 个向`compute-1`节点组中的 EC2 实例发送任务的队列。

集群需要其他 AWS 资源，例如安全组、IAM 角色和 EC2 启动模板，这些资源未显示在图表中。

**注意**  
 我们建议您在 Bash shell 中完成本主题中的命令行步骤。如果您没有使用 Bash shell，则某些脚本命令（例如行延续字符以及变量的设置和使用方式）需要调整 shell。此外，您的 Shell 的引用和转义规则可能有所不同。有关更多信息，请参阅《*版本 2 AWS Command Line Interface 用户指南》 AWS CLI中的 “引号和带字符串的*[文字](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html)”。

**Topics**
+ [开始使用 AWS PCS 的先决条件](getting-started_prerequisites.md)
+ [在 AWS PCS 教程中使用 AWS CloudFormation](getting-started_cfn-note.md)
+ [为 PCS 创建 VPC 和子网 AWS](getting-started_create-vpc.md)
+ [为 AWS PCS 创建安全组](getting-started_create-sg.md)
+ [在 AWS PCS 中创建集群](getting-started_create-cluster.md)
+ [在亚马逊 Elastic File System 中为 AWS PCS 创建共享存储](getting-started_create-efs.md)
+ [在 Amazon for Lustre 中 FSx 为 AWS PCS 创建共享存储](getting-started_create-fsx.md)
+ [在 AWS PCS 中创建计算节点组](getting-started_create-cng.md)
+ [创建队列来管理 AWS PCS 中的作业](getting-started_create-queue.md)
+ [Connect 连接到你的 AWS PCS 集群](getting-started_connect.md)
+ [探索 AWS PCS 中的集群环境](getting-started_explore.md)
+ [在 AWS PCS 中运行单节点作业](getting-started_run-job.md)
+ [在 PCS 中使用 Slurm 运行多节点 MPI 作业 AWS](getting-started_run-mpi-job.md)
+ [删除你的 AWS PCS AWS 资源](getting-started_delete.md)

# 开始使用 AWS PCS 的先决条件
<a name="getting-started_prerequisites"></a>

请参阅以下主题，为你 AWS 账户 和本地的 AWS PCS 开发环境做好准备。

**Topics**
+ [注册 AWS 并创建管理员用户](setting-up.md)
+ [安装 AWS CLI 适用于 AWS PCS 的](setting-up_cli.md)
+ [AWS PCS 所需的 IAM 权限](required-iam-permissions.md)

# 注册 AWS 并创建管理员用户
<a name="setting-up"></a>

完成以下任务以设置 AWS 并行计算服务 (AWS PCS)。

**Topics**
+ [注册获取 AWS 账户](#sign-up-for-aws)
+ [创建具有管理访问权限的用户](#create-an-admin)

## 注册获取 AWS 账户
<a name="sign-up-for-aws"></a>

如果您没有 AWS 账户，请完成以下步骤来创建一个。

**报名参加 AWS 账户**

1. 打开[https://portal.aws.amazon.com/billing/注册。](https://portal.aws.amazon.com/billing/signup)

1. 按照屏幕上的说明操作。

   在注册时，将接到电话或收到短信，要求使用电话键盘输入一个验证码。

   当您注册时 AWS 账户，就会创建*AWS 账户根用户*一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践，请为用户分配管理访问权限，并且只使用根用户来执行[需要根用户访问权限的任务](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks)。

AWS 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 [https://aws.amazon.com/](https://aws.amazon.com/)并选择 “**我的账户”，查看您当前的账户活动并管理您的账户**。

## 创建具有管理访问权限的用户
<a name="create-an-admin"></a>

注册后，请保护您的安全 AWS 账户 AWS 账户根用户 AWS IAM Identity Center，启用并创建管理用户，这样您就不会使用 root 用户执行日常任务。

**保护你的 AWS 账户根用户**

1.  选择 **Root 用户**并输入您的 AWS 账户 电子邮件地址，以账户所有者的身份登录。[AWS 管理控制台](https://console.aws.amazon.com/)在下一页上，输入您的密码。

   要获取使用根用户登录方面的帮助，请参阅《AWS 登录 用户指南》**中的 [Signing in as the root user](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 为您的根用户启用多重身份验证（MFA）。

   有关说明，请参阅 I [A *M* 用户指南中的为 AWS 账户 根用户启用虚拟 MFA 设备（控制台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**创建具有管理访问权限的用户**

1. 启用 IAM Identity Center。

   有关说明，请参阅**《AWS IAM Identity Center 用户指南》中的 [Enabling AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html)。

1. 在 IAM Identity Center 中，为用户授予管理访问权限。

   有关使用 IAM Identity Center 目录 作为身份源的教程，请参阅《[用户*指南》 IAM Identity Center 目录中的使用默认设置配置AWS IAM Identity Center 用户*访问权限](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理访问权限的用户身份登录**
+ 要使用您的 IAM Identity Center 用户身份登录，请使用您在创建 IAM Identity Center 用户时发送到您的电子邮件地址的登录网址。

  有关使用 IAM Identity Center 用户[登录的帮助，请参阅*AWS 登录 用户指南*中的登录 AWS 访问门户](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html)。

**将访问权限分配给其他用户**

1. 在 IAM Identity Center 中，创建一个权限集，该权限集遵循应用最低权限的最佳做法。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Create a permission set](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 将用户分配到一个组，然后为该组分配单点登录访问权限。

   有关说明，请参阅《AWS IAM Identity Center 用户指南》**中的 [Add groups](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

# 安装 AWS CLI 适用于 AWS PCS 的
<a name="setting-up_cli"></a>

您必须使用最新版本的 AWS CLI。有关信息，请参阅[《版本 2 AWS Command Line Interface 用户指南》 AWS CLI中的 “安装或更新至最新](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)*版本*”。

您必须配置 AWS CLI。有关更多信息，请参阅*版本 2 AWS Command Line Interface 用户指南 AWS CLI*中的[配置](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html)。

在命令提示符下输入以下命令进行检查 AWS CLI；它应该会显示帮助信息。

```
aws pcs help
```

# AWS PCS 所需的 IAM 权限
<a name="required-iam-permissions"></a>

您正在使用的 IAM 安全委托人必须有权使用 AWS PCS IAM 角色、服务关联角色 AWS CloudFormation、VPC 和相关资源。有关更多信息[并 AWS 行计算服务的 Identity and Access 管理](security-iam.md)，请参阅*AWS Identity and Access Management 用户指南*中的和[创建服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create-service-linked-role.html)。您必须以同一用户身份完成本指南中的所有步骤。要查看当前用户，请运行以下命令：

```
aws sts get-caller-identity
```

# 在 AWS PCS 教程中使用 AWS CloudFormation
<a name="getting-started_cfn-note"></a>

 AWS PCS 教程包含许多步骤，旨在帮助您了解 AWS PCS 集群的各个部分以及创建集群所需的步骤。我们建议您至少 1 次完成教程步骤。在您对所涉及的内容有了很好的了解之后 AWS CloudFormation ，您可以使用自动快速创建示例集群。

CloudFormation 是一项 AWS 服务，使您能够以可预测的方式重复创建和配置 AWS 基础架构部署。您可以使用 CloudFormation 模板将示例集群的 AWS 资源自动配置为单个单元，称为**堆栈**。使用完堆栈后，您可以将其删除。

有关更多信息，请参阅 [开始使用 CloudFormation 和 AWS PCS](get-started-cfn.md)。

# 为 PCS 创建 VPC 和子网 AWS
<a name="getting-started_create-vpc"></a>

 您可以使用 CloudFormation 模板创建 VPC 和子网。使用以下 URL 下载 CloudFormation 模板，然后在[CloudFormation 控制台](https://console.aws.amazon.com/cloudformation/home#/stacks/create)中上传模板以创建新 CloudFormation堆栈。有关更多信息，请参阅[《*AWS CloudFormation 用户指南》*中的使用 CloudFormation 控制台](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-console.html)。

```
https://aws-hpc-recipes.s3.amazonaws.com/main/recipes/net/hpc_large_scale/assets/main.yaml
```

 在 CloudFormation 控制台中打开模板后，输入以下选项。您可以使用模板中提供的默认值。
+ 在 “**提供堆栈名称”** 下：
  + 在**堆栈名称**下，输入：

    ```
    hpc-networking
    ```
+ 在 “**参数”** 下：
  + 在 **VPC** 下：
    + 在下**CidrBlock**方输入：

      ```
      10.3.0.0/16
      ```
  + 在**子网 A** 下：
    + 在 **CidrPublicSubnetA** 下，输入：

      ```
      10.3.0.0/20
      ```
    + 在 **CidrPrivateSubnetA** 下，输入：

      ```
      10.3.128.0/20
      ```
  + 在**子网 B** 下：
    + 在 **CidrPublicSubnetB** 下，输入：

      ```
      10.3.16.0/20
      ```
    + 在 **CidrPrivateSubnetB** 下，输入：

      ```
      10.3.144.0/20
      ```
  + 在**子网 C** 下：
    + 对于 **ProvisionSubnetsC**，选择 **True**
    + 在 **CidrPublicSubnetC** 下，输入：

      ```
      10.3.32.0/20
      ```
    + 在 **CidrPrivateSubnetC** 下，输入：

      ```
      10.3.160.0/20
      ```
+ 在 “**能力**” 下：
  + 选中 “**我确认 AWS CloudFormation 可能会创建 IAM 资源**” 复选框。

监控 CloudFormation 堆栈的状态。当它到达时`CREATE_COMPLETE`，在新 VPC 中找到默认安全组的 ID。您将在本教程的后面部分使用该 ID。

## 查找集群 VPC 的默认安全组
<a name="getting-started_create-vpc_default-sg"></a>

 要在新 VPC 中查找默认安全组的 ID，请按照以下步骤操作：
+ 导航到 [Amazon VPC 控制台](https://console.aws.amazon.com/vpc)。
+ 在 **VPC 控制面板**下，选择**按 VPC 筛选**。
  + 选择名称开头的 VPC `hpc-networking`。
  + 在 “**安全**” 下，选择 “**安全组**”。
+ 查找名为的**组的安全组 ID** `default`。它有描述`default VPC security group`。您可以稍后使用该 ID 来配置 EC2 启动模板。

# 为 AWS PCS 创建安全组
<a name="getting-started_create-sg"></a>

 AWS PCS 依靠安全组来管理进出集群及其计算节点组的网络流量。有关此主题的详细信息，请参阅[安全组要求和注意事项](working-with_networking_sg.md#working-with_networking_sg-requirements)。

在此步骤中，您将使用 CloudFormation 模板创建两个安全组。
+ 集群安全组，它支持 AWS PCS 控制器、计算节点和登录节点之间的通信。
+ 入站 SSH 安全组，您可以选择将其添加到登录节点以支持 SSH 访问

## 为 AWS PCS 创建安全组
<a name="getting-started_create-sg_create"></a>

 您可以使用 CloudFormation 模板来创建安全组。使用以下 URL 下载 CloudFormation 模板，然后在[CloudFormation 控制台](https://console.aws.amazon.com/cloudformation/home#/stacks/create)中上传模板以创建新 CloudFormation 堆栈。有关更多信息，请参阅[《*AWS CloudFormation 用户指南》*中的使用 CloudFormation 控制台](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-console.html)。

```
https://aws-hpc-recipes.s3.amazonaws.com/main/recipes/pcs/getting_started/assets/pcs-cluster-sg.yaml
```

 在 AWS CloudFormation 控制台中打开模板后，输入以下选项。请注意，某些选项将在模板中预先填充，您只需将其保留为默认值即可。
+ 在 “**提供堆栈名称”** 下
  + 在**堆栈名称**下，输入：

    ```
    getstarted-sg
    ```
+ 在 “**参数**” 下
  + 在下 **VpcId**，选择名称以开头的 VPC `hpc-networking`。
  +  （可选）在下方 **ClientIpCidr**，为入站 SSH 安全组输入限制性更强的 IP 范围。我们建议您使用自己的 IP/子网对此进行限制（x.x.x.x/32 代表您自己的 IP，x.x.x.x/24 表示范围。 将 x.x.x.x 替换为你自己的公有 IP。 你可以使用诸如 [https://ifconfig.co/](https://ifconfig.co/) 之类的工具获取你的公有 IP)

 监控 CloudFormation 堆栈的状态。当它到达安全`CREATE_COMPLETE`组时，资源就准备好了。

 创建了两个安全组，名称为：
+ `cluster-getstarted-sg`— 这是群集安全组
+ `inbound-ssh-getstarted-sg`— 这是一个允许入站 SSH 访问的安全组

# 在 AWS PCS 中创建集群
<a name="getting-started_create-cluster"></a>

 在 AWS PCS 中，集群是一种用于管理资源和运行工作负载的永久资源。您可以在新的或现有 VPC 的子网中为特定的调度程序（AWS PCS 当前支持 Slurm）创建集群。集群接受和调度作业，还会启动处理这些任务的计算节点（EC2 实例）。

**创建集群的步骤**

1. 打开 [AWS PCS 控制台](https://console.aws.amazon.com/pcs/home#/clusters)并选择**创建集群**。

1. 在**集群详细信息**部分，输入以下字段：
   + **集群名称**-输入 `get-started`
   + **调度程序** — 选择 **Slur** m 版本 25.05
   + **控制器大小**-选择 “**小**”

1.  在 “**网络**” 部分中，为以下字段选择值：
   + **VPC** — 选择名为的 VPC `hpc-networking:Large-Scale-HPC`
   + **子网**-选择名称开头的子网 `hpc-networking:PrivateSubnetA`
   + **安全组**-选择名为的集群安全组 `cluster-getstarted-sg`

1. 选择**创建集群**。

**注意**  
置备集群时，**状态**字段显示正在**创建**。创建集群可能需要几分钟。

# 在亚马逊 Elastic File System 中为 AWS PCS 创建共享存储
<a name="getting-started_create-efs"></a>

Amazon Elastic File System (Amazon EFS) 是一项提供无服务器、完全弹性的文件存储的 AWS 服务，因此您无需预置或管理存储容量和性能即可共享文件数据。有关更多信息，请参阅 *Amazon Elastic File System 用户指南*中的[什么是 Amazon Elastic File System？](https://docs.aws.amazon.com/efs/latest/ug/whatisefs.html)。

 AWS PCS 演示群集使用 EFS 文件系统在群集节点之间提供共享的主目录。在集群所在的 VPC 中创建 EFS 文件系统。

**创建 Amazon EFS 文件系统**

1. 前往 [Amazon EFS 控制台](https://console.aws.amazon.com/efs)。

1. 确保将其设置为与试用 AWS PCS 的 AWS 区域 位置相同。

1. 选择**创建文件系统**。

1. 在**创建文件系统**页面上，设置以下参数：
   + 对于**名称**，输入 `getstarted-efs`。
   + 在**虚拟私有云 (VPC) Pri** vate Cloud 下，选择名为的 VPC `hpc-networking:Large-Scale-HPC`
   + 选择**创建**。这会将您返回到 “**文件系统**” 页面。

1. 记下**文件系统的`getstarted-efs`文件系统 ID**。稍后您将使用此信息。

# 在 Amazon for Lustre 中 FSx 为 AWS PCS 创建共享存储
<a name="getting-started_create-fsx"></a>

Amazon f FSx or Lustre 可以轻松且经济高效地启动和运行流行的高性能 Lustre 文件系统。您可以将 Lustre 用于速度至关重要的工作负载，例如机器学习、高性能计算（HPC）、视频处理和财务建模。有关更多信息，请参阅 [Amazon FSx for Lustre 是什么？](https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html) 在《*Amazon f FSx or Lustre 用户指南》*中。

 AWS PCS 演示集群可以使用 fo FSx r Lustre 文件系统在群集节点之间提供高性能共享目录。在与您的集群相同 FSx 的 VPC 中创建 for Lustre 文件系统。

**创建 for L FSx ustre 文件系统**

1. 前往 [Amazon FSx 控制台](https://console.aws.amazon.com/fsx)。

1. 确保将控制台设置为使用与您的集群 AWS 区域 相同的控制台。

1. 选择**创建文件系统**。
   + **在 “选择文件系统类型**” 中，选择 **Amazon f FSx or Lustre**，然后选择 “**下一步**”。

1. 在**指定文件系统详细信息**页面上，设置以下参数：
   + 在 “**文件系统详细信息”** 下
     + 对于**名称**，输入 `getstarted-fsx`。
     + 对于**部署和存储类型**，请选择**持久、SSD**
     + 对于**每单位存储的吞吐量**，请选择 **125 MB** /s/TiB
     + 对于**存储容量**，请输入 1.2 TiB
     + 在 “**元数据配置” 中**，选择 “**自动**”
     + 对于**数据压缩类型**，选择 **LZ4**
   + 在 “**网络与安全**” 下
     + 对于**虚拟私有云 (VPC) Pri** vate Cloud，请选择名为的 VPC `hpc-networking:Large-Scale-HPC`
     + 对于 **VPC 安全组**，请将安全组命名为 `default`
     + 对于**子网**，请选择名称开头的子网 `hpc-networking:PrivateSubnetA`
   + 将其他选项设置为其默认值。
   + 选择**下一步**。

1. 在 “**查看并创建**” 页面上，选择 “**创建文件系统**”。这会将您返回到 “**文件系统**” 页面。

1.  导航到您创建的 for Lustre 文件系统的详细信息页面。 FSx 

1. 记下**文件系统 ID** 和**装载名称**。稍后您将使用此信息。

**注意**  
 “**状态”** 字段显示在置备文件系统时正在**创建**。创建文件系统可能需要几分钟。等到它完成后再继续本教程的其余部分。

# 在 AWS PCS 中创建计算节点组
<a name="getting-started_create-cng"></a>

 计算节点组是 AWS PCS 启动和管理的计算节点（EC2 实例）的虚拟集合。在定义计算节点组时，您需要指定常见特征，例如 EC2 实例类型、最小和最大实例数、目标 VPC 子网、首选购买选项和自定义启动配置。 AWS 根据这些设置，PCS 可以有效地启动、管理和终止计算节点组中的计算节点。演示集群使用计算节点组为用户访问提供登录节点，使用单独的计算节点组来处理作业。以下主题描述了在集群中设置这些计算节点组的过程。

**Topics**
+ [为 AWS PCS 创建实例配置文件](getting-started_create-cng_instance-profile.md)
+ [为 AWS PCS 创建启动模板](getting-started_create-cng_launch-templates.md)
+ [在 AWS PCS 中为登录节点创建计算节点组](getting-started_create-cng_login-nodes.md)
+ [创建用于在 AWS PCS 中运行计算任务的计算节点组](getting-started_create-cng_workers.md)

# 为 AWS PCS 创建实例配置文件
<a name="getting-started_create-cng_instance-profile"></a>

计算节点组在创建时需要实例配置文件。如果使用 AWS 管理控制台 创建 Amazon EC2 的角色，则控制台自动创建实例配置文件，将其命名为与角色相同的名称。有关更多信息，请参阅*AWS Identity and Access Management 用户指南*中的[使用实例配置文件](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html)。

 在以下步骤中，您可以使用为 Amazon EC2 创建角色，该角色还会为您的计算节点组创建实例配置文件。 AWS 管理控制台 

**创建角色和实例配置文件**
+ 导航到 [IAM 控制台](https://console.aws.amazon.com/iam)。
+ 在**访问管理**下，选择**策略**。
  + 选择 **Create policy (创建策略)**。
  + 在 “**指定权限”** 下的 “**策略编辑器**” 中，选择 **JSON**。
  + 将文本编辑器的内容替换为以下内容：

------
#### [ JSON ]

****  

    ```
    {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
            {
                "Action": [
                    "pcs:RegisterComputeNodeGroupInstance"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
    ```

------
  + 选择**下一步**。
  + 在 “**查看并创建**” 下，在 “**策略名称**” 中输入`AWSPCS-getstarted-policy`。
  + 选择**创建策略**。
+ 在 **Access management**（访问管理）下，请选择 **Roles**（角色）。
+ 选择**创建角色**。
+ 在 **“选择可信实体”** 下：
  + 对于 “**可信实体类型**”，选择 “**AWS 服务**”
  + 在 “**用例**” 下，选择 **EC2**。
    + 然后，在 **“为指定服务选择用例**” 下，选择 **EC2**。
  + 选择**下一步**。
+ 在 “**添加权限”** 下：
  + 在**权限策略**中，搜索 **AWSPCS-getstarted-policy**。
  + 选中 **AWSPCS-getstarted-policy** 旁边的复选框将其添加到角色中。
  + 在**权限策略**中，搜索 **Amazon SSMManaged InstanceCore**。
  + 选中 **Amazon SSMManaged InstanceCore** 旁边的复选框将其添加到角色中。
  + 选择**下一步**。
+ 在 “**名称” 下，查看并创建**：
  + 在 “**角色详情”** 下：
    + 对于 **Role name（角色名称）**，输入 `AWSPCS-getstarted-role`。
  + 请选择 **Create role**（创建角色）。

# 为 AWS PCS 创建启动模板
<a name="getting-started_create-cng_launch-templates"></a>

 创建计算节点组时，您需要提供一个 EC2 启动模板， AWS PCS 使用该模板来配置其启动的 EC2 实例。这包括实例启动时运行的安全组和脚本等设置。

 在此步骤中，将使用一个 CloudFormation 模板来创建两个 EC2 启动模板。一个模板将用于创建登录节点，另一个模板将用于创建计算节点。它们之间的关键区别在于，可以将登录节点配置为允许入站 SSH 访问。

## 访问 CloudFormation 模板
<a name="getting-started_create-cng_launch-templates_get-cfn-template"></a>

 使用以下 URL 下载 CloudFormation 模板，然后在[CloudFormation 控制台](https://console.aws.amazon.com/cloudformation/home#/stacks/create)中上传模板以创建新 CloudFormation 堆栈。有关更多信息，请参阅[《*AWS CloudFormation 用户指南》*中的使用 CloudFormation 控制台](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-using-console.html)。

```
https://aws-hpc-recipes.s3.amazonaws.com/main/recipes/pcs/getting_started/assets/pcs-lt-efs-fsxl.yaml
```

## 使用 CloudFormation 模板创建 EC2 启动模板
<a name="getting-started_create-cng_launch-templates_use-cfn-template"></a>

 使用以下步骤在 CloudFormation 控制台中完成 CloudFormation 模板 
+ 在 “**提供堆栈名称”** 下：
  + 在**堆栈名称**下，输入`getstarted-lt`。
+ 在 “**参数”** 下：
  + 在**安全**之下
    + 对于 **VpcSecurityGroupId**，选择在您的集群 VPC `default` 中命名的安全组。
    + 对于 **ClusterSecurityGroupId**，请选择名为的群组 `cluster-getstarted-sg`
    + 对于 **SshSecurityGroupId**，请选择名为的群组 `inbound-ssh-getstarted-sg`
    + 对于 **SshKeyName**，请选择您的首选 SSH 密钥对。
  + 在 “**文件系统”** 下
    + 对于 **EfsFilesystemId**，请输入您在本教程前面创建的 EFS 文件系统的文件系统 ID。
    + 对于 **FSxLustreFilesystemId**，请输入您在本教程前面创建 FSx 的 for Lustre 文件系统的文件系统 ID。
    + 对于 **FSxLustreFilesystemMountName**，输入 Lustre 文件 FSx 系统的相同装载名称。
+ 选择 “**下一步**”，然后再次选择 “**下一步**”。
+ 选择**提交**。

 监控 CloudFormation 堆栈的状态。当它到达`CREATE_COMPLETE`时，启动模板就可以使用了。

**注意**  
要查看 CloudFormation 模板创建的所有资源，请打开[CloudFormation 控制台](https://console.aws.amazon.com/cloudformation)。选择 `getstarted-lt` 堆栈，然后选择 **Resources**（资源）选项卡。

# 在 AWS PCS 中为登录节点创建计算节点组
<a name="getting-started_create-cng_login-nodes"></a>

 计算节点组是 AWS PCS 启动和管理的计算节点（EC2 实例）的虚拟集合。在定义计算节点组时，您需要指定常见特征，例如 EC2 实例类型、最小和最大实例数、目标 VPC 子网、首选购买选项和自定义启动配置。 AWS 根据这些设置，PCS 可以有效地启动、管理和终止计算节点组中的计算节点。

 在此步骤中，您将启动一个提供集群交互式访问权限的静态计算节点组。你可以使用 SSH 或 Amazon EC2 Systems Manager (SSM) 登录它，然后运行 shell 命令并管理 Slurm 任务。

**创建计算节点组**
+ 打开 [AWS PCS 控制台](https://console.aws.amazon.com/pcs)并导航到**集群**。
+ 选择名为的集群 `get-started`
+ 导航到 “**计算节点组”**，然后选择 “**创建**”。
+ 在**计算节点组设置**部分，提供以下内容：
  + **计算节点组名称**-输入`login`。
+ 在 “**计算配置**” 下，输入或选择以下值：
  + **EC2 启动模板**-选择名称所在的启动模板 `login-getstarted-lt`
  + **IAM 实例配置文件**-选择名为的实例配置文件 `AWSPCS-getstarted-role`
  + **子网**-选择名称开头的子网。`hpc-networking:PublicSubnetA`
  + **实例**-选择`c6i.xlarge`。
  + **扩展配置**-对于**最小实例数**，请输入`1`。在 “**最大实例数” 中，输入`1`。**
+ 在 **“其他设置”** 下，指定以下内容：
  + **AMI ID** — 选择要使用的 AMI，其名称格式如下：

    ```
    aws-pcs-sample_ami-amzn2-platform-slurm-version
    ```

    有关该示例的更多信息 AMIs，请参阅[在 AWS PCS 上使用示例亚马逊系统映像 (AMIs)](working-with_ami_samples.md)。
+ 选择**创建计算节点组**。

 在配置计算节点组时，**状态**字段显示正在**创建**。在本教程的下一步中，您可以继续进行下一步。

# 创建用于在 AWS PCS 中运行计算任务的计算节点组
<a name="getting-started_create-cng_workers"></a>

 在此步骤中，您将启动一个计算节点组，该节点组可以弹性扩展以运行提交到集群的作业。

**创建计算节点组**
+ 打开 [AWS PCS 控制台](https://console.aws.amazon.com/pcs)并导航到**集群**。
+ 选择名为的集群 `get-started`
+ 导航到 “**计算节点组”**，然后选择 “**创建**”。
+ 在**计算节点组设置**部分，提供以下内容：
  + **计算节点组名称**-输入`compute-1`。
+ 在 “**计算配置**” 下，输入或选择以下值：
  + **EC2 启动模板**-选择名称所在的启动模板 `compute-getstarted-lt`
  + **IAM 实例配置文件**-选择名为的实例配置文件 `AWSPCS-getstarted-role`
  + **子网**-选择名称开头的子网。`hpc-networking:PrivateSubnetA`
  + **实例**-选择`c6i.xlarge`。
  + **扩展配置**-对于**最小实例数**，请输入`0`。在 “**最大实例数” 中，输入`4`。**
+ 在 **“其他设置”** 下，指定以下内容：
  + **AMI ID** — 选择要使用的 AMI，其名称格式如下：

    ```
    aws-pcs-sample_ami-amzn2-platform-slurm-version
    ```

    有关该示例的更多信息 AMIs，请参阅[在 AWS PCS 上使用示例亚马逊系统映像 (AMIs)](working-with_ami_samples.md)。
+ 选择**创建计算节点组**。

 在配置计算节点组时，**状态**字段显示正在**创建**。

**重要**  
 等待 “**状态”** 字段显示为 “**活动**”，然后再继续本教程的下一步。

# 创建队列来管理 AWS PCS 中的作业
<a name="getting-started_create-queue"></a>

 您将作业提交到队列以运行它。在 AWS PCS 安排作业在计算节点组上运行之前，该作业将一直保留在队列中。每个队列都与一个或多个计算节点组相关联，这些节点组提供了执行处理所需的 EC2 实例。

 在此步骤中，您将创建一个使用计算节点组处理作业的队列。

**创建队列**
+ 打开 [AWS PCS 控制台](https://console.aws.amazon.com/pcs)。
+ 选择名为 `get-started` 的集群。
+ 导航到 “**计算节点组**”，并确保该`compute-1`组的状态为 “**活动**”。
**重要**  
在继续下一步之前，`compute-1`群组的**状态**必须为 “活动”。
+ 导航到**队列**并选择**创建队列**。
  + 在**队列配置**部分，提供以下值：
    + **队列名称**-输入以下内容：`demo`
    + **计算节点组**-选择名为的计算节点组`compute-1`。
+ 选择**创建队列**。

 **创建**队列时，**状态**字段显示正在创建。

**重要**  
 等待 “**状态”** 字段显示为 “**活动**”，然后再继续本教程的下一步。

# Connect 连接到你的 AWS PCS 集群
<a name="getting-started_connect"></a>

 `login`计算节点组的状态变为 “**活动**” 后，您可以连接到它创建的 EC2 实例。

**连接到登录节点**
+ 打开 [AWS PCS 控制台](https://console.aws.amazon.com/pcs)并导航到**集群**。
+ 选择名为 `get-started` 的集群。
+ 选择**计算节点组**。
+ 导航到名为的计算节点组`login`。
+ 找到**计算节点组 ID**。
+ 在另一个浏览器窗口或选项卡中，打开 [Amazon EC2 控制台](https://console.aws.amazon.com/ec2)。
  + 选择**实例**。
  + 搜索带有以下标签的 EC2 实例。*node-group-id*替换为上一步中的**计算节点组 ID** 的值。应该有 1 个实例。

    ```
    aws:pcs:compute-node-group-id=node-group-id
    ```
  + Connect 连接到 EC2 实例。您可以使用会话管理器或 SSH。

------
#### [ Session Manager ]
    + 选择实例。
    + 选择**连接**。
    + 在 **Connect to 实例**下，选择**会话管理器**。
    + 选择**连接**。
    + 选择**连接**。交互式终端将在您的浏览器中启动。

------
#### [ SSH ]
    + 选择实例。
    + 选择**连接**。
    + 在 “**连接到实例**” 下，选择 **SSH 客户端**。
    + 按照控制台提供的说明进行操作。
**注意**  
该实例的用户名**`ec2-user`**不是`root`。

------

# 探索 AWS PCS 中的集群环境
<a name="getting-started_explore"></a>

 登录到集群后，您可以运行 shell 命令。例如，您可以更改用户、处理共享文件系统上的数据以及与 Slurm 交互。

## 更改用户
<a name="getting-started_explore_change-user"></a>

 如果您使用会话管理器登录到集群，则可能以身份进行连接`ssm-user`。这是为会话管理器创建的特殊用户。使用以下命令在 Amazon Linux 2 上切换到默认用户。如果您使用 SSH 连接，则无需执行此操作。

```
sudo su - ec2-user
```

## 使用共享文件系统
<a name="getting-started_explore_fs"></a>

您可以使用命令确认 EFS 文件系统和 FSx Lustre 文件系统是否可用。`df -h`集群上的输出应类似于以下内容：

```
[ec2-user@ip-10-3-6-103 ~]$ df -h
Filesystem                 Size  Used Avail Use% Mounted on
devtmpfs                   3.8G     0  3.8G   0% /dev
tmpfs                      3.9G     0  3.9G   0% /dev/shm
tmpfs                      3.9G  556K  3.9G   1% /run
tmpfs                      3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/nvme0n1p1              24G   18G  6.6G  73% /
127.0.0.1:/                8.0E     0  8.0E   0% /home
10.3.132.79@tcp:/zlshxbev  1.2T  7.5M  1.2T   1% /shared
tmpfs                      780M     0  780M   0% /run/user/0
tmpfs                      780M     0  780M   0% /run/user/1000
```

 `/home`文件系统装载了 127.0.0.1，容量非常大。这是您在本教程前面部分创建的 EFS 文件系统。此处写入的所有文件都将在集群中的所有节点`/home`上都可用。

 `/shared`文件系统挂载一个私有 IP，容量为 1.2 TB。这是您在本教程前面 FSx 部分创建的 for Lustre 文件系统。此处写入的所有文件都将在集群中的所有节点`/shared`上都可用。

## 与 Slurm 互动
<a name="getting-started_explore_slurm"></a>

**Contents**
+ [列出队列和节点](#getting-started_explore_slurm_queues)
+ [显示职位](#getting-started_explore_slurm_jobs)

### 列出队列和节点
<a name="getting-started_explore_slurm_queues"></a>

 您可以使用列出队列及其关联的节点`sinfo`。集群的输出应类似于以下内容：

```
[ec2-user@ip-10-3-6-103 ~]$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
demo         up   infinite      4  idle~ compute-1-[1-4]
[ec2-user@ip-10-3-6-103 ~]$
```

 记下名为的分区`demo`。它的状态为`up`，最多有 4 个节点。它与节点组中的`compute-1`节点相关联。如果您编辑计算节点组并将最大实例数增加到 8，则会读取节点数`8`并读取节点列表`compute-1-[1-8]`。如果您创建了第二个名为 4 个节点`test`的计算节点组，并将其添加到`demo`队列中，则这些节点也将显示在节点列表中。

### 显示职位
<a name="getting-started_explore_slurm_jobs"></a>

 您可以使用列出系统上所有处于任何状态的作业`squeue`。集群的输出应类似于以下内容：

```
[ec2-user@ip-10-3-6-103 ~]$ squeue
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
```

当你有 Slurm 任务待处理或正在运行时，请稍后`squeue`再试运行。

# 在 AWS PCS 中运行单节点作业
<a name="getting-started_run-job"></a>

 要使用 Slurm 运行作业，您需要准备一个指定作业要求的提交脚本，然后使用命令将其提交到队列。`sbatch`通常，这是在共享目录中完成的，因此登录和计算节点有一个用于访问文件的公共空间。

 连接到集群的登录节点，并在其 shell 提示符下运行以下命令。
+ 成为默认用户。切换到共享目录。

  ```
  sudo su - ec2-user
  cd /shared
  ```
+ 使用以下命令创建示例作业脚本：

  ```
  cat << EOF > job.sh
  #!/bin/bash
  #SBATCH -J single
  #SBATCH -o single.%j.out
  #SBATCH -e single.%j.err
  
  echo "This is job \${SLURM_JOB_NAME} [\${SLURM_JOB_ID}] running on \${SLURMD_NODENAME}, submitted from \${SLURM_SUBMIT_HOST}" && sleep 60 && echo "Job complete"
  EOF
  ```
+ 将作业脚本提交给 Slurm 调度器：

  ```
  sbatch -p demo job.sh
  ```
+  提交作业后，它将以数字形式返回作业 ID。使用该 ID 来检查任务状态。用返回*job-id*的数字替换以下命令中的数字`sbatch`。

  ```
  squeue --job job-id
  ```  
**Example**  

  ```
  squeue --job 1
  ```

   该`squeue`命令返回的输出类似于以下内容：

  ```
  JOBID PARTITION NAME USER     ST TIME NODES NODELIST(REASON)
  1     demo      test ec2-user CF 0:47 1     compute-1
  ```
+  继续检查作业的状态，直到它达到`R`（正在运行）状态。当`squeue`没有返回任何东西时，工作就完成了。
+  检查`/shared`目录的内容。

  ```
  ls -alth /shared
  ```

  命令输出类似于以下内容：

  ```
  -rw-rw-r- 1 ec2-user ec2-user 107 Mar 19 18:33 single.1.out
  -rw-rw-r- 1 ec2-user ec2-user 0 Mar 19 18:32 single.1.err
  -rw-rw-r- 1 ec2-user ec2-user 381 Mar 19 18:29 job.sh
  ```

   `single.1.err`这些文件名为`single.1.out`、由您的集群的一个计算节点写入。由于作业是在共享目录 (`/shared`) 中运行的，因此它们也可以在您的登录节点上使用。这就是您为该集群配置 fo FSx r Lustre 文件系统的原因。
+  检查`single.1.out`文件内容。

  ```
  cat /shared/single.1.out
  ```

   输出类似于以下内容：

  ```
  This is job test [1] running on compute-1, submitted from ip-10-3-13-181
  Job complete
  ```

# 在 PCS 中使用 Slurm 运行多节点 MPI 作业 AWS
<a name="getting-started_run-mpi-job"></a>

 这些说明演示了如何使用 Slurm 在 PCS 中运行消息传递接口 (MPI) 作业。 AWS 

在登录节点的 shell 提示符下运行以下命令。
+  成为默认用户。切换到其主目录。

  ```
  sudo su - ec2-user
  cd ~/
  ```
+  使用 C 编程语言创建源代码。

  ```
  cat > hello.c << EOF
  // * mpi-hello-world - https://www.mpitutorial.com
  // Released under MIT License
  // 
  // Copyright (c) 2014 MPI Tutorial.
  //
  // Permission is hereby granted, free of charge, to any person obtaining a copy
  // of this software and associated documentation files (the "Software"), to 
  // deal in the Software without restriction, including without limitation the 
  // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 
  // sell copies of the Software, and to permit persons to whom the Software is 
  // furnished to do so, subject to the following conditions:
  // The above copyright notice and this permission notice shall be included in 
  // all copies or substantial portions of the Software.
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
  // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
  // DEALINGS IN THE SOFTWARE.
  
  #include <mpi.h>
  #include <stdio.h>
  #include <stddef.h>
  
  int main(int argc, char** argv) {
    // Initialize the MPI environment. The two arguments to MPI Init are not
    // currently used by MPI implementations, but are there in case future
    // implementations might need the arguments.
    MPI_Init(NULL, NULL);
  
    // Get the number of processes
    int world_size;
    MPI_Comm_size(MPI_COMM_WORLD, &world_size);
  
    // Get the rank of the process
    int world_rank;
    MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
  
    // Get the name of the processor
    char processor_name[MPI_MAX_PROCESSOR_NAME];
    int name_len;
    MPI_Get_processor_name(processor_name, &name_len);
  
    // Print off a hello world message
    printf("Hello world from processor %s, rank %d out of %d processors\n",
           processor_name, world_rank, world_size);
  
    // Finalize the MPI environment. No more MPI calls can be made after this
    MPI_Finalize();
  }
  EOF
  ```
+ 加载 OpenMPI 模块。

  ```
  module load openmpi
  ```
+ 编译 C 程序。

  ```
  mpicc -o hello hello.c
  ```
+ 编写 Slurm 作业提交脚本。

  ```
  cat > hello.sh << EOF
  #!/bin/bash
  #SBATCH -J multi
  #SBATCH -o multi.out
  #SBATCH -e multi.err
  #SBATCH --exclusive
  #SBATCH --nodes=4
  #SBATCH --ntasks-per-node=1
  
  srun $HOME/hello
  EOF
  ```
+ 切换到共享目录。

  ```
  cd /shared
  ```
+ 提交作业脚本。

  ```
  sbatch -p demo ~/hello.sh
  ```
+ `squeue`用于监视作业直至其完成。
+ 检查以下内容`multi.out`：

  ```
  cat multi.out
  ```

  输出类似于以下内容。请注意，每个等级都有自己的 IP 地址，因为它运行在不同的节点上。

  ```
  Hello world from processor ip-10-3-133-204, rank 0 out of 4 processors
  Hello world from processor ip-10-3-128-219, rank 2 out of 4 processors
  Hello world from processor ip-10-3-141-26, rank 3 out of 4 processors
  Hello world from processor ip-10-3-143-52, rank 1 out of 4 processor
  ```

# 删除你的 AWS PCS AWS 资源
<a name="getting-started_delete"></a>

 完成为本教程创建的集群和节点组后，应删除已创建的资源。

**重要**  
你需要为你运行的所有资源收取账单费用 AWS 账户

**删除您为本教程创建的 AWS PCS 资源**
+ 打开 [AWS PCS 控制台](https://console.aws.amazon.com/pcs/home#/clusters)。
+ 导航到名为 **get-starte** d 的集群。
+ 导航到 “队**列**” 部分。
+ 选择名为 **demo** 的队列。
+ 选择**删除**。
**重要**  
等到队列被删除后再继续。
+ 导航至 “**计算节点组**” 部分。
+ 选择名为 compute-1 的**计算**节点组。
+ 选择**删除**。
+ 选择名为 log **in** 的计算节点组。
+ 选择**删除**。
**重要**  
等到两个计算节点组都被删除后再继续。
+ **在用于入**门的集群详细信息页面中**，选择删除。**
**重要**  
等到集群被删除后再继续执行后续步骤。

**删除您为本教程创建的其他 AWS 资源**
+ 打开 [IAM 管理控制台](https://console.aws.amazon.com/iam)。
  + 选择**角色**。
  + 选择名为 **AWSPCS-getstarted-role 的角色**，然后选择**删除**。
  + 删除角色后，选择**策略**。
  + 选择名为 **AWSPCS-getstarted-policy 的策略**，然后选择**删除**。
+ 打开 [CloudFormation 管理控制台](https://console.aws.amazon.com/cloudformation)。
  + 选择名为 **getstart** ed-lt 的堆栈。
  + 选择**删除**。
**重要**  
等待堆栈删除后再继续。
+ 打开 [Amazon EFS 控制台](https://console.aws.amazon.com/efs)。
  + 选择**文件系统**。
  + 选择名为 **getstart** ed-efs 的文件系统。
  + 选择**删除**。
**重要**  
等待文件系统删除后再继续。
+ 打开[亚马逊 FSx 控制台](https://console.aws.amazon.com/fsx)。
  + 选择**文件系统**。
  + 选择名为 **getstart** ed-fsx 的文件系统。
  + 选择**删除**。
**重要**  
等待文件系统删除后再继续。
+ 打开 [CloudFormation 管理控制台](https://console.aws.amazon.com/cloudformation)。
  + 选择名为 **getstart** ed-sg 的堆栈。
  + 选择**删除**。
+ 打开 [CloudFormation 管理控制台](https://console.aws.amazon.com/cloudformation)。
  + 选择名为 **hpc**-networking 的堆栈。
  + 选择 **Delete**（删除）。