

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 平行 AWS 運算服務入門
<a name="getting-started"></a>

這是建立簡單叢集的教學課程，可用來試用 AWS PCS。下圖顯示叢集的設計。

![\[教學課程叢集的架構圖：2 個運算節點群組是 中的資源 AWS 帳戶 ，並連接到在服務擁有的 中執行的 Slurm 叢集控制器 AWS 帳戶。兩個運算節點群組中的 EC2 執行個體都會連線到 Amazon EFS 和 Amazon FSx for Lustre 中的共用儲存體。\]](http://docs.aws.amazon.com/zh_tw/pcs/latest/userguide/images/aws-pcs-tutorial-environment-diagram.png)


教學課程叢集設計具有下列重要元件：
+ 符合 [AWS PCS 網路需求的](working-with_networking_vpc-requirements.md) VPC 和子網路。
+ Amazon EFS 檔案系統，將用作共用主目錄。
+ Amazon FSx for Lustre 檔案系統，提供共用的高效能目錄。
+  AWS PCS 叢集，提供 Slurm 控制器。
+ 2 AWS PCS 運算節點群組。
  + `login` 節點群組，提供系統的 shell 型互動式存取。
  + `compute-1` 節點群組提供彈性擴展的執行個體來執行任務。
+ 將任務傳送至`compute-1`節點群組中 EC2 執行個體的 1 個佇列。

叢集需要額外 AWS 的資源，例如安全群組、IAM 角色和 EC2 啟動範本，這些資源不會顯示於圖表中。

**注意**  
 建議您在 Bash shell 中完成本主題中的命令列步驟。如果您不使用 Bash shell，則某些指令碼命令 (如行接續字元以及設定和使用變數的方式) 需要針對 shell 進行調整。此外，您的 Shell 的引用及轉義規則可能會有所不同。如需詳細資訊，請參閱《 第 *AWS Command Line Interface 2 版使用者指南*[》中的引號和含有字串的常值 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-parameters-quoting-strings.html)。

**Topics**
+ [開始使用 AWS PCS 的先決條件](getting-started_prerequisites.md)
+ [使用 AWS CloudFormation 搭配 AWS PCS 教學課程](getting-started_cfn-note.md)
+ [建立 AWS PCS 的 VPC 和子網路](getting-started_create-vpc.md)
+ [建立 AWS PCS 的安全群組](getting-started_create-sg.md)
+ [在 AWS PCS 中建立叢集](getting-started_create-cluster.md)
+ [在 Amazon Elastic File System 中為 AWS PCS 建立共用儲存](getting-started_create-efs.md)
+ [在 Amazon FSx for Lustre 中為 AWS PCS 建立共用儲存](getting-started_create-fsx.md)
+ [在 AWS PCS 中建立運算節點群組](getting-started_create-cng.md)
+ [建立佇列以管理 AWS PCS 中的任務](getting-started_create-queue.md)
+ [連線至 AWS PCS 叢集](getting-started_connect.md)
+ [探索 AWS PCS 中的叢集環境](getting-started_explore.md)
+ [在 AWS PCS 中執行單一節點任務](getting-started_run-job.md)
+ [在 AWS PCS 中使用 Slurm 執行多節點 MPI 任務](getting-started_run-mpi-job.md)
+ [刪除 AWS PCS AWS 的資源](getting-started_delete.md)

# 開始使用 AWS PCS 的先決條件
<a name="getting-started_prerequisites"></a>

請參閱下列主題，為 AWS PCS 準備您的 AWS 帳戶 和本機開發環境。

**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/signup](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和建立管理使用者，以免將根使用者用於日常任務。

**保護您的 AWS 帳戶根使用者**

1.  選擇**根使用者**並輸入 AWS 帳戶 您的電子郵件地址，以帳戶擁有者[AWS 管理主控台](https://console.aws.amazon.com/)身分登入 。在下一頁中，輸入您的密碼。

   如需使用根使用者登入的說明，請參閱 *AWS 登入 使用者指南*中的[以根使用者身分登入](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial)。

1. 若要在您的根使用者帳戶上啟用多重要素驗證 (MFA)。

   如需說明，請參閱《*IAM 使用者指南*》中的[為您的 AWS 帳戶 根使用者 （主控台） 啟用虛擬 MFA 裝置](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html)。

**建立具有管理存取權的使用者**

1. 啟用 IAM Identity Center。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[啟用 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 目錄 做為身分來源的教學課程，請參閱*AWS IAM Identity Center 《 使用者指南*》中的[使用預設值設定使用者存取 IAM Identity Center 目錄](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html)。

**以具有管理存取權的使用者身分登入**
+ 若要使用您的 IAM Identity Center 使用者簽署，請使用建立 IAM Identity Center 使用者時傳送至您電子郵件地址的簽署 URL。

  如需使用 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 使用者指南》**中的[建立許可集](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html)。

1. 將使用者指派至群組，然後對該群組指派單一登入存取權。

   如需指示，請參閱《AWS IAM Identity Center 使用者指南》**中的[新增群組](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html)。

# 安裝 AWS CLI 適用於 AWS PCS 的
<a name="setting-up_cli"></a>

您必須使用最新版本的 AWS CLI。如需詳細資訊，請參閱《 [第 2 版使用者指南》中的安裝或更新至最新版本 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)*AWS Command Line Interface 的 *。

您必須設定 AWS CLI。如需詳細資訊，請參閱《 第 *AWS Command Line Interface 2 版使用者指南*》中的[設定 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 Management 使用者指南*》中的 [AWS 平行運算服務的 Identity and Access Management](security-iam.md)和[建立服務連結角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create-service-linked-role.html)。您必須以同一位使用者的身分完成本指南中的所有步驟。若要檢查目前使用者，請執行以下命令：

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

# 使用 AWS CloudFormation 搭配 AWS PCS 教學課程
<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)。

# 建立 AWS PCS 的 VPC 和子網路
<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 取代為您自己的 PUBLIC 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`
   + **排程器** – 選取 **Slurm 25.05 版**
   + **控制器大小** – 選取**小型**

1.  在**聯網**區段中，選取下列欄位的值：
   + **VPC** – 選擇名為 的 VPC `hpc-networking:Large-Scale-HPC`
   + **子網路** – 選取名稱開頭為 的子網路 `hpc-networking:PrivateSubnetA`
   + **安全群組** – 選取名為 的叢集安全群組 `cluster-getstarted-sg`

1. 選擇 **Create Cluster** (建立叢集)。

**注意**  
在佈建叢集時，**狀態**欄位會顯示**建立**。建立叢集可能需要幾分鐘的時間。

# 在 Amazon 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)。 *Amazon Elastic File System * 

 AWS PCS 示範叢集使用 EFS 檔案系統，在叢集節點之間提供共用的主目錄。在與叢集相同的 VPC 中建立 EFS 檔案系統。

**建立 Amazon EFS 檔案系統**

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

1. 請確定它設定為您要嘗試 AWS PCS AWS 區域 的相同 。

1. 選擇 **Create file system (建立檔案系統)**。

1. 在**建立檔案系統**頁面上，設定下列參數：
   + 對於**名稱**，輸入 `getstarted-efs`。
   + 在**虛擬私有雲端 (VPC)** 下，選擇名為 的 VPC `hpc-networking:Large-Scale-HPC`
   + 選擇 **Create** (建立)。這會讓您返回**檔案系統**頁面。

1. 請記下**檔案系統的檔案系統 ID**。 `getstarted-efs`您之後將會用到此資訊。

# 在 Amazon FSx for Lustre 中為 AWS PCS 建立共用儲存
<a name="getting-started_create-fsx"></a>

Amazon FSx for Lustre 可讓您輕鬆且符合成本效益地啟動和執行熱門的高效能 Lustre 檔案系統。對於速度很重要的工作負載，例如機器學習、高效能運算 (HPC)、影片處理和財務建模。如需詳細資訊，請參閱《[Amazon FSx for Lustre 使用者指南》中的什麼是 Amazon FSx for Lustre？](https://docs.aws.amazon.com/fsx/latest/LustreGuide/what-is.html)。 * FSx * 

 AWS PCS 示範叢集可以使用 FSx for Lustre 檔案系統，在叢集節點之間提供高效能的共用目錄。在與叢集相同的 VPC 中建立 FSx for Lustre 檔案系統。

**建立 FSx for Lustre 檔案系統**

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

1. 請確定主控台設定為使用 AWS 區域 與您的叢集相同的 。

1. 選擇 **Create file system (建立檔案系統)**。
   + 對於**選取檔案系統類型**，選擇 **Amazon FSx for Lustre**，然後選擇**下一步**。

1. 在**指定檔案系統詳細資訊**頁面上，設定下列參數：
   + **檔案系統詳細資訊**下
     + 對於**名稱**，輸入 `getstarted-fsx`。
     + 針對**部署和儲存類型**，選擇**持久性、SSD**
     + 針對**每單位儲存的輸送量**，選擇 **125 MB/s/TiB**
     + 針對**儲存容量**，輸入 1.2 TiB
     + 針對**中繼資料組態**，選擇**自動**
     + 針對**資料壓縮類型**，選擇 **LZ4**
   + 在**網路與安全**下
     + 針對**虛擬私有雲端 (VPC)**，選擇名為 的 VPC `hpc-networking:Large-Scale-HPC`
     + 對於 **VPC 安全群組**，保留名為 的安全群組 `default`
     + 針對**子網路**，選擇名稱開頭為 的子網路 `hpc-networking:PrivateSubnetA`
   + 將其他選項設定為其預設值。
   + 選擇 **Next (下一步)**。

1. 在**檢閱和建立**頁面上，選擇**建立檔案系統**。這會讓您返回**檔案系統**頁面。

1.  導覽至您建立之 FSx for Lustre 檔案系統的詳細資訊頁面。

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)檔。

 在下列程序中，您可以使用 AWS 管理主控台 為 Amazon EC2 建立角色，該角色也會為您的運算節點群組建立執行個體描述檔。

**建立角色和執行個體描述檔**
+ 導覽至 [IAM 主控台](https://console.aws.amazon.com/iam)。
+ 在 **Access management** (存取管理) 下，請選擇 **Policies** (政策)。
  + 選擇 **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** 旁的方塊，將其新增至角色。
  + 在**許可政策**中，搜尋 **AmazonSSMManagedInstanceCore**。
  + 勾選 **AmazonSSMManagedInstanceCore** 旁的方塊，將其新增至角色。
  + 選擇**下一步**。
+ 在**名稱下，檢閱和建立**：
  + 在**角色詳細資訊**下：
    + 在**角色名稱**中，輸入 `AWSPCS-getstarted-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**，輸入相同 FSx for Lustre 檔案系統的掛載名稱。
+ 選擇**下一步**，然後再次選擇**下一步**。
+ 選擇**提交**。

 監控 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 使用範例 Amazon Machine Image 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 使用範例 Amazon Machine Image 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`。
+ 選擇**建立佇列**。

 在**建立**佇列時，**狀態**欄位會顯示建立。

**重要**  
 等待**狀態**欄位顯示**作用中**，然後再繼續本教學課程的下一個步驟。

# 連線至 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)。
  + 選擇 **Instances** (執行個體)。
  + 使用下列標籤搜尋 EC2 執行個體。將 *node-group-id* 取代為上一個步驟中**運算節點群組 ID** 的值。應該有 1 個執行個體。

    ```
    aws:pcs:compute-node-group-id=node-group-id
    ```
  + 連線至 EC2 執行個體。您可以使用 Session Manager 或 SSH。

------
#### [ Session Manager ]
    + 選取執行個體。
    + 選擇**連線**。
    + 在**連線至執行個體**下，選取**工作階段管理員**。
    + 選擇**連線**。
    + 選擇**連線**。互動式終端機會在您的瀏覽器中啟動。

------
#### [ SSH ]
    + 選取執行個體。
    + 選擇**連線**。
    + 在**連線至執行個體**下，選取 **SSH 用戶端**。
    + 遵循 主控台提供的指示。
**注意**  
執行個體的使用者名稱**`ec2-user`**不是 `root`。

------

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

 登入叢集後，您可以執行 shell 命令。例如，您可以變更使用者、使用共用檔案系統上的資料，以及與 Slurm 互動。

## 變更使用者
<a name="getting-started_explore_change-user"></a>

 如果您已使用 Session Manager 登入叢集，則可能會以 身分連線`ssm-user`。這是為 Session Manager 建立的特殊使用者。使用下列命令在 Amazon Linux 2 上切換到預設使用者。如果您使用 SSH 連線，則不需要執行此操作。

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

## 使用共用檔案系統
<a name="getting-started_explore_fs"></a>

您可以確認 EFS 檔案系統和 FSx for 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]`。如果您建立名為 `test`的第二個運算節點群組，其中包含 4 個節點，並將其新增至`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.out`和 的檔案是由叢集的其中一個運算節點所`single.1.err`撰寫。由於任務是在共用目錄 (`/shared`) 中執行，因此它們也可用於您的登入節點。這就是您為此叢集設定 FSx for 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
  ```

# 在 AWS PCS 中使用 Slurm 執行多節點 MPI 任務
<a name="getting-started_run-mpi-job"></a>

 這些指示示範使用 Slurm 在 AWS PCS 中執行訊息傳遞界面 (MPI) 任務。

在登入節點的 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-started** 的叢集。
+ 導覽至**佇列**區段。
+ 選取名為**示範**的佇列。
+ 選擇 **刪除** 。
**重要**  
等待佇列刪除後再繼續。
+ 導覽至**運算節點群組**區段。
+ 選取名為 **compute-1** 的運算節點群組。
+ 選擇 **刪除** 。
+ 選取名為**登入**的運算節點群組。
+ 選擇 **刪除** 。
**重要**  
請等到兩個運算節點群組都已刪除，再繼續。
+ 在**入門**的叢集詳細資訊頁面中，選擇**刪除**。
**重要**  
等待叢集刪除後，再繼續後續步驟。

**刪除您為此教學課程建立的其他 AWS 資源**
+ 開啟 [IAM 主控台](https://console.aws.amazon.com/iam)。
  + 選擇**角色**。
  + 選取名為 **AWSPCS-getstarted-role** 的角色，然後選擇**刪除**。
  + 刪除角色之後，請選擇**政策**。
  + 選取名為 **AWSPCS-getstarted-policy** 的政策，然後選擇**刪除**。
+ 開啟 [CloudFormation 主控台](https://console.aws.amazon.com/cloudformation)。
  + 選取名為 **getstarted-lt** 的堆疊。
  + 選擇 **刪除** 。
**重要**  
等待堆疊刪除再繼續。
+ 開啟 [Amazon EFS 主控台](https://console.aws.amazon.com/efs)。
  + 選擇**檔案系統**。
  + 選取名為 **getstarted-efs** 的檔案系統。
  + 選擇 **刪除** 。
**重要**  
等待檔案系統刪除，然後再繼續。
+ 開啟 [Amazon FSx 主控台](https://console.aws.amazon.com/fsx)。
  + 選擇**檔案系統**。
  + 選取名為 **getstarted-fsx** 的檔案系統。
  + 選擇 **刪除** 。
**重要**  
等待檔案系統刪除，然後再繼續。
+ 開啟 [CloudFormation 主控台](https://console.aws.amazon.com/cloudformation)。
  + 選取名為 **getstarted-sg** 的堆疊。
  + 選擇 **刪除** 。
+ 開啟 [CloudFormation 主控台](https://console.aws.amazon.com/cloudformation)。
  + 選取名為 **hpc-networking** 的堆疊。
  + 選擇 **Delete (刪除)**。