

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

# Amazon EC2 上 HPC 工作負載的 EFA 和 MPI 入門
<a name="efa-start"></a>

本教學課程協助您啟動 EFA 和 MPI 啟用的執行個體叢集用於 HPC 工作負載。

**注意**  
`u7i-12tb.224xlarge`、`u7in-16tb.224xlarge`、`u7in-24tb.224xlarge` 和 `u7in-32tb.224xlarge`執行個體可以使用 Open MPI 執行最多 128 個平行 MPI 程序，或使用 Intel MPI 執行最多 256 個平行 MPI 程序。

**Topics**
+ [步驟 1：準備具備 EFA 功能的安全群組](#efa-start-security)
+ [步驟 2：啟動暫時執行個體](#efa-start-tempinstance)
+ [步驟 3：安裝 EFA 軟體](#efa-start-enable)
+ [步驟 4：(*選用*) 啟用 Open MPI 5](#efa-start-ompi5)
+ [步驟 5：(*選用*) 安裝 Intel MPI](#efa-start-impi)
+ [步驟 6：停用 ptrace 保護](#efa-start-ptrace)
+ [步驟 7. 確認安裝](#efa-start-test)
+ [步驟 8：安裝 HPC 應用程式](#efa-start-hpc-app)
+ [步驟 9：建立已啟用 EFA 的 AMI](#efa-start-ami)
+ [步驟 10：在集群放置群組中啟動已啟用 EFA 的執行個體](#efa-start-instances)
+ [步驟 11：終止暫時執行個體](#efa-start-terminate)
+ [步驟 12：啟用無密碼 SSH](#efa-start-passwordless)

## 步驟 1：準備具備 EFA 功能的安全群組
<a name="efa-start-security"></a>

EFA 需要有安全群組來允許往返安全群組自身的所有傳入和傳出流量。下列程序會建立一個安全群組，該安全群組允許所有傳入和傳出流量，並允許來自任何 IPv4 地址的傳入 SSH 流量以進行 SSH 連線。

**重要**  
此安全群組僅供測試之用。對於生產環境，我們建議您建立傳入 SSH 規則，該規則僅允許來自連線 IP 位址的流量，例如電腦的 IP 位址或區域網路中的一系列 IP 位址。

如需其他案例，請參閱[不同使用案例的安全群組規則](security-group-rules-reference.md)。

**建立具備 EFA 功能的安全群組**

1. 在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Security Groups** (安全群組)，然後選擇 **Create Security Group** (建立安全群組)。

1. 在 **Create Security Group** (建立安全群組) 視窗中，執行下列動作：

   1. 對於 **Security group name** (安全群組名稱)，輸入安全群組的描述性名稱，例如 `EFA-enabled security group`。

   1. (選用) 對於 **Description** (描述)，輸入安全群組的簡短描述。

   1. 對於 **VPC**，選取您打算讓具備 EFA 功能的執行個體在其中啟動的 VPC。

   1. 選擇 **Create Security Group** (建立安全群組)。

1. 選取您建立的安全群組，在 **Details** (詳細資料) 索引標籤上，複製 **Security group ID** (安全群組 ID)。

1. 在仍然選取安全群組的情況下，依序選取 **Actions** (動作) 和 **Edit inbound rules** (編輯傳入規則)，然後執行下列動作。

   1. 選擇**新增規則**。

   1. 針對**類型**，選擇**所有流量**。

   1. 若為 **Source type** (來源類型)，選擇 **Custom** (自訂)，然後將您複製的安全群組 ID 貼到欄位中。

   1. 選擇**新增規則**。

   1. 針對 **Type** (類型)，選擇 **SSH**。

   1. 針對 **Source type** (來源類別)，選擇 **Anywhere-IPv4**(隨處 - IPv4)。

   1. 選擇**儲存規則**。

1. 在仍然選取安全群組的情況下，依序選取 **Actions** (動作) 和 **Edit outbound rules** (編輯傳出規則)，然後執行下列動作。

   1. 選擇**新增規則**。

   1. 針對**類型**，選擇**所有流量**。

   1. 若為 **Destination type** (目的地類型)，選擇 **Custom** (自訂)，然後將您複製的安全群組 ID 貼到欄位中。

   1. 選擇**儲存規則**。

## 步驟 2：啟動暫時執行個體
<a name="efa-start-tempinstance"></a>

啟動暫時執行個體，以用來安裝和設定 EFA 軟體元件。您可以使用此執行個體來建立具備 EFA 功能的 AMI，再從中啟動具備 EFA 功能的執行個體。

**啟動暫時執行個體**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Instances** (執行個體)，接著選擇 **Launch Instances** (啟動執行個體) 來開啟新的啟動執行個體精靈。

1. (*選用*) 在 **Name and tags** (名稱和標籤) 區段中，為執行個體命名，例如，`EFA-instance`。該名稱將指派作為執行個體的資源標籤 (`Name=EFA-instance`)。

1. 在 **Application and OS Images** (應用程式和作業系統映像) 區段中，為其中一個[支援的作業系統](efa.md#efa-os)選取 AMI。

1. 在 **Instance type** (執行個體類型) 區段中，選取[支援的執行個體類型](efa.md#efa-instance-types)。

1. 在 **Key pair** (金鑰對) 區段中，選取要用於執行個體的金鑰對。

1. 在 **Network settings** (網路設定) 區段，選擇 **Edit** (編輯)，接著執行下列動作：

   1. 對於 **Subnet (子網路)**，請選擇要在其中啟動執行個體的子網路。
**重要**  
您必須選取子網路。若您未選取子網路，便無法啟用 EFA 的執行個體。

   1. 針對 **Firewall (security groups)** (防火牆 (安全群組))，選取 **Select existing security group** (選取現有的安全群組)，接著選取您在前一個步驟中建立的安全群組。

   1. 展開**進階設定**區段。

      針對**網路介面 1**，選取**網路卡索引 = 0**、**裝置索引 = 0**，以及**介面類型 = EFA 搭配 ENA**。

      (選用) 如果您使用的是多卡執行個體類型，例如 `p4d.24xlarge` 或 `p5.48xlarge`，則針對所需的每個額外網路介面，選擇**新增網路介面**，針對**網路卡索引**，選擇下一個未使用的索引，然後選擇**裝置索引 = 1**，**介面類型 = EFA 搭配 ENA** **或僅限 EFA**。

1. 在**儲存**區段中，根據需求設定磁碟區。

1. 在右邊的 **Summary** (摘要) 面板中，選擇 **Launch instance** (啟動執行個體)。

**注意**  
請考慮要求將 IMDSv2 用於暫時執行個體，以及您在[步驟 9 ](#efa-start-ami)中建立的 AMI，除非您已[將 IMDSv2 設定為帳戶的預設值](configuring-IMDS-new-instances.md#set-imdsv2-account-defaults)。如需 IMDSv2 設定步驟的相關資訊，請參閱 [設定新執行個體的執行個體中繼資料選項](configuring-IMDS-new-instances.md)。

## 步驟 3：安裝 EFA 軟體
<a name="efa-start-enable"></a>

在暫存執行個體上安裝支援 EFA 所需的具備 EFA 功能的核心、EFA 驅動程式、Libfabric 和 Open MPI 堆疊。

該步驟會根據您是否打算將 EFA 與 Open MPI、Intel MPI 或 Open MPI 與 Intel MPI 搭配使用而有所不同。

**注意**  
Intel MPI 可能不支援某些作業系統。如果您使用的是 Intel MPI，請參閱 [Intel MPI 文件](https://www.intel.com/content/www/us/en/developer/articles/system-requirements/mpi-library-system-requirements.html)來驗證對作業系統的支援。

**安裝 EFA 軟體**

1. 連接至您啟動的執行個體。如需詳細資訊，請參閱 [使用 SSH 連線至您的 Linux 執行個體](connect-to-linux-instance.md)。

1. 為確保所有軟體套件皆為最新版本，請對您的執行個體執行快速軟體更新。此程序可能需要幾分鐘的時間。
   + Amazon Linux 2023、Amazon Linux 2、RHEL 8/9、Rocky Linux 8/9

     ```
     $ sudo yum update -y
     ```
   + Ubuntu 和 Debian

     ```
     $ sudo apt-get update && sudo apt-get upgrade -y
     ```
   + SUSE Linux Enterprise

     ```
     $ sudo zypper update -y
     ```

1. 重新啟動執行個體並重新連線至其中。

1. 下載 EFA 軟體安裝檔案。軟體安裝檔案已封裝成壓縮 tarball (`.tar.gz`) 檔案。若要下載最新*穩定*版本，請使用下列命令：

   您也可以在之前的命令中以 `latest` 取代版本號碼，以取得最新版本。

   ```
   $ curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.48.0.tar.gz
   ```

1. (*選用*) 驗證 EFA tarball (`.tar.gz`) 檔案的真確性及完整性。

   我們建議您執行這項操作來確認軟體發布者的身分，並檢查檔案自發行以來並未遭到變更或損毀。如果您不想驗證 tarball 檔案，請略過此步驟。
**注意**  
或者，如果您偏好使用 MD5 或 SHA256 檢查總和來驗證 tarball 檔案，請參閱[使用檢查總和驗證 EFA 安裝程式](efa-verify.md)。

   1. 下載公有 GPG 金鑰並匯入至您的 keyring。

      ```
      $ wget https://efa-installer.amazonaws.com/aws-efa-installer.key && gpg --import aws-efa-installer.key
      ```

      命令應傳回金鑰值。請記下金鑰的值，因為下一個步驟將需要它。

   1. 驗證 GPG 金鑰的指紋。執行以下命令，並指定上一步驟中的金鑰值。

      ```
      $ gpg --fingerprint key_value
      ```

      命令應傳回與 `4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC` 相同的指紋。如果指紋不相符，請勿執行 EFA 安裝指令碼，並聯絡 支援。

   1. 下載簽章檔案並驗證 EFA tarball 檔案的簽章。

      ```
      $ wget https://efa-installer.amazonaws.com/aws-efa-installer-1.48.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.48.0.tar.gz.sig
      ```

      下面顯示了範例輸出。

      ```
      gpg: Signature made Wed 29 Jul 2020 12:50:13 AM UTC using RSA key ID DD2D3CCC
      gpg: Good signature from "Amazon EC2 EFA <ec2-efa-maintainers@amazon.com>"
      gpg: WARNING: This key is not certified with a trusted signature!
      gpg:          There is no indication that the signature belongs to the owner.
      Primary key fingerprint: 4E90 91BC BB97 A96B 26B1  5E59 A054 80B1 DD2D 3CCC
      ```

      如果結果包含`Good signature`，而指紋與上一個步驟中傳回的指紋相符，請繼續下一個步驟。如果指紋不相符，請勿執行 EFA 安裝指令碼，並聯絡 支援。

1. 從壓縮的 `.tar.gz` 檔案中解壓縮檔案，然後導覽至解壓縮的目錄。

   ```
   $ tar -xf aws-efa-installer-1.48.0.tar.gz && cd aws-efa-installer
   ```

1. (*選用*) 在安裝期間驗證個別套件簽章。

   從 EFA 安裝程式 1.48.0 開始，安裝程式包含 GPG 簽署的個別 RPM 和 DEB 套件。若要在安裝期間驗證每個個別套件的真實性和完整性，請使用 `--check-signatures`旗標。當您啟用此旗標時，安裝程式會先驗證所有套件簽章，而且只有在每個套件通過驗證時才會繼續安裝。如果任何套件驗證失敗，安裝程式會立即結束，而無需安裝任何項目。

   1. 下載 GPG 公有金鑰。

      ```
      $ wget https://efa-installer.amazonaws.com/aws-efa-installer.key
      ```

   1. 匯出金鑰路徑。然後，在下一個步驟中，將 附加`--check-signatures`到安裝命令，並使用 `sudo -E`而不是 `sudo` 來保留環境變數。

      ```
      $ export EFA_INSTALLER_KEY=$(pwd)/aws-efa-installer.key
      ```

   在 RPM 型系統上 (Amazon Linux、RHEL、Rocky Linux 和 SUSE)，安裝程式會使用 驗證每個 RPM`rpm --checksig`。在 DEB 型系統 (Ubuntu、Debian) 上，安裝程式會使用 GPG 簽章驗證來驗證每個 DEB。

   如果任何套件的驗證失敗，安裝會立即中止，保護您的系統免於損壞或惡意的套件。
**注意**  
`--check-signatures` 旗標為選用。如果沒有，安裝程式不會執行個別簽章驗證。

1. 安裝 EFA 軟體。根據使用案例而定，執行以下其中一個命令。
**注意**  
如果您已完成上一個設定套件簽章驗證的選用步驟，請附加`--check-signatures`至安裝命令並使用 `sudo -E`，而非 `sudo`。例如：`sudo -E ./efa_installer.sh -y --check-signatures`。
**注意**  
**EFA 不支援使用 SUSE Linux 的 NVIDIA GPUDirect**。如果您使用的是 SUSE Linux，您必須另外指定 `--skip-kmod` 選項來防止 kmod 安裝。根據預設，SUSE Linux 不允許樹狀結構外的核心模組。

------
#### [ Open MPI and Intel MPI ]

   如果您打算將 EFA 與 Open MPI 和 Intel MPI 搭配使用，您必須使用 Libfabric 和 Open MPI 安裝 EFA 軟體，且**必須完成步驟 5：安裝 Intel MPI**。

   若要使用 Libfabric 和 Open MPI 安裝 EFA 軟體，請執行下列命令。

**注意**  
從 EFA 1.30.0 開始，預設會同時安裝 Open MPI 4.1 和 Open MPI 5。您可以選擇是否指定您要安裝的 Open MPI 版本。若要僅安裝 Open MPI 4.1，請包含 `--mpi=openmpi4`。若僅要安裝 Open MPI 5，請包括 `--mpi=openmpi5`。若要同時安裝這兩種版本，請忽略 `--mpi` 選項。

   ```
   $ sudo ./efa_installer.sh -y
   ```

   Libfabric 會安裝到 `/opt/amazon/efa`。Open MPI 4`/opt/amazon/openmpi`.1 已安裝至 。Open MPI 5 會安裝到 `/opt/amazon/openmpi5`。

------
#### [ Open MPI only ]

   如果您打算將 EFA 與 Open MPI 搭配使用，您必須使用 Libfabric 和 Open MPI 安裝 EFA 軟體，且必須**跳過步驟 5：安裝 Intel MPI**。若要使用 Libfabric 和 Open MPI 安裝 EFA 軟體，請執行下列命令。

**注意**  
從 EFA 1.30.0 開始，預設會同時安裝 Open MPI 4.1 和 Open MPI 5。您可以選擇是否指定您要安裝的 Open MPI 版本。若要僅安裝 Open MPI 4.1，請包含 `--mpi=openmpi4`。若僅要安裝 Open MPI 5，請包括 `--mpi=openmpi5`。若要同時安裝這兩種版本，請忽略 `--mpi` 選項。

   ```
   $ sudo ./efa_installer.sh -y
   ```

   Libfabric 會安裝到 `/opt/amazon/efa`。Open MPI 4`/opt/amazon/openmpi`.1 已安裝至 。Open MPI 5 會安裝到 `/opt/amazon/openmpi5`。

------
#### [ Intel MPI only ]

   如果您打算只將 EFA 與 Intel MPI 搭配使用，您無需使用 Libfabric 和 Open MPI 即可安裝 EFA 軟體。在這種情況下，Intel MPI 會使用其內嵌 Libfabric。如果您選擇這麼做，您**必須完成步驟 5：安裝 Intel MPI**。

   若要在不使用 Libfabric 和 Open MPI 的情況下安裝 EFA 軟體，請執行下列命令。

   ```
   $ sudo ./efa_installer.sh -y --minimal
   ```

------

1. 如果 EFA 安裝程式提示您重新啟動執行個體，請執行這項操作，然後重新連線至執行個體。否則，請登出執行個體，然後重新登入以完成安裝。

1. 刪除未壓縮的 tarball 和 tarball 本身。否則，其中會包含在您建立的已啟用 EFA 的 AMI 中，從而增加其大小。

## 步驟 4：(*選用*) 啟用 Open MPI 5
<a name="efa-start-ompi5"></a>

**注意**  
只有在您打算使用 Open MPI 5 時，才執行此步驟。

從 EFA 1.30.0 開始，預設會同時安裝 Open MPI 4.1 和 Open MPI 5。或者，您可以選擇僅安裝 Open MPI 4.1 或 Open MPI 5。

如果您在**步驟 3：安裝 EFA 軟體**中選擇安裝且有意使用 Open MPI 5，則必須執行下列步驟以啟用 Open MPI 5。

**啟用 Open MPI 5**

1. 將 Open MPI 5 新增至 PATH 環境變數。

   ```
   $ module load openmpi5
   ```

1. 確認是否已啟用 Open MPI 5 以供使用。

   ```
   $ which mpicc
   ```

   此命令應會傳回 Open MPI 5 安裝目錄 - `/opt/amazon/openmpi5`。

1. (*選用*) 若要確保在每次執行個體啟動時，Open MPI 5 都會新增至 PATH 環境變數，請執行下列動作：

------
#### [ bash shell ]

   將 `module load openmpi5` 新增至 `/home/username/.bashrc` 和 `/home/username/.bash_profile`。

------
#### [ csh and tcsh shells ]

   將 `module load openmpi5` 新增至 `/home/username/.cshrc`。

------

如果您需要從 PATH 環境變數移除 Open MPI 5，請執行下列命令，並從 shell 啟動指令碼中移除該命令。

```
$ module unload openmpi5
```

## 步驟 5：(*選用*) 安裝 Intel MPI
<a name="efa-start-impi"></a>

**重要**  
只有在您打算使用 Intel MPI 時，才執行此步驟。如果您打算使用 Open MPI，請略過此步驟。

Intel MPI 需要額外的安裝和環境變數組態。

**先決條件**  
確保執行下列步驟的使用者具有 sudo 許可。

**安裝 Intel MPI**

1. 如要下載 Intel MPI 安裝指令碼，請執行下列步驟

   1. 請造訪 [Intel 網站](https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html#mpi)。

   1. 在該網頁的 **Intel MPI Library** 區段中，選擇 **Intel MPI Library for Linux** **Offline** 安裝程式。

1. 執行您在上一個步驟中下載的安裝指令碼。

   ```
   $ sudo bash installation_script_name.sh
   ```

1. 在安裝程式中，選擇 **Accept & install** (接受並安裝)。

1. 閱讀 Intel 改進計畫，選擇適當的選項，然後選擇 **Begin Installation** (開始安裝)。

1. 完成安裝時，請選擇 **Close (關閉)**。

1. 根據預設，Intel MPI 會使用其內嵌 (內部) Libfabric。您可以將 Intel MPI 設定為使用 EFA 安裝程式隨附的 LibFabric。通常，EFA 安裝程式隨附的 Libfabric 版本比 Intel MPI 版本更高。在某些情況下，EFA 安裝程式隨附的 Libfabric 比 Intel MPI 效能更佳。若要將 Intel MPI 設定為使用 EFA 安裝程式隨附的 Libfabric，請根據您的 shell 執行下列其中一項操作。

------
#### [ bash shells ]

   將以下陳述式新增至 `/home/username/.bashrc` 和 `/home/username/.bash_profile`。

   ```
   export I_MPI_OFI_LIBRARY_INTERNAL=0
   ```

------
#### [ csh and tcsh shells ]

   將以下陳述式新增至 `/home/username/.cshrc`。

   ```
   setenv I_MPI_OFI_LIBRARY_INTERNAL 0
   ```

------

1. 新增下列 **source** 命令到您的 shell 指令碼，從安裝目錄中獲取 `vars.sh` 的指令碼，從而在每次啟動執行個體時設定編譯器環境。根據 shell 而定，執行以下其中一個命令。

------
#### [ bash shells ]

   將以下陳述式新增至 `/home/username/.bashrc` 和 `/home/username/.bash_profile`。

   ```
   source /opt/intel/oneapi/mpi/latest/env/vars.sh
   ```

------
#### [ csh and tcsh shells ]

   將以下陳述式新增至 `/home/username/.cshrc`。

   ```
   source /opt/intel/oneapi/mpi/latest/env/vars.csh
   ```

------

1. 根據預設，如果因為設定錯誤而無法使用 EFA，Intel MPI 會預設使用 TCP/IP 網路堆疊，這可能會導致應用程式效能降低。透過將 `I_MPI_OFI_PROVIDER` 設定為 `efa`，可防止此情況發生。如果無法使用 EFA，這會導致 Intel MPI 失敗，並出現下列錯誤：

   ```
   Abort (XXXXXX) on node 0 (rank 0 in comm 0): Fatal error in PMPI_Init: OtherMPI error,
   MPIR_Init_thread (XXX)........:	
   MPID_Init (XXXX)..............:
   MPIDI_OFI_mpi_init_hook (XXXX):
   open_fabric (XXXX)............:
   find_provider (XXXX)..........:
   OFI fi_getinfo() failed (ofi_init.c:2684:find_provider:
   ```

   根據 shell 而定，執行以下其中一個命令。

------
#### [ bash shells ]

   將以下陳述式新增至 `/home/username/.bashrc` 和 `/home/username/.bash_profile`。

   ```
   export I_MPI_OFI_PROVIDER=efa
   ```

------
#### [ csh and tcsh shells ]

   將以下陳述式新增至 `/home/username/.cshrc`。

   ```
   setenv I_MPI_OFI_PROVIDER efa
   ```

------

1. 根據預設，Intel MPI 不會列印偵錯資訊。您可以指定不同的詳細資訊等級來控制偵錯資訊。可能的值 (依提供的詳細資訊量排序) 為：`0` (預設)、`1`、`2`、`3`、`4`、`5`。等級 `1` 和更高等級會列印 `libfabric version` 和 `libfabric provider`。使用 `libfabric version` 檢查 Intel MPI 使用的是內部 LibFabric 還是 EFA 安裝程式隨附的 LibFabric。如果它使用的是內部 Libfabric，則版本字尾為 `impi`。使用 `libfabric provider` 檢查 Intel MPI 是否的是 EFA 還是或 TCP/IP 網絡。如果使用的是 EFA，則值為 `efa`。如果使用的是 TCP/IP，則值為 `tcp;ofi_rxm`。

   若要啟用偵錯資訊，請根據您的 shell 執行以下其中一個命令。

------
#### [ bash shells ]

   將以下陳述式新增至 `/home/username/.bashrc` 和 `/home/username/.bash_profile`。

   ```
   export I_MPI_DEBUG=value
   ```

------
#### [ csh and tcsh shells ]

   將以下陳述式新增至 `/home/username/.cshrc`。

   ```
   setenv I_MPI_DEBUG value
   ```

------

1. 根據預設，Intel MPI 會使用作業系統的共用記憶體 (`shm`) 進行節點內通訊，並且僅將 Libfabric (`ofi`) 用於節點間通訊。通常，此組態可提供最佳效能。不過，在某些情況下，Intel MPI shm 結構可能會導致某些應用程式無限期中止。

   若要解決此問題，您可以強制 Intel MPI 使用 Libfabric 進行節點內和節點間通訊。為此，請根據您的 shell，執行以下其中一個命令。

------
#### [ bash shells ]

   將以下陳述式新增至 `/home/username/.bashrc` 和 `/home/username/.bash_profile`。

   ```
   export I_MPI_FABRICS=ofi
   ```

------
#### [ csh and tcsh shells ]

   將以下陳述式新增至 `/home/username/.cshrc`。

   ```
   setenv I_MPI_FABRICS ofi
   ```

------
**注意**  
EFA Libfabric 提供者會使用作業系統的共用記憶體進行節點內通訊。這表示將 `I_MPI_FABRICS` 設定為 `ofi` 可產生與預設 `shm:ofi` 組態類似的效能。

1. 登出執行個體，然後重新登入。

如果您不要再使用 Intel MPI，請從 shell 啟動指令碼中移除環境變數。

## 步驟 6：停用 ptrace 保護
<a name="efa-start-ptrace"></a>

為了改善 HPC 應用程式的效能，在相同執行個體上執行處理序時，Libfabric 會使用執行個體的本機記憶體進行處理序間通訊。

共用記憶體功能使用 Cross Memory Attach (CMA)，其未受 *ptrace 保護*支援。如果您使用的 Linux 發行套件依預設已啟用 ptrace 防護，例如 Ubuntu，您必須停用該保護。如果您的 Linux 發行套件依預設未啟用 ptrace 保護，請略過此步驟。

**停用 ptrace 保護**  
請執行下列其中一項：
+ 如果出於測試用途要暫時停用 ptrace 保護，請執行下列命令。

  ```
  $ sudo sysctl -w kernel.yama.ptrace_scope=0
  ```
+ 若要永久停用 ptrace 保護，請將 `kernel.yama.ptrace_scope = 0` 新增至 `/etc/sysctl.d/10-ptrace.conf`，並重新啟動執行個體。

## 步驟 7. 確認安裝
<a name="efa-start-test"></a>

**確認已成功安裝**

1. 若要確認已成功安裝 MPI，請執行下列命令：

   ```
   $ which mpicc
   ```
   + 若為 Open MPI，傳回的路徑應包括 `/opt/amazon/`
   + 若為 Intel MPI，傳回的路徑應包括 `/opt/intel/`。如果沒有得到預期輸出，請確保已獲取 Intel MPI `vars.sh` 指令碼。

1. 若要確認是否已成功安裝 EFA 軟體元件和 Libfabric，請執行下列命令。

   ```
   $ fi_info -p efa -t FI_EP_RDM
   ```

   此命令應該會傳回 Libfabric EFA 介面的相關資訊。以下範例顯示命令輸出。

   ```
   provider: efa
       fabric: EFA-fe80::94:3dff:fe89:1b70
       domain: efa_0-rdm
       version: 2.0
       type: FI_EP_RDM
       protocol: FI_PROTO_EFA
   ```

## 步驟 8：安裝 HPC 應用程式
<a name="efa-start-hpc-app"></a>

在暫時執行個體上安裝 HPC 應用程式。安裝程序依特定的 HPC 應用程式而異。如需詳細資訊，請參閱「Amazon Linux 2 使用者指南」**中的[在 AL2 執行個體上管理軟體](https://docs.aws.amazon.com/linux/al2/ug/managing-software.html)。

**注意**  
參考 HPC 應用程式的文件，以取得安裝指示。

## 步驟 9：建立已啟用 EFA 的 AMI
<a name="efa-start-ami"></a>

安裝所需的軟體元件之後，您需要建立 AMI，以重複用來啟動具備 EFA 功能的執行個體。

**從暫時執行個體建立 AMI**

1. 在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Instances** (執行個體)。

1. 選取您建立的暫時執行個體，然後選取 **Actions** (動作)、**Image** (映像)、**Create image** (建立映像)。

1. 對於 **Create image** (建立映像)，執行下列動作：

   1. 對於 **Image name** (映像名稱)，輸入 AMI 的描述性名稱。

   1. (選用) 對於 **Image description** (映像描述)，輸入 AMI 的簡短描述。

   1. 選擇**建立映像**。

1. 在導覽窗格中，選擇 **AMIs**。

1. 在清單中找出您建立的 AMI。等待狀態從`pending`變為`available`，再繼續進行下一個步驟。

## 步驟 10：在集群放置群組中啟動已啟用 EFA 的執行個體
<a name="efa-start-instances"></a>

使用具備 EFA 功能的 AMI (在**步驟 7** 中建立) 和具備 EFA 功能的安全群組 (在**步驟 1** 中建立)，在叢集置放群組中啟動具備 EFA 功能的執行個體。

**注意**  
在叢集置放群組中啟動具備 EFA 的執行個體並非絕對必要。不過，建議在叢集置放群組中執行具備 EFA 功能的執行個體，因為這樣會在單一可用區域的低延遲群組中啟動執行個體。
要確保在擴展叢集執行個體時容量可用，您可以為叢集置放群組建立容量保留。如需詳細資訊，請參閱[搭配使用容量保留與叢集置放群組](cr-cpg.md)。

**啟動執行個體**

1. 前往 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Instances** (執行個體)，接著選擇 **Launch Instances** (啟動執行個體) 來開啟新的啟動執行個體精靈。

1. (*選用*) 在 **Name and tags** (名稱和標籤) 區段中，為執行個體命名，例如，`EFA-instance`。該名稱將指派作為執行個體的資源標籤 (`Name=EFA-instance`)。

1. 在 **Application and OS Images** (應用程式和作業系統映像) 區段中，選取 **My AMIs (我的 AMI)**，接著選取您在前一個步驟中建立的 AMI。

1. 在 **Instance type** (執行個體類型) 區段中，選取[支援的執行個體類型](efa.md#efa-instance-types)。

1. 在 **Key pair** (金鑰對) 區段中，選取要用於執行個體的金鑰對。

1. 在 **Network settings** (網路設定) 區段，選擇 **Edit** (編輯)，接著執行下列動作：

   1. 對於 **Subnet (子網路)**，請選擇要在其中啟動執行個體的子網路。
**重要**  
您必須選取子網路。若您未選取子網路，便無法啟用 EFA 的執行個體。

   1. 針對 **Firewall (security groups)** (防火牆 (安全群組))，選取 **Select existing security group** (選取現有的安全群組)，接著選取您在前一個步驟中建立的安全群組。

   1. 展開**進階設定**區段。

      針對**網路介面 1**，選取**網路卡索引 = 0**、**裝置索引 = 0**，以及**介面類型 = EFA 搭配 ENA**。

      (*選用*) 如果您使用的是多卡執行個體類型，例如 `p4d.24xlarge` 或 `p5.48xlarge`，則針對所需的每個額外網路介面，選擇**新增網路介面**，針對**網路卡索引**，選擇下一個未使用的索引，然後選擇**裝置索引 = 1**，**介面類型 = EFA 搭配 ENA** **或僅限 EFA**。

1. (*選用*) 在**儲存**區段中，根據需求設定磁碟區。

1. 在**進階詳細資訊**區段中，針對 **配置群組名稱**，選取要在其中啟動執行個體的叢集置放群組。如果您需要建立新的叢集置放群組，請選取**建立新的配置群組**。

1. 在右邊的**摘要**面板，針對**執行個體的數目**，輸入要啟動的具備 EFA 功能的執行個體數量，接著選擇**啟動執行個體**。

## 步驟 11：終止暫時執行個體
<a name="efa-start-terminate"></a>

此時，您不再需要您在[步驟 2](#efa-start-tempinstance) 中啟動的執行個體。您可以終止執行個體，以停止產生費用。

**終止暫時執行個體**

1. 在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇**執行個體**。

1. 選取您建立的暫時執行個體，然後選擇**動作**、**執行個體狀態**、**終止 (刪除) 執行個體**。

1. 出現確認提示時，請選擇**終止 (刪除)**。

## 步驟 12：啟用無密碼 SSH
<a name="efa-start-passwordless"></a>

若要讓您的應用程式能夠跨越叢集中的所有執行個體執行，您必須啟用從領導節點到成員節點的無密碼 SSH 存取。領導節點是您在其中執行應用程式的執行個體。叢集中的其餘執行個體為成員節點。

**在叢集的執行個體之間啟用無密碼 SSH**

1. 選取叢集中的一個執行個體作為領導節點，並與它連線。

1. 在領導節點上停用 `strictHostKeyChecking` 並啟用 `ForwardAgent`。使用您偏好的文字編輯器開啟 `~/.ssh/config`，然後新增下列命令。

   ```
   Host *
       ForwardAgent yes
   Host *
       StrictHostKeyChecking no
   ```

1. 產生 RSA 金鑰對。

   ```
   $ ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
   ```

   在 `$HOME/.ssh/` 目錄中建立金鑰對。

1. 變更領導節點上私有金鑰的許可。

   ```
   $ chmod 600 ~/.ssh/id_rsa
   chmod 600 ~/.ssh/config
   ```

1. 使用您偏好的文字編輯器開啟 `~/.ssh/id_rsa.pub` 並複製該金鑰。

1. 對於叢集中的每個成員節點，執行以下操作：

   1. 連線到執行個體。

   1. 使用您偏好的文字編輯器開啟 `~/.ssh/authorized_keys`，然後新增您先前複製的公有金鑰。

1. 若要測試無密碼的 SSH 是否如預期運作，請連線至領導節點並執行下列命令。

   ```
   $ ssh member_node_private_ip
   ```

   您應該連線至成員節點，而不會提示您輸入金鑰或密碼。