

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

# 適用於 Amazon EC2 上的 AI/ML 和 HPC 工作負載的 Elastic Fabric Adapter
<a name="efa"></a>

Elastic Fabric Adapter (EFA) 是可連接到 Amazon EC2 執行個體的網路裝置，用以加速人工智慧 (AI)、機器學習 (ML) 和高效能運算 (HPC) 應用程式。EFA 可讓您實現內部部署的 AI/ML 或 HPC 叢集的應用程式效能，並具有 AWS 雲端提供的可擴展性、靈活性和彈性。

EFA 比雲端式 HPC 系統中傳統上使用的 TCP 傳輸，提供更低和更一致的延遲及更高的傳輸量。它可增強執行個體間通訊的效能，在擴展 HPC 和機器學習應用程式時不可或缺。它經過最佳化，可在現有的 AWS 網路基礎設施上運作，並且可以根據應用程式需求進行擴展。

EFA 與 Libfabric 整合，並支援適用於 AI 和 ML 應用程式的 Nvidia Collective Communications Library (NCCL) 和 NVIDIA Inference Xfer Library (NIXL)，以及適用於 HPC 應用程式的 Open MPI 4.1 和更新版本，以及 Intel MPI 2019 Update 5 和更新版本。NCCL 和 MPI 與 Libfabric 1.7.0 及更新版本整合。NIXL 與 Libfabric 1.21.0 及更新版本整合。

在擁有 Nitro 第 4 版及更新版本的大多數受支援執行個體類型上，EFA 支援 RDMA (遠端直接記憶體存取) 寫入。擁有 Nitro 第 4 版及更新版本的所有執行個體都支援 RDMA 讀取。如需詳細資訊，請參閱[支援的執行個體類型](#efa-instance-types)。

**Topics**
+ [EFA 基本概念](#efa-basics)
+ [支援的介面和程式庫](#efa-mpi)
+ [支援的執行個體類型](#efa-instance-types)
+ [支援的作業系統](#efa-os)
+ [EFA 限制](#efa-limits)
+ [EFA 定價](#efa-pricing)
+ [開始使用 EFA 和 MPI](efa-start.md)
+ [開始使用 EFA 和 NCCL](efa-start-nccl.md)
+ [EFA 和 NIXL 入門](efa-start-nixl.md)
+ [最大化網路頻寬](efa-acc-inst-types.md)
+ [建立和連接 EFA](create-efa.md)
+ [分離和刪除 EFA](detach-efa.md)
+ [監控 EFA](efa-working-monitor.md)
+ [驗證 EFA 安裝程式](efa-verify.md)
+ [版本備註](efa-changelog.md)

## EFA 基本概念
<a name="efa-basics"></a>

EFA 裝置可以透過兩種方式連接到 EC2 執行個體：

1. 使用傳統的 EFA 介面，也稱為 EFA 搭配 ENA，這會同時建立 EFA 裝置和 ENA 裝置。

1. 使用僅限 EFA 介面，僅建立 EFA 裝置。

EFA 裝置透過可擴展可靠資料包 (SRD) 通訊協定提供內建 OS-bypass 和擁塞控制等功能。EFA 裝置功能可實現低延遲、可靠的傳輸功能，讓 EFA 介面為 Amazon EC2 上的 HPC 和 ML 應用程式提供更好的應用程式效能。雖然 ENA 裝置提供傳統 IP 網路。

![\[將傳統 HPC 軟體堆疊與使用 EFA 的 HPC 軟體堆疊作對比。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/efa_stack.png)


傳統上，AI/ML 應用程式使用 NCCL 和 NIXL （用於分解推論）。HPC 應用程式使用訊息傳遞界面 (MPI) 與系統的網路傳輸界面。在 AWS 雲端中，這表示應用程式會與 NCCL、NIXL 或 MPI 連接，然後會使用作業系統的 TCP/IP 堆疊和 ENA 裝置驅動程式來啟用執行個體之間的網路通訊。

使用傳統 EFA (EFA 搭配 ENA) 或僅限 EFA 界面時，AI/ML 應用程式會使用 NCCL 和 NIXL （用於分解推論）。HPC 應用程式使用 MPI，直接與 Libfabric API 連接。Libfabric API 會繞過作業系統的核心，直接與 EFA 裝置通訊來將封包放到網路上。這減少了額外負荷，使 AI/ML 和 HPC 應用程式能夠更有效率地執行。

**注意**  
Libfabric 是 OpenFabrics Interfaces (OFI) 框架的核心元件，定義並匯出 OFI 的使用者空間 API。如需詳細資訊，請參閱 [Libfabric OpenFabrics](https://ofiwg.github.io/libfabric/) 網站。

### ENA、EFA 和僅限 EFA 網路介面之間的差異
<a name="efa-differences"></a>

Amazon EC2 提供兩種類型的網路介面：
+ **ENA** 介面提供支援 VPC IP 聯網所需的所有傳統 IP 聯網和路由功能。如需詳細資訊，請參閱[在 EC2 執行個體上使用 ENA 啟用增強型網路](enhanced-networking-ena.md)。
+ **EFA** (EFA 搭配 ENA) 介面提供用於 IP 聯網的 ENA 裝置和用於低延遲、高輸送量通訊的 EFA 裝置。
+ **僅 EFA** 介面僅支援 EFA 裝置功能，沒有傳統 IP 網路的 ENA 裝置。

下表提供 ENA、EFA 和僅限 EFA 網路介面的比較。


|  | ENA | EFA (EFA 搭配 ENA) | 僅限 EFA | 
| --- | --- | --- | --- | 
| 支援 IP 網路功能 | 是 | 是 | 否 | 
| 可以指派 IPv4 或 IPv6 地址 | 是 | 是 | 否 | 
| 可用作執行個體的主要網路介面 | 是 | 是 | 否 | 
| 計入執行個體的 ENI 連接限制 | 是 | 是 | 是 | 
| 執行個體類型支援 | 支援所有 Nitro 型執行個體類型 | [支援的執行個體類型](#efa-instance-types) | [支援的執行個體類型](#efa-instance-types) | 
| EC2 APIs 中的參數命名 | interface | efa | efa-only | 
| EC2 主控台中的欄位命名 | 沒有選取項目 | EFA 搭配 ENA | 僅限 EFA | 

## 支援的介面和程式庫
<a name="efa-mpi"></a>

EFA 支援下列介面和程式庫：
+ 開啟 MPI 4.1 和更新版本
+ Intel MPI 2019 Update 5 及更新版本
+ NVIDIA Collective Communications Library (NCCL) 2.4.2 和更新版本
+ NVIDIA Inference Xfer Library (NIXL) 1.0.0 及更新版本
+ AWS Neuron SDK 2.3 版及更新版本

## 支援的執行個體類型
<a name="efa-instance-types"></a>

下列所有執行個體類型都支援 EFA。此外，資料表還指示支援執行個體類型的 RDMA 讀取和 RDMA 寫入。

------
#### [ Nitro v6 ]


| 執行個體類型 | 支援 RDMA 讀取 | 支援 RDMA 寫入 | 
| --- |--- |--- |
| 一般用途 | 
| --- |
| m8a.48xlarge | Yes | Yes | 
| m8a.metal-48xl | Yes | Yes | 
| m8azn.24xlarge | Yes | Yes | 
| m8azn.metal-24xl | Yes | Yes | 
| m8gb.16xlarge | Yes | Yes | 
| m8gb.24xlarge | Yes | Yes | 
| m8gb.48xlarge | Yes | Yes | 
| m8gb.metal-24xl | Yes | Yes | 
| m8gb.metal-48xl | Yes | Yes | 
| m8gn.16xlarge | Yes | Yes | 
| m8gn.24xlarge | Yes | Yes | 
| m8gn.48xlarge | Yes | Yes | 
| m8gn.metal-24xl | Yes | Yes | 
| m8gn.metal-48xl | Yes | Yes | 
| m8i.48xlarge | Yes | Yes | 
| m8i.96xlarge | Yes | Yes | 
| m8i.metal-48xl | Yes | Yes | 
| m8i.metal-96xl | Yes | Yes | 
| m8id.48xlarge | Yes | Yes | 
| m8id.96xlarge | Yes | Yes | 
| m8id.metal-48xl | Yes | Yes | 
| m8id.metal-96xl | Yes | Yes | 
| 運算最佳化 | 
| --- |
| c8a.48xlarge | Yes | Yes | 
| c8a.metal-48xl | Yes | Yes | 
| c8gb.16xlarge | Yes | Yes | 
| c8gb.24xlarge | Yes | Yes | 
| c8gb.48xlarge | Yes | Yes | 
| c8gb.metal-24xl | Yes | Yes | 
| c8gb.metal-48xl | Yes | Yes | 
| c8gn.16xlarge | Yes | Yes | 
| c8gn.24xlarge | Yes | Yes | 
| c8gn.48xlarge | Yes | Yes | 
| c8gn.metal-24xl | Yes | Yes | 
| c8gn.metal-48xl | Yes | Yes | 
| c8i.48xlarge | Yes | Yes | 
| c8i.96xlarge | Yes | Yes | 
| c8i.metal-48xl | Yes | Yes | 
| c8i.metal-96xl | Yes | Yes | 
| c8id.48xlarge | Yes | Yes | 
| c8id.96xlarge | Yes | Yes | 
| c8id.metal-48xl | Yes | Yes | 
| c8id.metal-96xl | Yes | Yes | 
| 記憶體最佳化 | 
| --- |
| r8a.48xlarge | Yes | Yes | 
| r8a.metal-48xl | Yes | Yes | 
| r8gb.16xlarge | Yes | Yes | 
| r8gb.24xlarge | Yes | Yes | 
| r8gb.48xlarge | Yes | Yes | 
| r8gb.metal-24xl | Yes | Yes | 
| r8gb.metal-48xl | Yes | Yes | 
| r8gn.16xlarge | Yes | Yes | 
| r8gn.24xlarge | Yes | Yes | 
| r8gn.48xlarge | Yes | Yes | 
| r8gn.metal-24xl | Yes | Yes | 
| r8gn.metal-48xl | Yes | Yes | 
| r8i.48xlarge | Yes | Yes | 
| r8i.96xlarge | Yes | Yes | 
| r8i.metal-48xl | Yes | Yes | 
| r8i.metal-96xl | Yes | Yes | 
| r8id.48xlarge | Yes | Yes | 
| r8id.96xlarge | Yes | Yes | 
| r8id.metal-48xl | Yes | Yes | 
| r8id.metal-96xl | Yes | Yes | 
| x8aedz.24xlarge | Yes | Yes | 
| x8aedz.metal-24xl | Yes | Yes | 
| x8i.48xlarge | Yes | Yes | 
| x8i.64xlarge | Yes | Yes | 
| x8i.96xlarge | Yes | Yes | 
| x8i.metal-48xl | Yes | Yes | 
| x8i.metal-96xl | Yes | Yes | 
| 儲存優化 | 
| --- |
| i8ge.48xlarge | Yes | No | 
| i8ge.metal-48xl | Yes | No | 
| 加速運算 | 
| --- |
| g7e.8xlarge | Yes | Yes | 
| g7e.12xlarge | Yes | Yes | 
| g7e.24xlarge | Yes | Yes | 
| g7e.48xlarge | Yes | Yes | 
| p6-b200.48xlarge | Yes | Yes | 
| p6-b300.48xlarge | Yes | Yes | 
| 高效能運算 | 
| --- |
| hpc8a.96xlarge | Yes | Yes | 

------
#### [ Nitro v5 ]


| 執行個體類型 | 支援 RDMA 讀取 | 支援 RDMA 寫入 | 
| --- |--- |--- |
| 一般用途 | 
| --- |
| m8g.24xlarge | Yes | No | 
| m8g.48xlarge | Yes | No | 
| m8g.metal-24xl | Yes | No | 
| m8g.metal-48xl | Yes | No | 
| m8gd.24xlarge | No | No | 
| m8gd.48xlarge | No | No | 
| m8gd.metal-24xl | No | No | 
| m8gd.metal-48xl | No | No | 
| 運算最佳化 | 
| --- |
| c7gn.16xlarge | Yes | No | 
| c7gn.metal | Yes | No | 
| c8g.24xlarge | Yes | No | 
| c8g.48xlarge | Yes | No | 
| c8g.metal-24xl | Yes | No | 
| c8g.metal-48xl | Yes | No | 
| c8gd.24xlarge | No | No | 
| c8gd.48xlarge | No | No | 
| c8gd.metal-24xl | No | No | 
| c8gd.metal-48xl | No | No | 
| 記憶體最佳化 | 
| --- |
| r8g.24xlarge | No | No | 
| r8g.48xlarge | No | No | 
| r8g.metal-24xl | No | No | 
| r8g.metal-48xl | No | No | 
| r8gd.24xlarge | No | No | 
| r8gd.48xlarge | No | No | 
| r8gd.metal-24xl | No | No | 
| r8gd.metal-48xl | No | No | 
| x8g.24xlarge | No | No | 
| x8g.48xlarge | No | No | 
| x8g.metal-24xl | No | No | 
| x8g.metal-48xl | No | No | 
| 儲存優化 | 
| --- |
| i7ie.48xlarge | Yes | No | 
| i7ie.metal-48xl | Yes | No | 
| i8g.48xlarge | No | No | 
| i8g.metal-48xl | No | No | 
| 加速運算 | 
| --- |
| p5en.48xlarge | Yes | Yes | 
| p6e-gb200.36xlarge | Yes | Yes | 
| trn2.3xlarge | Yes | Yes | 
| trn2.48xlarge | Yes | Yes | 
| trn2u.48xlarge | Yes | Yes | 
| 高效能運算 | 
| --- |
| hpc7g.4xlarge | Yes | No | 
| hpc7g.8xlarge | Yes | No | 
| hpc7g.16xlarge | Yes | No | 

------
#### [ Nitro v4 ]


| 執行個體類型 | 支援 RDMA 讀取 | 支援 RDMA 寫入 | 
| --- |--- |--- |
| 一般用途 | 
| --- |
| m6a.48xlarge | Yes | Yes | 
| m6a.metal | Yes | Yes | 
| m6i.32xlarge | Yes | Yes | 
| m6i.metal | Yes | Yes | 
| m6id.32xlarge | Yes | Yes | 
| m6id.metal | Yes | Yes | 
| m6idn.32xlarge | Yes | Yes | 
| m6idn.metal | Yes | Yes | 
| m6in.32xlarge | Yes | Yes | 
| m6in.metal | Yes | Yes | 
| m7a.48xlarge | Yes | No | 
| m7a.metal-48xl | Yes | No | 
| m7g.16xlarge | Yes | No | 
| m7g.metal | Yes | No | 
| m7gd.16xlarge | Yes | No | 
| m7gd.metal | Yes | No | 
| m7i.48xlarge | Yes | No | 
| m7i.metal-48xl | Yes | No | 
| 運算最佳化 | 
| --- |
| c6a.48xlarge | Yes | Yes | 
| c6a.metal | Yes | Yes | 
| c6gn.16xlarge | Yes | Yes | 
| c6i.32xlarge | Yes | Yes | 
| c6i.metal | Yes | Yes | 
| c6id.32xlarge | Yes | Yes | 
| c6id.metal | Yes | Yes | 
| c6in.32xlarge | Yes | Yes | 
| c6in.metal | Yes | Yes | 
| c7a.48xlarge | Yes | No | 
| c7a.metal-48xl | Yes | No | 
| c7g.16xlarge | Yes | Yes | 
| c7g.metal | Yes | Yes | 
| c7gd.16xlarge | Yes | No | 
| c7gd.metal | Yes | No | 
| c7i.48xlarge | Yes | No | 
| c7i.metal-48xl | Yes | No | 
| 記憶體最佳化 | 
| --- |
| r6a.48xlarge | Yes | Yes | 
| r6a.metal | Yes | Yes | 
| r6i.32xlarge | Yes | Yes | 
| r6i.metal | Yes | Yes | 
| r6id.32xlarge | Yes | Yes | 
| r6id.metal | Yes | Yes | 
| r6idn.32xlarge | Yes | Yes | 
| r6idn.metal | Yes | Yes | 
| r6in.32xlarge | Yes | Yes | 
| r6in.metal | Yes | Yes | 
| r7a.48xlarge | No | No | 
| r7a.metal-48xl | No | No | 
| r7g.16xlarge | No | No | 
| r7g.metal | No | No | 
| r7gd.16xlarge | No | No | 
| r7gd.metal | No | No | 
| r7i.48xlarge | No | No | 
| r7i.metal-48xl | No | No | 
| r7iz.32xlarge | No | No | 
| r7iz.metal-32xl | No | No | 
| u7i-6tb.112xlarge | Yes | Yes | 
| u7i-8tb.112xlarge | Yes | Yes | 
| u7i-12tb.224xlarge | Yes | Yes | 
| u7in-16tb.224xlarge | Yes | Yes | 
| u7in-24tb.224xlarge | Yes | Yes | 
| u7in-32tb.224xlarge | Yes | Yes | 
| u7inh-32tb.480xlarge | Yes | Yes | 
| x2idn.32xlarge | Yes | Yes | 
| x2idn.metal | Yes | Yes | 
| x2iedn.32xlarge | Yes | Yes | 
| x2iedn.metal | Yes | Yes | 
| 儲存優化 | 
| --- |
| i4g.16xlarge | Yes | Yes | 
| i4i.32xlarge | Yes | Yes | 
| i4i.metal | Yes | Yes | 
| i7i.24xlarge | Yes | No | 
| i7i.48xlarge | Yes | No | 
| i7i.metal-48xl | Yes | No | 
| im4gn.16xlarge | Yes | Yes | 
| 加速運算 | 
| --- |
| f2.48xlarge | Yes | Yes | 
| g6.8xlarge | Yes | Yes | 
| g6.12xlarge | Yes | Yes | 
| g6.16xlarge | Yes | Yes | 
| g6.24xlarge | Yes | Yes | 
| g6.48xlarge | Yes | Yes | 
| g6e.8xlarge | Yes | Yes | 
| g6e.12xlarge | Yes | Yes | 
| g6e.16xlarge | Yes | Yes | 
| g6e.24xlarge | Yes | Yes | 
| g6e.48xlarge | Yes | Yes | 
| gr6.8xlarge | Yes | Yes | 
| p5.4xlarge | Yes | Yes | 
| p5.48xlarge | Yes | Yes | 
| p5e.48xlarge | Yes | Yes | 
| trn1.32xlarge | Yes | Yes | 
| trn1n.32xlarge | Yes | Yes | 
| 高效能運算 | 
| --- |
| hpc6a.48xlarge | Yes | Yes | 
| hpc6id.32xlarge | Yes | Yes | 
| hpc7a.12xlarge | Yes | No | 
| hpc7a.24xlarge | Yes | No | 
| hpc7a.48xlarge | Yes | No | 
| hpc7a.96xlarge | Yes | No | 

------
#### [ Nitro v3 ]


| 執行個體類型 | 支援 RDMA 讀取 | 支援 RDMA 寫入 | 
| --- |--- |--- |
| 一般用途 | 
| --- |
| m5dn.24xlarge | No | No | 
| m5dn.metal | No | No | 
| m5n.24xlarge | No | No | 
| m5n.metal | No | No | 
| m5zn.12xlarge | No | No | 
| m5zn.metal | No | No | 
| 運算最佳化 | 
| --- |
| c5n.9xlarge | No | No | 
| c5n.18xlarge | No | No | 
| c5n.metal | No | No | 
| 記憶體最佳化 | 
| --- |
| r5dn.24xlarge | No | No | 
| r5dn.metal | No | No | 
| r5n.24xlarge | No | No | 
| r5n.metal | No | No | 
| x2iezn.12xlarge | No | No | 
| x2iezn.metal | No | No | 
| 儲存優化 | 
| --- |
| i3en.12xlarge | No | No | 
| i3en.24xlarge | No | No | 
| i3en.metal | No | No | 
| 加速運算 | 
| --- |
| dl1.24xlarge | Yes | No | 
| dl2q.24xlarge | No | No | 
| g4dn.8xlarge | No | No | 
| g4dn.12xlarge | No | No | 
| g4dn.16xlarge | No | No | 
| g4dn.metal | No | No | 
| g5.8xlarge | No | No | 
| g5.12xlarge | No | No | 
| g5.16xlarge | No | No | 
| g5.24xlarge | No | No | 
| g5.48xlarge | No | No | 
| inf1.24xlarge | No | No | 
| p3dn.24xlarge | No | No | 
| p4d.24xlarge | Yes | No | 
| p4de.24xlarge | Yes | No | 
| vt1.24xlarge | No | No | 
| 上一代 | 
| --- |
| p3dn.24xlarge | No | No | 

------

**查看特定區域中支援 EFA 的可用執行個體類型**  
可用的執行個體類型因區域而異。若要查看區域中支援 EFA 的可用執行個體類型，請使用 [describe-instance-types](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) 命令，搭配 `--region` 參數。包含 `--filters` 參數以將結果範圍限定為支援 EFA 的執行個體類型，以及包含 `--query` 參數以將輸出範圍限定為 `InstanceType` 的值。

```
aws ec2 describe-instance-types \
    --region us-east-1  \
    --filters Name=network-info.efa-supported,Values=true \
    --query "InstanceTypes[*].[InstanceType]"  \
    --output text | sort
```

## 支援的作業系統
<a name="efa-os"></a>

作業系統支援因處理器類型而異。下表顯示受支援作業系統的規則套件可用性。


| 作業系統 | Intel/AMD (`x86_64`) 執行個體類型 | AWS Graviton (`arm64`) 執行個體類型 | 
| --- | --- | --- | 
| Amazon Linux 2023 | ✓ | ✓ | 
| Amazon Linux 2 | ✓ | ✓ | 
| RHEL 8 和 9 | ✓ | ✓ | 
| Debian 11、12 和 13 | ✓ | ✓ | 
| Rocky Linux 8 和 9 | ✓ | ✓ | 
| Ubuntu 22.04 和 24.04 | ✓ | ✓ | 
| SUSE Linux Enterprise 15 SP2 及更新版本 | ✓ | ✓ | 
| OpenSUSE Leap 15.5 及更新版本 | ✓ |  | 

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

## EFA 限制
<a name="efa-limits"></a>

EFA 具有下列限制：
+ 並非所有執行個體類型都支援 RDMA 寫入。如需詳細資訊，請參閱[支援的執行個體類型](#efa-instance-types)。
+ 目前不支援 P4d/P4de/DL1 執行個體與其他執行個體類型之間的 EFA 流量1。
+ [支援多個網路卡的執行個體類型](using-eni.md#network-cards)可以設定為每個網路卡一個 EFA。所有其他支援的執行個體類型每個執行個體只支援一個 EFA。
+ 在連接 EFA 時，不支援 `c7g.16xlarge`、`m7g.16xlarge` 和 `r7g.16xlarge` 專用執行個體和專用主機。
+ EFA 流量1無法跨可用區域或 VPC。這不適用於來自 EFA 介面 ENA 裝置的一般 IP 流量。
+ EFA 流量1不可路由傳送。來自 EFA 介面 ENA 裝置的正常 IP 流量仍然可以路由。
+ 不支援 EFA AWS Outposts。
+ 只有以 AWS Cloud Digital Interface 軟體開發套件 (AWS CDI SDK) 為基礎的應用程式，Windows 執行個體才支援 EFA (EFA 搭配 ENA) 介面的 EFA 裝置。如果您將 EFA (EFA 搭配 ENA) 介面連接至非 CDI SDK 型應用程式的 Windows 執行個體，則其可做為 ENA 介面運作，無需新增 EFA 裝置功能。Windows 或 Linux 上的 AWS CDI 應用程式不支援僅限 EFA 界面。如需詳細資訊，請參閱[AWS Cloud Digital Interface 軟體開發套件 (AWS CDI SDK) 使用者指南](https://docs.aws.amazon.com/CDI-SDK/latest/ug/what-is.html)。

1*EFA 流量*是指透過 EFA (EFA 搭配 ENA) 或僅限 EFA 介面的 EFA 裝置傳輸的流量。

## EFA 定價
<a name="efa-pricing"></a>

EFA 是選用的 Amazon EC2 聯網功能，您可以在任何支援的執行個體上啟用該功能，而無需額外付費。

# 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.47.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.47.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.47.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.47.0.tar.gz && cd aws-efa-installer
   ```

1. 安裝 EFA 軟體。根據使用案例而定，執行以下其中一個命令。
**注意**  
**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.1 已安裝至 `/opt/amazon/openmpi`。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.1 已安裝至 `/opt/amazon/openmpi`。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
   ```

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

# Amazon EC2 上的適用於 ML 工作負載的 EFA 和 NCCL 入門
<a name="efa-start-nccl"></a>

NVIDIA Collective Communications Library (NCCL) 是一種標準集體溝通常式程式庫，用於多個 GPU 橫跨單一節點或多個節點。NCCL 可與 EFA、Libfabric 和 MPI 一同使用來支援不同的機器學習工作負載。如需詳細資訊，請參閱 [NCCL](https://developer.nvidia.com/nccl) 網站。

**要求**
+ 僅支援加速運算 P 系列執行個體類型。如需詳細資訊，請參閱 [ Amazon EC2 加速運算執行個體](https://docs.aws.amazon.com/ec2/latest/instancetypes/ac.html#ac-sizes)。
+ 僅支援 Amazon Linux 2023、Amazon Linux 2、Ubuntu 24.04 和 Ubuntu 22.04 基本 AMI。
+ EFA 僅支援 NCCL 2.4.2 和更新版本。

如需使用 搭配 EFA 和 NCCL 執行機器學習工作負載的詳細資訊 AWS 深度學習 AMIs，請參閱《 *AWS 深度學習 AMIs 開發人員指南*》中的[在 DLAMI 上使用 EFA](https://docs.aws.amazon.com/dlami/latest/devguide/tutorial-efa-using.html)。

**Topics**
+ [步驟 1：準備具備 EFA 功能的安全群組](#nccl-start-base-setup)
+ [步驟 2：啟動暫時執行個體](#nccl-start-base-temp)
+ [步驟 3：安裝 Nvidia GPU 驅動程式、Nvidia CUDA 工具組和 cuDNN](#nccl-start-base-drivers)
+ [步驟 4：安裝 GDRY](#nccl-start-base-gdrcopy)
+ [步驟 5：安裝 EFA 軟體](#nccl-start-base-enable)
+ [步驟 6：安裝 NCCL](#nccl-start-base-nccl)
+ [步驟 7：安裝 NCCL Test](#nccl-start-base-tests)
+ [步驟 8：測試您的 EFA 和 NCCL 組態](#nccl-start-base-test)
+ [步驟 9：安裝您的機器學習應用程式](#nccl-start-base-app)
+ [步驟 10：建立 EFA 和 NCCL 啟用的 AMI](#nccl-start-base-ami)
+ [步驟 11：終止暫時執行個體](#nccl-start-base-terminate)
+ [步驟 12：在叢集置放群組中啟動 EFA 和具備 NCCL 功能的執行個體](#nccl-start-base-cluster)
+ [步驟 13：啟用無密碼 SSH](#nccl-start-base-passwordless)

## 步驟 1：準備具備 EFA 功能的安全群組
<a name="nccl-start-base-setup"></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="nccl-start-base-temp"></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. 在**應用程式和作業系統映像**區段中，為其中一個支援的作業系統選取 AMI。

1. 在**執行個體類型**區段中，選取支援的執行個體類型。

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. 在**儲存**區段中，根據需求設定磁碟區。
**注意**  
您必須為 Nvidia CUDA 工具組佈建額外的 10 到 20 GitB 儲存空間。如果您沒有佈建足夠的儲存空間，您會在嘗試安裝 Nvidia 驅動程式和 CUDA 工具組時，收到 `insufficient disk space` 錯誤。

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

## 步驟 3：安裝 Nvidia GPU 驅動程式、Nvidia CUDA 工具組和 cuDNN
<a name="nccl-start-base-drivers"></a>

------
#### [ Amazon Linux 2023 and Amazon Linux 2 ]

**安裝 Nvidia GPU 驅動程式、Nvidia CUDA 工具組和 cuDNN**

1. 為確保所有軟體套件皆為最新版本，請對您的執行個體執行快速軟體更新。

   ```
   $ sudo yum upgrade -y && sudo reboot
   ```

   重新啟動執行個體後，請重新與它連線。

1. 請安裝 Nvidia GPU 驅動程式和 Nvidia CUDA 工具組需要的公用程式。

   ```
   $ sudo yum groupinstall 'Development Tools' -y
   ```

1. 停用 `nouveau` 開放原始碼驅動程式。

   1. 針對您目前執行的核心版本，安裝需要的公用程式和核心標頭套件。

      ```
      $ sudo yum install -y wget kernel-devel-$(uname -r) kernel-headers-$(uname -r)
      ```

   1. 新增 `nouveau` 至 `/etc/modprobe.d/blacklist.conf `拒絕清單檔案。

      ```
      $ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
      blacklist vga16fb
      blacklist nouveau
      blacklist rivafb
      blacklist nvidiafb
      blacklist rivatv
      EOF
      ```

   1. 將 `GRUB_CMDLINE_LINUX="rdblacklist=nouveau"` 附加至 `grub` 檔案並重建 Grub 組態。

      ```
      $ echo 'GRUB_CMDLINE_LINUX="rdblacklist=nouveau"' | sudo tee -a /etc/default/grub \
      && sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      ```

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

1. 準備所需的儲存庫

   1. 啟用 EPEL 儲存庫並將分佈設定為 `rhel7`。

      ```
      $ sudo amazon-linux-extras install epel \
      && distribution='rhel7'
      ```

   1. 設定 CUDA 網路儲存庫並更新儲存庫快取。

      ```
      $ ARCH=$( /bin/arch ) \
      && sudo yum-config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/$distribution/${ARCH}/cuda-$distribution.repo \
      && sudo yum clean expire-cache
      ```

   1. (*僅限核心版本 5.10*) 唯有當您使用 Amazon Linux 2 搭配核心版本 5.10 時，才執行下列步驟。如果您是使用 Amazon Linux 2 搭配核心版本 4.12，請跳過下列步驟。若要檢查核心版本，請執行 **uname -r**。

      1. 建立名為 `/etc/dkms/nvidia.conf` 的 Nvidia 驅動程式組態檔案。

         ```
         $ sudo mkdir -p /etc/dkms \
         && echo "MAKE[0]=\"'make' -j2 module SYSSRC=\${kernel_source_dir} IGNORE_XEN_PRESENCE=1 IGNORE_PREEMPT_RT_PRESENCE=1 IGNORE_CC_MISMATCH=1 CC=/usr/bin/gcc10-gcc\"" | sudo tee /etc/dkms/nvidia.conf
         ```

      1. (僅限 `p4d.24xlarge` 和 `p5.48xlarge`) 複製 Nvidia 驅動程序組態檔案。

         ```
         $ sudo cp /etc/dkms/nvidia.conf /etc/dkms/nvidia-open.conf
         ```

1. 安裝 Nvidia GPU 驅動程式、NVIDIA CUDA 工具組和 cuDNN。

   ```
   $ sudo yum clean all \
   && sudo yum -y install nvidia-driver-latest-dkms \
   && sudo yum -y install cuda-drivers-fabricmanager cuda libcudnn8-devel
   ```

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

1. (僅限 `p4d.24xlarge` 和 `p5.48xlarge`) 啟動 Nvidia Fabric Manager 服務，並確保它會在執行個體啟動時自動啟動。NV Switch Management 需要使用 Nvidia Fabric Manager。

   ```
   $ sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
   ```

1. 確認每次執行個體啟動時都已設定 CUDA 路徑。
   + 針對 *bash* shell，新增以下陳述式到 `/home/username/.bashrc` 和 `/home/username/.bash_profile`。

     ```
     export PATH=/usr/local/cuda/bin:$PATH
     export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```
   + 針對 *tcsh* shell，新增以下陳述式到 `/home/username/.cshrc`。

     ```
     setenv PATH=/usr/local/cuda/bin:$PATH
     setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```

1. 若要確認 Nvidia GPU 驅動程式正確運作，請執行下列命令。

   ```
   $ nvidia-smi -q | head
   ```

   命令應該回傳 Nvidia GPU、Nvidia GPU 驅動程式和 Nvidia CUDA 工具組的資訊。

------
#### [ Ubuntu 24.04 and Ubuntu 22.04 ]

**安裝 Nvidia GPU 驅動程式、Nvidia CUDA 工具組和 cuDNN**

1. 為確保所有軟體套件皆為最新版本，請對您的執行個體執行快速軟體更新。

   ```
   $ sudo apt-get update && sudo apt-get upgrade -y
   ```

1. 請安裝 Nvidia GPU 驅動程式和 Nvidia CUDA 工具組需要的公用程式。

   ```
   $ sudo apt-get update && sudo apt-get install build-essential -y
   ```

1. 若要使用 Nvidia GPU 驅動程式，您必須先停用 `nouveau` 開源驅動程式。

   1. 針對您目前執行的核心版本，安裝需要的公用程式和核心標頭套件。

      ```
      $ sudo apt-get install -y gcc make linux-headers-$(uname -r)
      ```

   1. 新增 `nouveau` 至 `/etc/modprobe.d/blacklist.conf `拒絕清單檔案。

      ```
      $ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
      blacklist vga16fb
      blacklist nouveau
      blacklist rivafb
      blacklist nvidiafb
      blacklist rivatv
      EOF
      ```

   1. 使用您偏好的文字編輯器開啟 `/etc/default/grub`，然後新增下列命令。

      ```
      GRUB_CMDLINE_LINUX="rdblacklist=nouveau"
      ```

   1. 重建 Grub 組態。

      ```
      $ sudo update-grub
      ```

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

1. 新增 CUDA 儲存庫並安裝 Nvidia GPU 驅動程式、NVIDIA CUDA 工具組和 cuDNN。
   + `p3dn.24xlarge`

     ```
     $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub \
     && wget -O /tmp/deeplearning.deb http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb \
     && sudo dpkg -i /tmp/deeplearning.deb \
     && wget -O /tmp/cuda.pin https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin \
     && sudo mv /tmp/cuda.pin /etc/apt/preferences.d/cuda-repository-pin-600 \
     && sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub \
     && sudo add-apt-repository 'deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /' \
     && sudo apt update \
     && sudo apt install nvidia-dkms-535 \
     && sudo apt install -o Dpkg::Options::='--force-overwrite' cuda-drivers-535 cuda-toolkit-12-3 libcudnn8 libcudnn8-dev -y
     ```
   + `p4d.24xlarge` 和 `p5.48xlarge`

     ```
     $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub \
     && wget -O /tmp/deeplearning.deb http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb \
     && sudo dpkg -i /tmp/deeplearning.deb \
     && wget -O /tmp/cuda.pin https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin \
     && sudo mv /tmp/cuda.pin /etc/apt/preferences.d/cuda-repository-pin-600 \
     && sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub \
     && sudo add-apt-repository 'deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /' \
     && sudo apt update \
     && sudo apt install nvidia-kernel-open-535 \
     && sudo apt install -o Dpkg::Options::='--force-overwrite' cuda-drivers-535 cuda-toolkit-12-3 libcudnn8 libcudnn8-dev -y
     ```

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

1. (僅限 `p4d.24xlarge` 和 `p5.48xlarge`) 安裝 Nvidia Fabric Manager。

   1. 您安裝的 Nvidia Fabric Manager 版本必須與您在上一個步驟中安裝的 Nvidia 核心模組版本一致。

      執行以下命令來判斷 Nvidia 核心模組的版本。

      ```
      $ cat /proc/driver/nvidia/version | grep "Kernel Module"
      ```

      以下為範例輸出。

      ```
      NVRM version: NVIDIA UNIX x86_64 Kernel Module  450.42.01  Tue Jun 15 21:26:37 UTC 2021
      ```

      在上述範例中，已安裝核心模組主要版本 `450`。這表示您需要安裝 Nvidia Fabric Manager 版本 `450`。

   1. 安裝 Nvidia Fabric Manager。執行以下命令，並指定在上一步驟中使用的主要版本。

      ```
      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-major_version_number
      ```

      例如，如果已安裝核心模組的主要版本 `450`，請使用下列命令來安裝同樣版本的 Nvidia Fabric Manager。

      ```
      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-450
      ```

   1. 啟動服務，並確保服務會在執行個體啟動時自動啟動。NV Switch Management 需要使用 Nvidia Fabric Manager。

      ```
      $ sudo systemctl start nvidia-fabricmanager && sudo systemctl enable nvidia-fabricmanager
      ```

1. 確認每次執行個體啟動時都已設定 CUDA 路徑。
   + 針對 *bash* shell，新增以下陳述式到 `/home/username/.bashrc` 和 `/home/username/.bash_profile`。

     ```
     export PATH=/usr/local/cuda/bin:$PATH
     export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```
   + 針對 *tcsh* shell，新增以下陳述式到 `/home/username/.cshrc`。

     ```
     setenv PATH=/usr/local/cuda/bin:$PATH
     setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```

1. 若要確認 Nvidia GPU 驅動程式正確運作，請執行下列命令。

   ```
   $ nvidia-smi -q | head
   ```

   命令應該回傳 Nvidia GPU、Nvidia GPU 驅動程式和 Nvidia CUDA 工具組的資訊。

------

## 步驟 4：安裝 GDRY
<a name="nccl-start-base-gdrcopy"></a>

安裝 GDRCopy 以提高 Libfabric 的效能。如需更多關於 GDRCopy 的詳細資訊，請參閱 [GDRCopy 儲存庫](https://github.com/NVIDIA/gdrcopy)。

------
#### [ Amazon Linux 2023 and Amazon Linux 2 ]

**若要安裝 GDRCopy**

1. 安裝所需的依存項目。

   ```
   $ sudo yum -y install dkms rpm-build make check check-devel subunit subunit-devel
   ```

1. 下載並解壓縮 GDRCopy 套件。

   ```
   $ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.4.tar.gz \
   && tar xf v2.4.tar.gz ; cd gdrcopy-2.4/packages
   ```

1. 建立 GDRCopy RPM 套件。

   ```
   $ CUDA=/usr/local/cuda ./build-rpm-packages.sh
   ```

1. 安裝 GDRCopy RPM 套件。

   ```
   $ sudo rpm -Uvh gdrcopy-kmod-2.4-1dkms.noarch*.rpm \
   && sudo rpm -Uvh gdrcopy-2.4-1.x86_64*.rpm \
   && sudo rpm -Uvh gdrcopy-devel-2.4-1.noarch*.rpm
   ```

------
#### [ Ubuntu 24.04 and Ubuntu 22.04 ]

**若要安裝 GDRCopy**

1. 安裝所需的依存項目。

   ```
   $ sudo apt -y install build-essential devscripts debhelper check libsubunit-dev fakeroot pkg-config dkms
   ```

1. 下載並解壓縮 GDRCopy 套件。

   ```
   $ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.4.tar.gz \
   && tar xf v2.4.tar.gz \
   && cd gdrcopy-2.4/packages
   ```

1. 建立 GDRCopy RPM 套件。

   ```
   $ CUDA=/usr/local/cuda ./build-deb-packages.sh
   ```

1. 安裝 GDRCopy RPM 套件。

   ```
   $ sudo dpkg -i gdrdrv-dkms_2.4-1_amd64.*.deb \
   && sudo dpkg -i libgdrapi_2.4-1_amd64.*.deb \
   && sudo dpkg -i gdrcopy-tests_2.4-1_amd64.*.deb \
   && sudo dpkg -i gdrcopy_2.4-1_amd64.*.deb
   ```

------

## 步驟 5：安裝 EFA 軟體
<a name="nccl-start-base-enable"></a>

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

**安裝 EFA 軟體**

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

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

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

   ```
   $ curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.47.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.47.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.47.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.47.0.tar.gz && cd aws-efa-installer
   ```

1. 執行 EFA 軟體安裝指令碼。
**注意**  
從 EFA 1.30.0 開始，預設會同時安裝 Open MPI 4.1 和 Open MPI 5。除非您需要 Open MPI 5，否則我們建議您僅安裝 Open MPI 4.1。下列命令只會安裝 Open MPI 4.1。如果您想要安裝 Open MPI 4.1 和 Open MPI 5，請移除 `--mpi=openmpi4`。

   ```
   $ sudo ./efa_installer.sh -y --mpi=openmpi4
   ```

   **Libfabric** 安裝在 `/opt/amazon/efa` 目錄中。**aws-ofi-nccl 外掛程式**安裝在 `/opt/amazon/ofi-nccl` 目錄中。**Open MPI** 安裝在 `/opt/amazon/openmpi` 目錄中。

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

1. 確認已成功安裝 EFA 軟體元件。

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

   此命令應該會傳回 Libfabric EFA 介面的相關資訊。以下範例顯示命令輸出。
   + `p3dn.24xlarge` 具有單一網路介面

     ```
     provider: efa
     fabric: EFA-fe80::94:3dff:fe89:1b70
     domain: efa_0-rdm
     version: 2.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     ```
   + 具有多個網路介面的 `p4d.24xlarge` 和 `p5.48xlarge`

     ```
     provider: efa
     fabric: EFA-fe80::c6e:8fff:fef6:e7ff
     domain: efa_0-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::c34:3eff:feb2:3c35
     domain: efa_1-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::c0f:7bff:fe68:a775
     domain: efa_2-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::ca7:b0ff:fea6:5e99
     domain: efa_3-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     ```

## 步驟 6：安裝 NCCL
<a name="nccl-start-base-nccl"></a>

安裝 NCCL。如需更多關於 NCCL 詳細資訊，請參閱 [NCCL 存放庫](https://github.com/NVIDIA/nccl)。

**若要安裝 NCCL**

1. 請前往 `/opt` 目錄。

   ```
   $ cd /opt
   ```

1. 複製官方的 NCCL 存放庫至執行個體，並導覽至本地複製的存放庫。

   ```
   $ sudo git clone https://github.com/NVIDIA/nccl.git -b v2.23.4-1 && cd nccl
   ```

1. 建立並安裝 NCCL 並指定 CUDA 安裝目錄。

   ```
   $ sudo make -j src.build CUDA_HOME=/usr/local/cuda
   ```

## 步驟 7：安裝 NCCL Test
<a name="nccl-start-base-tests"></a>

安裝 NCCL test。NCCL test 可讓您確認 NCCL 已正確安裝，並如預期中執行。如需更多關於 NCCL test 的詳細資訊，請參閱 [nccl-test 存放庫](https://github.com/NVIDIA/nccl-tests)。

**若要安裝 NCCL test**

1. 導覽至您的主目錄。

   ```
   $ cd $HOME
   ```

1. 複製官方的 nccl-tests 存放庫至執行個體，並導覽至本地複製的存放庫。

   ```
   $ git clone https://github.com/NVIDIA/nccl-tests.git && cd nccl-tests
   ```

1. 新增 Libfabric 目錄至 `LD_LIBRARY_PATH` 變數。
   + Amazon Linux 2023 和 Amazon Linux 2

     ```
     $ export LD_LIBRARY_PATH=/opt/amazon/efa/lib64:$LD_LIBRARY_PATH
     ```
   + Ubuntu 24.04 和 Ubuntu 22.04

     ```
     $ export LD_LIBRARY_PATH=/opt/amazon/efa/lib:$LD_LIBRARY_PATH
     ```

1. 安裝 NCCL test 並指定 MPI、NCCL 和 CUDA 安裝目錄。

   ```
   $ make MPI=1 MPI_HOME=/opt/amazon/openmpi NCCL_HOME=/opt/nccl/build CUDA_HOME=/usr/local/cuda
   ```

## 步驟 8：測試您的 EFA 和 NCCL 組態
<a name="nccl-start-base-test"></a>

執行測試以確保已對 EFA 和 NCCL 正確設定暫時執行個體。

**若要測試您的 EFA 和 NCCL 組態**

1. 建立主機檔案指定要執行測試的主機。下列命另建立名稱為 `my-hosts` 的主機檔案，包含執行個體本身的參考資料。

------
#### [ IMDSv2 ]

   ```
   [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
   && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/local-ipv4 >> my-hosts
   ```

------
#### [ IMDSv1 ]

   ```
   [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-ipv4 >> my-hosts
   ```

------

1. 執行測試並指定主機檔案 (`--hostfile`) 以及要使用的 GPU 數量 (`-n`)。下列命令在執行個體本身為 8 GPU，和下列指定的環境變數上執行 `all_reduce_perf` 測試。
   + `FI_EFA_USE_DEVICE_RDMA=1`—(僅限 `p4d.24xlarge`) 使用裝置的 RDMA 功能進行單面和雙面傳輸。
   + `NCCL_DEBUG=INFO` - 啟用詳細的除錯輸出。您也可以在測試開始時指定 `VERSION` 來列印只有 NCCL 版本，或 `WARN` 只接收錯誤訊息。

   如需更多關於 NCCL 測試引數的詳細資訊，請參閱官方 nccl-test 存放庫中的 [NCCL Test README](https://github.com/NVIDIA/nccl-tests/blob/master/README.md)。
   + `p3dn.24xlarge`

     ```
     $ /opt/amazon/openmpi/bin/mpirun \
     -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/amazon/ofi-nccl/lib:$LD_LIBRARY_PATH \
     -x NCCL_DEBUG=INFO \
     --hostfile my-hosts -n 8 -N 8 \
     --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \
     $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100
     ```
   + `p4d.24xlarge` 和 `p5.48xlarge`

     ```
     $ /opt/amazon/openmpi/bin/mpirun \
     -x FI_EFA_USE_DEVICE_RDMA=1 \
     -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/amazon/ofi-nccl/lib:$LD_LIBRARY_PATH \
     -x NCCL_DEBUG=INFO \
     --hostfile my-hosts -n 8 -N 8 \
     --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \
     $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100
     ```

1. 列印 `NCCL_DEBUG` 記錄時，您可以確認 EFA 是積極作為 NCCL 的基礎提供者。

   ```
   ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Selected Provider is efa*
   ```

   使用 `p4d.24xlarge` 執行個體時會顯示下列其他資訊。

   ```
   ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Running on P4d platform, Setting NCCL_TOPO_FILE environment variable to /home/ec2-user/install/plugin/share/aws-ofi-nccl/xml/p4d-24xl-topo.xml
   ```

## 步驟 9：安裝您的機器學習應用程式
<a name="nccl-start-base-app"></a>

在暫時執行個體上安裝機器學習應用程式。安裝程序依特定的機器學習應用程式而異。如需有關在您的 Linux 執行個體上安裝軟體的詳細資訊，請參閱[在您的 Amazon Linux 2 執行個體上管理軟體](https://docs.aws.amazon.com/linux/al2/ug/managing-software.html)。

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

## 步驟 10：建立 EFA 和 NCCL 啟用的 AMI
<a name="nccl-start-base-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`，再繼續進行下一個步驟。

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

此時，您不再需要您啟動的暫時執行個體。您可以終止執行個體，以停止產生費用。

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

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

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

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

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

## 步驟 12：在叢集置放群組中啟動 EFA 和具備 NCCL 功能的執行個體
<a name="nccl-start-base-cluster"></a>

使用具備 EFA 功能的 AMI 和具備 EFA 功能的安全群組，在叢集置放群組中啟動具備 EFA 和 NCCL 功能的執行個體。

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

------
#### [ New console ]

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

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** (執行個體類型) 區段中，選取 `p3dn.24xlarge` 或者 `p4d.24xlarge`。

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 eith ENA** 或**僅限 EFA**。

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

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

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

------
#### [ Old console ]

**在叢集置放群組中啟動具備 EFA 和 NCCL 功能的執行個體**

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

1. 選擇 **Launch Instance (啟動執行個體)**。

1. 在 **Choose an AMI** (選取 AMI) 頁面上，選取 **My AMIs** (我的 AMI)，找出您之前建立的 AMI，然後選取 **Select** (選取)。

1. 在 **Choose an Instance Type** (選取執行個體類型) 頁面上，選取 **p3dn.24xlarge**，然後選取 **Next: Configure Instance Details** (下一步：設定執行個體詳細資訊)。

1. 在 **Configure Instance Details (設定執行個體詳細資訊)** 頁面上，執行下列操作：

   1. 對於 **Number of instances** (執行個體的數目)，輸入要啟動的具備 EFA 和 NCCL 功能的執行個體數。

   1. 對於 **Network** (網路) 和 **Subnet** (子網路)，選取要在其中啟動執行個體的 VPC 和子網路。

   1. 對於 **Placement group (置放群組)**，選取 **Add instance to placement group (將執行個體新增至置放群組)**。

   1. 對於 **Placement group name** (置放群組名稱)，選取 **Add to a new placement group** (新增至新的置放群組)，然後輸入置放群組的描述性名稱。然後為 **Placement group strategy** (置放群組策略) 選取 **cluster** (叢集)。

   1. 對於 **EFA**，選擇 **Enable (啟用)**。

   1. 在 **Network Interfaces** (網路介面) 區段中，針對裝置 **eth0**，選擇 **New network interface** (新網路介面)。您可以選擇性指定一個主要 IPv4 地址，以及一或多個次要 IPv4 地址。如果您在有相關聯 IPv6 CIDR 區塊的執行個體中啟動執行個體，您可以選擇性指定一個主要 IPv6 地址，以及一或多個次要 IPv6 地址。

   1. 選擇 **Next: Add Storage (下一步：新增儲存體)**。

1. 在 **Add Storage** (新增儲存體) 頁面上，除了 AMI 指定的磁碟區 (例如根設備磁碟區)，指定要連接到執行個體的磁碟區。然後選擇 **Next: Add Tags (下一步：新增標籤)**。

1. 在 **Add Tags (新增標籤)** 頁面上，為執行個體指定標籤 (例如使用者易記的名稱)，然後選擇 **Next: Configure Security Group (下一步：設定安全群組)**。

1. 在 **Configure Security Group** (設定安全群組) 頁面上，針對 **Assign a security group** (指派安全群組)，選取 **Select an existing security group** (選取現有安全群組)，然後選取您之前建立的安全群組。

1. 選擇 **Review and Launch** (檢閱和啟動)。

1. 在 **Review Instance Launch (檢閱執行個體啟動)** 頁面上，檢閱設定，然後選擇 **Launch (啟動)**，以選擇金鑰對並啟動執行個體。

------

## 步驟 13：啟用無密碼 SSH
<a name="nccl-start-base-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
   ```

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

# 開始使用適用於 Amazon EC2 上推論工作負載的 EFA 和 NIXL
<a name="efa-start-nixl"></a>

NVIDIA Inference Xfer Library (NIXL) 是一種高輸送量、低延遲的通訊程式庫，專為分解的推論工作負載而設計。NIXL 可與 EFA 和 Libfabric 搭配使用，以支援預先填充和解碼節點之間的 KV-cache 傳輸，並可在各種儲存層之間實現高效的 KV-cache 移動。如需詳細資訊，請參閱 [NIXL](https://github.com/ai-dynamo/nixl) 網站。

**要求**
+ 僅支援 Ubuntu 24.04 和 Ubuntu 22.04 基本 AMIs。
+ EFA 僅支援 NIXL 1.0.0 及更新版本。

**Topics**

## 步驟 1：準備具備 EFA 功能的安全群組
<a name="nixl-start-base-setup"></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="nixl-start-base-temp"></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. 在**應用程式和作業系統映像**區段中，為其中一個支援的作業系統選取 AMI。您也可以在 DLAMI [版本備註頁面上選取支援的 DLAMI](https://docs.aws.amazon.com/dlami/latest/devguide/appendix-ami-release-notes)。

1. 在**執行個體類型**區段中，選取支援的執行個體類型。

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. 在**儲存**區段中，根據需求設定磁碟區。
**注意**  
您必須為 Nvidia CUDA 工具組佈建額外的 10 到 20 GitB 儲存空間。如果您沒有佈建足夠的儲存空間，您會在嘗試安裝 Nvidia 驅動程式和 CUDA 工具組時，收到 `insufficient disk space` 錯誤。

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

**重要**  
如果您的 AMI 已包含 Nvidia GPU 驅動程式、CUDA 工具組和 cuDNN，或者您使用非 GPU 執行個體，請略過步驟 3。

## 步驟 3：安裝 Nvidia GPU 驅動程式、Nvidia CUDA 工具組和 cuDNN
<a name="nixl-start-base-drivers"></a>

**安裝 Nvidia GPU 驅動程式、Nvidia CUDA 工具組和 cuDNN**

1. 為確保所有軟體套件皆為最新版本，請對您的執行個體執行快速軟體更新。

   ```
   $ sudo apt-get update && sudo apt-get upgrade -y
   ```

1. 請安裝 Nvidia GPU 驅動程式和 Nvidia CUDA 工具組需要的公用程式。

   ```
   $ sudo apt-get install build-essential -y
   ```

1. 若要使用 Nvidia GPU 驅動程式，您必須先停用 `nouveau` 開源驅動程式。

   1. 針對您目前執行的核心版本，安裝需要的公用程式和核心標頭套件。

      ```
      $ sudo apt-get install -y gcc make linux-headers-$(uname -r)
      ```

   1. 新增 `nouveau` 至 `/etc/modprobe.d/blacklist.conf `拒絕清單檔案。

      ```
      $ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
      blacklist vga16fb
      blacklist nouveau
      blacklist rivafb
      blacklist nvidiafb
      blacklist rivatv
      EOF
      ```

   1. 使用您偏好的文字編輯器開啟 `/etc/default/grub`，然後新增下列命令。

      ```
      GRUB_CMDLINE_LINUX="rdblacklist=nouveau"
      ```

   1. 重建 Grub 組態。

      ```
      $ sudo update-grub
      ```

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

1. 新增 CUDA 儲存庫並安裝 Nvidia GPU 驅動程式、NVIDIA CUDA 工具組和 cuDNN。

   ```
   $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub \
   && wget -O /tmp/deeplearning.deb http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb \
   && sudo dpkg -i /tmp/deeplearning.deb \
   && wget -O /tmp/cuda.pin https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin \
   && sudo mv /tmp/cuda.pin /etc/apt/preferences.d/cuda-repository-pin-600 \
   && sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub \
   && sudo add-apt-repository 'deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /' \
   && sudo apt update \
   && sudo apt install nvidia-dkms-535 \
   && sudo apt install -o Dpkg::Options::='--force-overwrite' cuda-drivers-535 cuda-toolkit-12-3 libcudnn8 libcudnn8-dev -y
   ```

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

1. (僅限 `p4d.24xlarge` 和 `p5.48xlarge`) 安裝 Nvidia Fabric Manager。

   1. 您安裝的 Nvidia Fabric Manager 版本必須與您在上一個步驟中安裝的 Nvidia 核心模組版本一致。

      執行以下命令來判斷 Nvidia 核心模組的版本。

      ```
      $ cat /proc/driver/nvidia/version | grep "Kernel Module"
      ```

      以下為範例輸出。

      ```
      NVRM version: NVIDIA UNIX x86_64 Kernel Module  450.42.01  Tue Jun 15 21:26:37 UTC 2021
      ```

      在上述範例中，已安裝核心模組主要版本 `450`。這表示您需要安裝 Nvidia Fabric Manager 版本 `450`。

   1. 安裝 Nvidia Fabric Manager。執行以下命令，並指定在上一步驟中使用的主要版本。

      ```
      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-major_version_number
      ```

      例如，如果已安裝核心模組的主要版本 `450`，請使用下列命令來安裝同樣版本的 Nvidia Fabric Manager。

      ```
      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-450
      ```

   1. 啟動服務，並確保服務會在執行個體啟動時自動啟動。NV Switch Management 需要使用 Nvidia Fabric Manager。

      ```
      $ sudo systemctl start nvidia-fabricmanager && sudo systemctl enable nvidia-fabricmanager
      ```

1. 確認每次執行個體啟動時都已設定 CUDA 路徑。
   + 針對 *bash* shell，新增以下陳述式到 `/home/username/.bashrc` 和 `/home/username/.bash_profile`。

     ```
     export PATH=/usr/local/cuda/bin:$PATH
     export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```
   + 針對 *tcsh* shell，新增以下陳述式到 `/home/username/.cshrc`。

     ```
     setenv PATH=/usr/local/cuda/bin:$PATH
     setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```

1. 若要確認 Nvidia GPU 驅動程式正確運作，請執行下列命令。

   ```
   $ nvidia-smi -q | head
   ```

   命令應該回傳 Nvidia GPU、Nvidia GPU 驅動程式和 Nvidia CUDA 工具組的資訊。

**重要**  
如果您的 AMI 已包含 GDRCopy，或者您使用非 GPU 執行個體，請略過步驟 4。

## 步驟 4：安裝 GDRY
<a name="nixl-start-base-gdrcopy"></a>

安裝 GDRCopy 以改善 GPU 型平台上 Libfabric 的效能。如需更多關於 GDRCopy 的詳細資訊，請參閱 [GDRCopy 儲存庫](https://github.com/NVIDIA/gdrcopy)。

**若要安裝 GDRCopy**

1. 安裝所需的依存項目。

   ```
   $ sudo apt -y install build-essential devscripts debhelper check libsubunit-dev fakeroot pkg-config dkms
   ```

1. 下載並解壓縮 GDRCopy 套件。

   ```
   $ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.4.tar.gz \
   && tar xf v2.4.tar.gz \
   && cd gdrcopy-2.4/packages
   ```

1. 建置 GDRCopy DEB 套件。

   ```
   $ CUDA=/usr/local/cuda ./build-deb-packages.sh
   ```

1. 安裝 GDRCopy DEB 套件。

   ```
   $ sudo dpkg -i gdrdrv-dkms_2.4-1_amd64.*.deb \
   && sudo dpkg -i libgdrapi_2.4-1_amd64.*.deb \
   && sudo dpkg -i gdrcopy-tests_2.4-1_amd64.*.deb \
   && sudo dpkg -i gdrcopy_2.4-1_amd64.*.deb
   ```

**重要**  
如果您的 AMI 已包含最新的 EFA 安裝程式，請略過步驟 5。

## 步驟 5：安裝 EFA 軟體
<a name="nixl-start-base-enable"></a>

安裝執行個體上支援 EFA 所需的啟用 EFA 的核心、EFA 驅動程式和 Libfabric 堆疊。

**安裝 EFA 軟體**

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

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

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

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

   ```
   $ tar -xf aws-efa-installer-1.47.0.tar.gz && rm -rf aws-efa-installer-1.47.0.tar.gz && cd aws-efa-installer
   ```

1. 執行 EFA 軟體安裝指令碼。

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

   **Libfabric** 安裝在 `/opt/amazon/efa` 目錄中。

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

1. 確認已成功安裝 EFA 軟體元件。

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

   此命令應該會傳回 Libfabric EFA 介面的相關資訊。以下範例顯示命令輸出。
   + `p3dn.24xlarge` 具有單一網路介面

     ```
     provider: efa
     fabric: EFA-fe80::94:3dff:fe89:1b70
     domain: efa_0-rdm
     version: 2.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     ```
   + 具有多個網路介面的 `p4d.24xlarge` 和 `p5.48xlarge`

     ```
     provider: efa
     fabric: EFA-fe80::c6e:8fff:fef6:e7ff
     domain: efa_0-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::c34:3eff:feb2:3c35
     domain: efa_1-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::c0f:7bff:fe68:a775
     domain: efa_2-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::ca7:b0ff:fea6:5e99
     domain: efa_3-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     ```

## 步驟 6：安裝 NIXL
<a name="nixl-start-base-nixl"></a>

安裝 NIXL。如需 NIXL 的詳細資訊，請參閱 [NIXL 儲存庫](https://github.com/ai-dynamo/nixl)。

------
#### [ Pre-built distributions ]

**使用 PyPI 安裝 NIXL**

1. 安裝所需的依存項目。

   ```
   $ sudo apt install pip
   ```

1. 安裝 NIXL。

   ```
   $ pip install nixl
   ```

------
#### [ Build from source ]

**從來源建置和安裝 NIXL**

1. 安裝所需的依存項目。

   ```
   $ sudo apt install cmake pkg-config meson pybind11-dev libaio-dev nvidia-cuda-toolkit pip libhwloc-dev \
   && pip install meson ninja pybind11
   ```

1. 導覽至您的主目錄。

   ```
   $ cd $HOME
   ```

1. 將官方 NIXL 儲存庫複製到執行個體，然後導覽至本機複製的儲存庫。

   ```
   $ sudo git clone https://github.com/ai-dynamo/nixl.git && cd nixl
   ```

1. 建置並安裝 NIXL，並指定 Libfabric 安裝目錄的路徑。

   ```
   $ sudo meson setup . nixl --prefix=/usr/local/nixl -Dlibfabric_path=/opt/amazon/efa
   $ cd nixl && sudo ninja && sudo ninja install
   ```

------

## 步驟 7：安裝 NIXL 基準，並測試您的 EFA 和 NIXL 組態
<a name="nixl-start-base-tests"></a>

安裝 NIXL Benchmark 並執行測試，以確保您的暫時執行個體已針對 EFA 和 NIXL 正確設定。NIXL Benchmark 可讓您確認 NIXL 已正確安裝，並正常運作。如需詳細資訊，請參閱 [nixlbench 儲存庫](https://github.com/ai-dynamo/nixl/tree/main/benchmark/nixlbench)。

NIXL Benchmark (nixlbench) 需要 ETCD 才能協調用戶端和伺服器。若要搭配 NIXL 使用 ETCD，需要 ETCD 伺服器和用戶端，以及 ETCD CPP API。

------
#### [ Build from Docker ]

**使用 Docker 安裝和測試 NIXL 基準**

1. 將官方 NIXL 儲存庫複製到執行個體，然後導覽至 nixlbench 建置目錄。

   ```
   $ git clone https://github.com/ai-dynamo/nixl.git
   $ cd nixl/benchmark/nixlbench/contrib
   ```

1. 建置容器。

   ```
   $ ./build.sh
   ```

   如需 Docker 建置選項的詳細資訊，請參閱 [nixlbench 儲存庫](https://github.com/ai-dynamo/nixl/tree/main/benchmark/nixlbench)。

1. 安裝 Docker.

   ```
   $ sudo apt install docker.io -y
   ```

1. 啟動 ETCD 伺服器以進行協調。

   ```
   $ docker run -d --name etcd-server \
       -p 2379:2379 -p 2380:2380 \
       quay.io/coreos/etcd:v3.5.18 \
       /usr/local/bin/etcd \
       --data-dir=/etcd-data \
       --listen-client-urls=http://0.0.0.0:2379 \
       --advertise-client-urls=http://0.0.0.0:2379 \
       --listen-peer-urls=http://0.0.0.0:2380 \
       --initial-advertise-peer-urls=http://0.0.0.0:2380 \
       --initial-cluster=default=http://0.0.0.0:2380
   ```

1. 驗證 ETCD 伺服器是否正在執行。

   ```
   $ curl -L http://localhost:2379/health
   ```

   預期的輸出結果：

   ```
   {"health":"true"}
   ```

1. 開啟執行個體的兩個終端機。在兩個終端機上執行下列命令來驗證安裝。命令在相同的執行個體上使用 ETCD 伺服器、使用 Libfabric 做為後端，並使用 GPU 記憶體操作。

   ```
   $ docker run -it --gpus all --network host nixlbench:latest \
       nixlbench --etcd_endpoints http://localhost:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM \
       --target_seg_type VRAM
   ```
**注意**  
對於非 GPU 執行個體，請使用 值`DRAM`，而非 `VRAM` 。

------
#### [ Build from source ]

**重要**  
只有在您在步驟 6 中選擇**從來源建置**時，才遵循此索引標籤。

**安裝 NIXL 基準**

1. 安裝所需的系統相依性。

   ```
   $ sudo apt install libgflags-dev
   ```

1. 安裝 ETCD 伺服器和用戶端。

   ```
   $ sudo apt install -y etcd-server etcd-client
   ```

1. 安裝 ETCD CPP API。

   1. 安裝 ETCD CPP API 所需的相依性。

      ```
      $ sudo apt install libboost-all-dev libssl-dev libgrpc-dev libgrpc++-dev libprotobuf-dev protobuf-compiler-grpc libcpprest-dev
      ```

   1. 複製並安裝 ETCD CPP API。

      ```
      $ cd $HOME
      $ git clone https://github.com/etcd-cpp-apiv3/etcd-cpp-apiv3.git
      $ cd etcd-cpp-apiv3
      $ mkdir build && cd build
      $ cmake ..
      $ sudo make -j$(nproc) && sudo make install
      ```

1. 建置並安裝 nixlbench。

   ```
   $ sudo meson setup . $HOME/nixl/benchmark/nixlbench -Dnixl_path=/usr/local/nixl/
   $ sudo ninja && sudo ninja install
   ```

**測試 EFA 和 NIXL 組態**

1. 在執行個體上啟動 ETCD 伺服器。

   ```
   $ etcd --listen-client-urls "http://0.0.0.0:2379" \
       --advertise-client-urls "http://localhost:2379" &
   ```

1. 驗證 ETCD 伺服器是否正在執行。

   ```
   $ curl -L http://localhost:2379/health
   ```

   預期的輸出結果：

   ```
   {"health":"true"}
   ```

1. 開啟執行個體的兩個終端機。在兩個終端機上，完成下列步驟以執行 nixlbench。

   1. 導覽至安裝 nixlbench 的目錄。

      ```
      $ cd /usr/local/nixlbench/bin/
      ```

   1. 執行測試並指定後端、ETCD 伺服器的地址和啟動器區段類型。下列命令在相同的執行個體上使用 ETCD 伺服器、使用 Libfabric 做為後端，並使用 GPU 記憶體操作。環境變數會設定下列項目：
      + `NIXL_LOG_LEVEL=INFO` — 啟用詳細的偵錯輸出。您也可以指定 僅`WARN`接收錯誤訊息。
      + `LD_LIBRARY_PATH` — 設定 NIXL 程式庫的路徑。

      如需 NIXL Benchmark 引數的詳細資訊，請參閱官方 [nixlbench 儲存庫中的 NIXLbench README](https://github.com/ai-dynamo/nixl/blob/main/benchmark/nixlbench/README.md)。

      ```
      $ export NIXL_LOG_LEVEL=INFO
      $ export LD_LIBRARY_PATH=/usr/local/nixl/lib/$(gcc -dumpmachine):$LD_LIBRARY_PATH
      
      $ nixlbench --etcd-endpoints 'http://localhost:2379' \
          --backend 'LIBFABRIC' \
          --initiator_seg_type 'VRAM' \
          --target_seg_type 'VRAM'
      ```
**注意**  
對於非 GPU 執行個體，請使用 值`DRAM`，而非 `VRAM` 。

------

## 步驟 8：安裝您的機器學習應用程式
<a name="nixl-start-base-app"></a>

在暫時執行個體上安裝機器學習應用程式。安裝程序依特定的機器學習應用程式而異。

**注意**  
如需安裝說明，請參閱機器學習應用程式的文件。

## 步驟 9：建立啟用 EFA 和 NIXL 的 AMI
<a name="nixl-start-base-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：終止暫時執行個體
<a name="nixl-start-base-terminate"></a>

此時，您不再需要您啟動的暫時執行個體。您可以終止執行個體，以停止產生費用。

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

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

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

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

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

## 步驟 11：啟動啟用 EFA 和 NIXL 的執行個體
<a name="nixl-start-base-cluster"></a>

使用您在**步驟 9** 中建立的已啟用 EFA 的 AMI，以及您在**步驟 1 中建立的已啟用 EFA 的安全群組，啟動已啟用 EFA 和 NIXL 的**執行個體。

**啟動啟用 EFA 和 NIXL 的執行個體**

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. 在**執行個體類型**區段中，選取支援的執行個體類型。

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

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

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

   1. 針對**防火牆 （安全群組）**，選擇**選取現有的安全群組**，然後選取您在**步驟 1 **中建立的安全群組。

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

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

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

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

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

## 步驟 12：啟用無密碼 SSH
<a name="nixl-start-base-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
   ```

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

**重要**  
只有在遵循步驟 7 時，才遵循步驟 13。

## 步驟 13：跨執行個體測試 EFA 和 NIXL 組態
<a name="nixl-start-base-test-multi"></a>

執行測試，以確保您的執行個體已針對 EFA 和 NIXL 正確設定。

------
#### [ Build from Docker ]

**使用 Docker 跨執行個體測試 EFA 和 NIXL 組態**

1. 選取兩個主機來執行 nixlbench 基準測試。使用第一個主機的 IP 地址做為中繼資料交換的 ETCD 伺服器 IP。

1. 在主機 1 上啟動 ETCD 伺服器。

   ```
   $ docker run -d --name etcd-server \
       -p 2379:2379 -p 2380:2380 \
       quay.io/coreos/etcd:v3.5.18 \
       /usr/local/bin/etcd \
       --data-dir=/etcd-data \
       --listen-client-urls=http://0.0.0.0:2379 \
       --advertise-client-urls=http://0.0.0.0:2379 \
       --listen-peer-urls=http://0.0.0.0:2380 \
       --initial-advertise-peer-urls=http://0.0.0.0:2380 \
       --initial-cluster=default=http://0.0.0.0:2380
   ```

1. 驗證 ETCD 伺服器是否正在執行。

   ```
   $ curl -L http://localhost:2379/health
   ```

   ```
   {"health":"true"}
   ```

1. 在主機 1 上執行 nixlbench 基準測試。

   ```
   $ docker run -it --gpus all --network host nixlbench:latest \
       nixlbench --etcd_endpoints http://localhost:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM
   ```

1. 在主機 2 上執行 nixlbench 基準測試。

   ```
   $ docker run -it --gpus all --network host nixlbench:latest \
       nixlbench --etcd_endpoints http://ETCD_SERVER_IP:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM
   ```

------
#### [ Build from source ]

**重要**  
只有在您在步驟 6 中選擇**從來源建置**時，才遵循此索引標籤。

**跨執行個體測試 EFA 和 NIXL 組態**

1. 選取兩個主機來執行 nixlbench 基準測試。使用第一個主機的 IP 地址做為中繼資料交換的 ETCD 伺服器 IP。

1. 在主機 1 上啟動 ETCD 伺服器。

   ```
   $ etcd --listen-client-urls "http://0.0.0.0:2379" \
       --advertise-client-urls "http://localhost:2379" &
   ```

1. 驗證 ETCD 伺服器是否正在執行。

   ```
   $ curl -L http://localhost:2379/health
   ```

   ```
   {"health":"true"}
   ```

1. 在主機 1 上執行 nixlbench 基準測試。

   ```
   $ export NIXL_LOG_LEVEL=INFO
   $ export LD_LIBRARY_PATH=$HOME/nixl/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
   
   $ nixlbench \
       --etcd-endpoints http://localhost:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM
   ```

1. 在主機 2 上執行 nixlbench 基準測試。

   ```
   $ export NIXL_LOG_LEVEL=INFO
   $ export LD_LIBRARY_PATH=$HOME/nixl/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
   
   $ nixlbench \
       --etcd-endpoints http://ETCD_SERVER_IP:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM
   ```

------

## 步驟 14：測試透過 vLLM 提供的分解推論 (*選用*)
<a name="nixl-start-base-serve"></a>

安裝 NIXL 之後，您可以透過 LLM 推論使用 NIXL，並提供 vLLM、SGLang 和 TensorRT-LLM 等架構。

**使用 vLLM 為您的推論工作負載提供服務**

1. 安裝 vLLM。

   ```
   $ pip install vllm
   ```

1. 使用 NIXL 啟動 vLLM 伺服器。下列範例命令會為 NIXL 交握連線、KV 連接器、KV 角色和傳輸後端建立一個預填充 （生產者） 和一個解碼 （消費者） 執行個體。如需詳細範例和指令碼，請參閱 [NIXLConnector 使用者指南](https://github.com/vllm-project/vllm/blob/2d977a7a9ead3179fde9ed55d69393ef7b6cec47/docs/features/nixl_connector_usage.md)。

   若要搭配 EFA 使用 NIXL，請根據您的設定和使用案例設定環境變數。
   + 生產者 （預填器） 組態

     ```
     $ vllm serve your-application \
         --port 8200 \
         --enforce-eager \
         --kv-transfer-config '{"kv_connector":"NixlConnector","kv_role":"kv_both","kv_buffer_device":"cuda","kv_connector_extra_config":{"backends":["LIBFABRIC"]}}'
     ```
   + 取用者 （解碼器） 組態

     ```
     $ vllm serve your-application \
         --port 8200 \
         --enforce-eager \
         --kv-transfer-config '{"kv_connector":"NixlConnector","kv_role":"kv_both","kv_buffer_device":"cuda","kv_connector_extra_config":{"backends":["LIBFABRIC"]}}'
     ```

   上述範例組態會設定下列項目：
   + `kv_role` 到 `kv_both`，這會啟用對稱功能，其中連接器可以同時做為生產者和消費者。這可為未預先決定角色差異的實驗設定和案例提供靈活性。
   + `kv_buffer_device` 到 `cuda`，這可讓您使用 GPU 記憶體。
   + NIXL 後端至 `LIBFABRIC`，可讓 NIXL 流量通過 EFA。

# 使用多個網路卡最大化 Amazon EC2 執行個體的網路頻寬
<a name="efa-acc-inst-types"></a>

許多支援 EFA 的執行個體類型也具有多個網路卡。如需詳細資訊，請參閱[網路卡](using-eni.md#network-cards)。如果您計劃搭配其中一個執行個體類型使用 EFA，我們建議您使用下列基本組態：
+ 針對主要網路介面 （網路卡索引 `0`、裝置索引 `0`)，建立 ENA 介面。您不能使用僅限 EFA 的網路介面做為主要網路介面。
+ 如果網路卡索引 0 支援 EFA，請為網路卡索引 `0`、裝置索引 建立僅限 EFA 的網路介面`1`。
+ 對於每個額外的網路界面，請根據您的使用案例，使用下一個未使用的網路卡索引`0`、裝置索引、僅限 EFA 的網路界面和/或 `1` ENA 網路界面的裝置索引，例如 ENA 頻寬需求或 IP 地址空間。如需使用案例範例，請參閱[P5 和 P5e 執行個體的 EFA 組態](#efa-for-p5)。

**注意**  
P5 執行個體需要以特定方式設定網路介面，才能啟用最大網路頻寬。如需詳細資訊，請參閱[P5 和 P5e 執行個體的 EFA 組態](#efa-for-p5)。

下列範例示範如何根據這些建議啟動執行個體。

------
#### [ Instance launch ]

**使用啟動執行個體精靈，在中啟動執行個體**

1. 在**網路設定**區段中選擇**編輯**。

1. 展開 **進階網路組態**。

1. 針對主要網路介面 （網路卡索引 `0`、裝置索引 `0`)，建立 ENA 介面。您不能使用僅限 EFA 的網路介面做為主要網路介面。

1. 如果網路卡索引 0 支援 EFA，請為網路卡索引 `0`、裝置索引 建立僅限 EFA 的網路介面`1`。

1. 對於每個額外的網路界面，請根據您的使用案例，使用下一個未使用的網路卡索引`0`、裝置索引、僅限 EFA 的網路界面和/或 `1` ENA 網路界面的裝置索引，例如 ENA 頻寬需求或 IP 地址空間。如需使用案例範例，請參閱[P5 和 P5e 執行個體的 EFA 組態](#efa-for-p5)。

**使用 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令在執行個體啟動期間指定 EFAs**  
針對 `--network-interfaces`，指定所需的網路介面數量。對於主要網路介面，針對 `NetworkCardIndex=0` 和 `DeviceIndex=0` 指定 `InterfaceType=interface`。如果網路卡索引 0 支援 EFA，請指定 `NetworkCardIndex=0`、 `DeviceIndex=1`和 `InterfaceType=efa-only`。針對任何其他網路介面，針對 `NetworkCardIndex`指定下一個未使用的索引、`DeviceIndex=0`針對 `InterfaceType=efa-only`和/或`DeviceIndex=1`針對 `InterfaceType=interface`。

下列範例命令程式碼片段顯示具有 32 個 EFA 網路介面的請求。

```
$ aws ec2 run-instances \
 --instance-type p5.48xlarge \
 --count 1 \
 --key-name key_pair_name \
 --image-id ami-0abcdef1234567890 \
 --network-interfaces "NetworkCardIndex=0,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=0,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=1,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=2,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=3,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=4,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=5,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=6,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=7,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=8,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=9,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=10,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=11,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=12,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=13,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=14,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=15,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=16,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=17,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=18,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=19,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=20,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=21,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=22,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=23,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=24,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=25,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=26,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=27,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=28,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=29,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=30,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=31,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only"
...
```

------
#### [ Launch templates ]

**使用 Amazon EC2 主控台將 EFAs 新增至啟動範本**

1. 在 **Network settings** (網路設定) 下，展開 **Advanced network configuration** (進階網路組態)。

1. 針對主要網路介面 （網路卡索引 `0`、裝置索引 `0`)，建立 ENA 介面。您不能使用僅限 EFA 的網路介面做為主要網路介面。

1. 如果網路卡索引 0 支援 EFA，請為網路卡索引 `0`、裝置索引 建立僅限 EFA 的網路介面`1`。

1. 對於每個額外的網路界面，請根據您的使用案例，使用下一個未使用的網路卡索引`0`、裝置索引、僅限 EFA 的網路界面和/或 `1` ENA 網路界面的裝置索引，例如 ENA 頻寬需求或 IP 地址空間。如需使用案例範例，請參閱[P5 和 P5e 執行個體的 EFA 組態](#efa-for-p5)。

**使用 [create-launch-template](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html) 命令將 EFAs 新增至啟動範本**  
針對 `NetworkInterfaces`，指定所需的網路介面數量。對於主要網路介面，針對 `NetworkCardIndex=0` 和 `DeviceIndex=0` 指定 `InterfaceType=interface`。如果網路卡索引 0 支援 EFA，請指定 `NetworkCardIndex=0`、 `DeviceIndex=1`和 `InterfaceType=efa-only`。針對任何其他網路介面，針對 `NetworkCardIndex`指定下一個未使用的索引、`DeviceIndex=0`針對 `InterfaceType=efa-only`和/或`DeviceIndex=1`針對 `InterfaceType=interface`。

下面的程式碼片段顯示了一個範例，其中包含可能的 32 個網路介面中的 3 個網路介面。

```
"NetworkInterfaces":[
{
  "NetworkCardIndex":0,
  "DeviceIndex":0,
  "InterfaceType": "interface",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
},
{
  "NetworkCardIndex": 0,
  "DeviceIndex": 1,
  "InterfaceType": "efa-only",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
},
{
  "NetworkCardIndex": 1,
  "DeviceIndex": 0,
  "InterfaceType": "efa-only",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
},
{
  "NetworkCardIndex": 2,
  "DeviceIndex": 0,
  "InterfaceType": "efa-only",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
},
{
  "NetworkCardIndex": 3,
  "DeviceIndex": 0,
  "InterfaceType": "efa-only",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
}
...
```

------

## P5 和 P5e 執行個體的 EFA 組態
<a name="efa-for-p5"></a>

`p5.48xlarge` 和 `p5e.48xlarge` 執行個體支援 32 個網路卡且擁有的總網路頻寬容量為 3,200 Gbps，其中最多 800 Gbps 可用於 IP 網路流量。由於 EFA 和 IP 網路流量共用相同的基礎資源，因此一個使用的頻寬將減少另一個可用的頻寬。這表示只要總頻寬不超過 3,200 Gbps，且 IP 頻寬不超過 800 Gbps，您就可以在 EFA 流量和 IP 流量之間以任何組合分配網路頻寬。例如，如果您使用 400 Gbps 的 IP 頻寬，則可以同時達到高達 2,800 Gbps 的 EFA 頻寬。

**使用案例 1：儲存 IP 位址並避免潛在的 Linux IP 問題**

此組態提供高達 3,200 Gbps 的 EFA 網路頻寬，以及高達 100 Gbps 的 IP 網路頻寬，並具有一個私有 IP 位址。此組態也有助於避免潛在的 Linux IP 問題，例如不允許自動指派公有 IP 位址和 IP 路由挑戰 (主機名稱對 IP 位址映射問題和來源 IP 位址不相符)，如果執行個體具有多個網路介面，則可能會發生這種情況。
+ 對於主要網路介面 （網路卡索引 0、裝置索引 0)，請使用 ENA 介面。
+ 針對網路卡索引 0、裝置索引 1，建立僅限 EFA 的網路介面。
+ 對於剩餘的網路介面 （網路卡索引 1-31、裝置索引 0)，請使用僅限 EFA 的網路介面。

**使用案例 2：最大 EFA 和 IP 網路頻寬**

此組態提供高達 3,200 Gbps 的 EFA 網路頻寬，以及高達 800 Gbps 的 IP 網路頻寬和 8 個私有 IP 位址。您無法使用此組態自動指派公有 IP 位址。但是，在啟動進行網際網路連線之後，可以將彈性 IP 位址連接至主要網路介面 (NetworkCardIndex=0、DeviceIndex=0)。
+ 對於主要網路界面 （網路卡索引 0、裝置索引 0)，請使用 ENA 網路界面。
+ 對於其餘的介面，請執行下列動作：
  + 在網路卡索引 0 裝置索引 1 上指定僅限 EFA 的網路介面，對於網路卡索引 1、2 和 3，請使用裝置索引 0。
  + 在下列**每個網路卡索引子集中**指定一個 ENA 網路介面和四個僅限 EFA 網路介面，並將裝置索引 1 用於 ENA 網路介面，並將裝置索引 0 用於僅限 EFA 網路介面：
    + [4、5、6、7]
    + [8、9、10、11]
    + [12、13、14、15]
    + [16、17、18、19]
    + [20、21、22、23]
    + [24、25、26、27]
    + [28、29、30、31]

下圖說明了此設定。

```
$ aws --region $REGION ec2 run-instances \
 --instance-type p5.48xlarge \
 --count 1 \
 --key-name key_pair_name \
 --image-id ami_id \
 --network-interfaces "NetworkCardIndex=0,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=0,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=1,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=2,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=3,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=4,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=4,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=5,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=6,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=7,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=8,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=8,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=9,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=10,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=11,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=12,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=12,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=13,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=14,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=15,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=16,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=16,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=17,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=18,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=19,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=20,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=20,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=21,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=22,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=23,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=24,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=24,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=25,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=26,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=27,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=28,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=28,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=29,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=30,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=31,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only"
...
```

## P6-B200 執行個體的 EFA 組態
<a name="efa-for-p6-b200"></a>

P6-B200 執行個體的總網路頻寬容量為 3,200 Gbps，其中最多 1600 Gbps 可用於 ENA。其中有 8 個 GPU 和 8 個網路卡，其中每個網路卡支援高達 400 Gbps EFA 頻寬和 200 Gbps ENA 頻寬。由於 EFA 和 ENA 流量共用相同的基礎資源，因此一個使用的頻寬將減少另一個可用的頻寬。

**使用案例 1：儲存 IP 位址**

此組態每個執行個體至少耗用一個私有 IP 位址，並支援高達 3200 Gbps 的 EFA 頻寬和 200 Gbps 的 ENA 頻寬。
+ 對於主要網路介面 （網路卡索引 0、裝置索引 0)，請使用 ENA 介面。
+ 針對網路卡索引 0、裝置索引 1，建立僅限 EFA 的網路介面。
+ 對於其餘 7 個網路卡 （網路卡索引 1-7、裝置索引 0)，請使用僅限 EFA 的網路介面。

**使用案例 2：最大 EFA 和 ENA 頻寬**

此組態每個執行個體至少耗用 8 個私有 IP 位址，並支援高達 3200 Gbps 的 EFA 頻寬和 1600 Gbps 的 ENA 頻寬。
+ 對於主要網路介面 （網路卡索引 0、裝置索引 0)，請使用 ENA 介面。
+ 針對網路卡索引 0、裝置索引 1，建立僅限 EFA 的網路介面。
+ 對於其餘 7 個網路卡 （網路卡索引 1-7)，請在裝置索引 0 上建立僅限 EFA 的網路介面，並在裝置索引 1 上建立 ENA 網路介面。

## P6e-GB200 執行個體的 EFA 組態
<a name="efa-for-p6e"></a>

P6e-GB200 執行個體最多可設定 17 個網路卡。下圖顯示 P6e-GB200 執行個體的實體網路介面卡 (NIC) 配置，以及網路卡索引 (NCI) 的映射。

![\[P6e-GB200 執行個體的實體網路介面卡 (NIC) 和網路卡索引 (NIC) 映射。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/p6e.png)


主要 NCI (索引 0) 支援高達 100 Gbps 的 ENA 頻寬。具有下列索引的 NCI 僅支援 EFA 網路介面和 400 Gbps EFA 頻寬：[1, 3, 5, 7, 9, 11, 13, 15]。具有下列索引的 NCI 支援高達 200 Gbps 的 ENA 或 EFA 頻寬：[2, 4, 6, 8, 10, 12, 14, 16]。

下列群組中的 NCI 在主機上共用基礎實體 NIC：
+ [1 和 2]
+ [3 和 4]
+ [5 和 6]
+ [7 和 8]
+ [9 和 10]
+ [11 和 12]
+ [13 和 14]
+ [15 和 16]

每個實體 NIC 最多支援 400 Gbps 的頻寬。由於這些群組中的 NCI 共用相同的基礎實體 NIC，因此其中一個使用的頻寬將減少另一個可使用的頻寬。例如，如果 NCI 2 使用 200 Gbps 的 ENA 頻寬，則 NCI 1 同時可使用最多 200 Gbps 的 EFA 頻寬。

主機上的每個基礎 GPU 都可以直接透過下列 NCI 對來傳送流量：
+ [1 和 3]
+ [5 和 7]
+ [9 和 11]
+ [13 和 15]

每個 GPU 支援高達 400 Gbps 的 EFA 頻寬。由於這些群組中的網路卡共用相同的 GPU，因此其中一個使用的頻寬將減少另一個可使用的頻寬。例如，如果 NCI 1 使用 200 Gbps 的 EFA 頻寬，則 NCI 3 同時可使用最多 200 Gbps 的 EFA 頻寬。因此，為了達到最大的 EFA 效能，建議執行**下列其中一項**操作，以達到總共 1,600 Gbps 的 EFA 頻寬：
+ 將僅限 EFA 的網路介面新增至每個群組中的一個 NIC，以達到每個網路介面 400 Gbps (*4 個 EFA 網路介面 x 400 Gbps*)。
+ 將僅限 EFA 的網路界面新增至每個群組中的每個 NIC，以達到每個網路介面 200 Gbps (*8 個 EFA 網路介面 x 200 Gbps*)。

例如，下列組態在每個 NCI 群組中使用單一僅限 EFA 網路介面，提供高達 1,600 Gbps 的 EFA 頻寬，使用僅限主要 NCI (索引 0) 提供高達 100 Gbps 的 ENA 網路頻寬。
+ 對於主要 NCI (網路卡索引 0，裝置索引 0)，請使用 ENA 網路介面。
+ 將僅限 EFA 的網路介面新增至下列項目：
  + NCI 1，裝置索引 0
  + NCI 5，裝置索引 0
  + NCI 9，裝置索引 0
  + NCI 13，裝置索引 0

## P6-B300 執行個體的 EFA 組態
<a name="efa-for-p6-b300"></a>

P6-B300 執行個體的總網路頻寬容量高達 6400 Gbps，對於 ENA 流量則高達 3870 Gbps。它們有 8 GPUs 和 17 個網路卡，其中主要網路卡僅支援頻寬高達 350 Gbps 的 ENA 網路介面。次要網路卡支援高達 400 Gbps EFA 和高達 220 Gbps 的 ENA 頻寬。由於 EFA 和 ENA 流量共用相同的基礎資源，因此一個使用的頻寬將減少另一個可用的頻寬。

![\[P6-B300 執行個體的實體網路介面卡 (NIC) 和網路卡索引 (NIC) 映射。\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/images/p6-b300.png)


**使用案例 1：儲存 IP 位址**

此組態每個執行個體至少耗用一個私有 IP 地址，並支援高達 6400 Gbps 的 EFA 頻寬和高達 350 Gbps 的 ENA 頻寬。
+ 對於主要網路界面 （網路卡索引 0、裝置索引 0)，請使用 ENA 網路界面。
+ 對於剩餘的網路卡 （網路卡索引 1-16、裝置索引 0)，請使用僅限 EFA 的網路介面。

```
--network-interfaces \
"NetworkCardIndex=0,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=1,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=2,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=3,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=4,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=5,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=6,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=7,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=8,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=9,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=10,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=11,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=12,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=13,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=14,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=15,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=16,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only"
```

**使用案例 2：最大 EFA 和 ENA 頻寬**

此組態每個執行個體至少耗用 17 個私有 IP 地址，並支援高達 6400 Gbps 的 EFA 頻寬和高達 3870 Gbps 的 ENA 頻寬。
+ 對於主要網路介面 （網路卡索引 0、裝置索引 0)，請使用 ENA 網路介面。
+ 對於剩餘的網路卡，請建立僅限 EFA 的介面 （網路卡索引 1-16 裝置索引 0) 和 ENA 介面網路卡索引 1-16 裝置索引 1)。

```
--network-interfaces \
"NetworkCardIndex=0,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=1,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=2,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=3,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=4,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=5,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=6,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=7,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=8,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=9,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=10,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=11,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=12,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=13,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=14,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=15,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=16,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=1,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=2,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=3,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=4,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=5,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=6,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=7,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=8,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=9,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=10,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=11,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=12,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=13,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=14,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=15,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=16,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface"
```

# 建立 Elastic Fabric Adapter 並將其連接至 Amazon EC2 執行個體
<a name="create-efa"></a>

您可以建立 EFA 並將其連接到 Amazon EC2 執行個體，就像 Amazon EC2 中的任何其他彈性網路介面一樣。不過，與彈性網路介面不同，EFA 不能與處於 `running` 狀態的執行個體連接或分離。

**考量事項**
+  您可以變更與 EFA 相關聯的安全群組。若要啟用 OS-bypass 功能，EFA 必須是安全群組的成員，而該安全群組允許往返於其本身的所有傳入和傳出流量。如需詳細資訊，請參閱[步驟 1：準備具備 EFA 功能的安全群組](efa-start.md#efa-start-security)。

  就像變更與彈性網絡介面相關聯的安全群組，您以同樣的方式變更與 EFA 相關聯的安全群組。如需詳細資訊，請參閱[修改網路介面屬性](modify-network-interface-attributes.md)。
+ 將彈性 IP (IPv4) 和 IPv6 地址指派給 EFA (EFA 搭配 ENA) 的方式，就像將 IP 位址指派給彈性網絡介面一樣。如需詳細資訊，請參閱[管理 IP 位址](managing-network-interface-ip-addresses.md)。

  您無法將 IP 位址指派給僅限 EFA 的網路介面。

**Topics**
+ [建立 EFA](#efa-create)
+ [將 EFA 連接至已停止的執行個體](#efa-attach)
+ [啟動執行個體時連接 EFA](#efa-launch)
+ [將 EFA 新增至啟動範本](#efa-launch-template)

## 建立 EFA
<a name="efa-create"></a>

您可以在 VPC 的子網路中建立 EFA。EFA 建立後即無法移至另一個子網路，而且只能連接到同一可用區域中已停止的執行個體。

------
#### [ Console ]

**若要建立 EFA (EFA 搭配 ENA 或僅限 ENA) 網路介面**

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

1. 在導覽窗格中，選擇 **Network Interfaces** (網路介面)，然後選擇 **Create network interface** (建立網路介面)。

1. 針對 **Description (描述)**，輸入 EFA 的描述性名稱。

1. 針對 **Subnet (子網路)**，選取要在其中建立 EFA 的子網路。

1. 針對**介面類型**，選擇以下其中一項：
   + **EFA 搭配 ENA**：建立同時支援 ENA 和 EFA 裝置的網路介面。
   + **僅限 EFA**：僅使用 EFA 裝置建立網路介面。

1. (僅限 EFA 搭配 ENA) 設定網路介面的 IP 位址和字首指派。您可以指派的 IP 位址和字首類型取決於選取的子網路。對於僅限 IPv4 的子網路，只能指派 IPv4 IP 位址和字首。對於僅限 IPv6 的子網路，只能指派 IPv6 IP 位址和字首。對於雙堆疊子網路，可以同時指派 IPv4 和 IPv6 IP 位址和字首。
**注意**  
您無法將 IP 位址指派給僅限 EFA 的網路介面。

   1. 針對**私有 IPv4 位址**和/或 **IPv6 位址**，選擇**自動指派**，讓 Amazon EC2 從選取的子網路中自動指派 IP 位址，或選擇**自訂**以手動指定要指派的 IP 位址。

   1. 如果指派 IPv6 位址，可以選擇啟用**指派主要 IPv6 IP**。這樣做會將主要 IPv6 全域單播位址 (GUA) 指派給網路介面。指派主要 IPv6 地址可讓您避免中斷執行個體或 ENI 的流量。如需詳細資訊，請參閱 [IPv6 位址](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#vpc-ipv6-addresses)。

   1. 對於 **IPv4 字首委派**和/或 **IPv6 字首委派**，選擇**自動指派**，讓 Amazon EC2 從子網路的 CIDR 區塊中自動指派字首，或選擇**自訂**以從子網路的 CIDR 區塊中手動指定字首。如果您指定字首， 會 AWS 驗證它尚未指派給其他資源。如需詳細資訊，請參閱[Amazon EC2 網路介面的字首委派](ec2-prefix-eni.md)

   1. (選用) 設定**閒置連線追蹤逾時**設定。如需詳細資訊，請參閱[閒置連線追蹤逾時](security-group-connection-tracking.md#connection-tracking-timeouts)
      + **TCP 建立逾時**：處於已建立狀態的閒置 TCP 連線的逾時時間 (以秒為單位)。最小值：60秒。最大值：432000秒 (5天)。預設：432000秒。建議使用：432000秒以下。
      + **UDP 逾時**：只出現單一方向或單一請求回應交易流量的閒置 UDP 流量的逾時時間 (以秒為單位)。最小值：30秒。最大值：60秒。預設：30秒。
      + **UDP 串流逾時**：分類為出現多個請求回應交易串流的閒置 UDP 流量的逾時時間 (以秒為單位)。最小值：60秒。最大值：180秒 (3分鐘)。預設：180秒。

1. 針對 **Security groups (安全群組)**，選取一個或多個安全群組。

1. 選擇 **Create network interface** (建立網路介面)。

------
#### [ AWS CLI ]

**若要建立 EFA**  
使用 [create-global-network](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-network-interface.html) 命令。對於 `--interface-type`，請為 EFA 網路介面指定 `efa`，或為僅限 EFA 網路介面指定 `efa-only`。

```
aws ec2 create-network-interface \
    --subnet-id subnet-0abcdef1234567890 \
    --interface-type efa \
    --description "my efa"
```

------
#### [ PowerShell ]

**若要建立 EFA**  
使用 [New-EC2NetworkInterface](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2NetworkInterface.html) cmdlet。對於 `-InterfaceType`，請為 EFA 網路介面指定 `efa`，或為僅限 EFA 網路介面指定 `efa-only`

```
New-EC2NetworkInterface `
    -SubnetId subnet-0abcdef1234567890 `
    -InterfaceType efa `
    -Description "my efa"
```

------

## 將 EFA 連接至已停止的執行個體
<a name="efa-attach"></a>

您可以將 EFA 連接至任何處於 `stopped` 狀態的受支援執行個體。您無法將 EFA 連接至處於 `running` 狀態的執行個體。如需支援的執行個體類型的詳細資訊，請參閱[支援的執行個體類型](efa.md#efa-instance-types)。

就像將網路介面連接至執行個體，您以同樣的方式將 EFA 連接至執行個體。如需詳細資訊，請參閱 [連接網路介面](network-interface-attachments.md#attach_eni)。

## 啟動執行個體時連接 EFA
<a name="efa-launch"></a>

------
#### [ AWS CLI ]

**啟動執行個體時連接現有的 EFA**  
請使用 `--network-interfaces` 選項並搭配 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令。對於主網路介面，指定 EFA 網路接口和 `NetworkCardIndex=0`，`DeviceIndex=0`。若要連接多個 EFA 網路介面，請參閱 [最大化網路頻寬](efa-acc-inst-types.md)。

```
--network-interfaces "NetworkCardIndex=0, \
    DeviceIndex=0, \
    NetworkInterfaceId=eni-1234567890abcdef0, \
    Groups=sg-1234567890abcdef0, \
    SubnetId=subnet-0abcdef1234567890"
```

**啟動執行個體時連接新的 EFA**  
請使用 `--network-interfaces` 選項並搭配 [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) 命令。對於主要網路介面，針對 `NetworkCardIndex=0` 和 `DeviceIndex=0` 指定 `InterfaceType=efa`。如果您要連接多個 EFA 網路介面，請參閱[最大化網路頻寬](efa-acc-inst-types.md)。

```
--network-interfaces "NetworkCardIndex=0, \
    DeviceIndex=0, \
    InterfaceType=efa, \
    Groups=sg-1234567890abcdef0, \
    SubnetId=subnet-0abcdef1234567890"
```

------
#### [ PowerShell ]

**啟動執行個體時連接現有的 EFA**  
使用 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 搭配 `-NetworkInterfaces` 參數。

```
-NetworkInterface $networkInterface
```

定義網路介面，如下所示。

```
$networkInterface = New-Object Amazon.EC2.Model.InstanceNetworkInterfaceSpecification
$networkInterface.DeviceIndex = 0
$networkInterface.NetworkInterfaceId = "eni-1234567890abcdef0"
$networkInterface.Groups = @("sg-1234567890abcdef0")
$networkInterface.SubnetId = "subnet-0abcdef1234567890"
```

**啟動執行個體時連接新的 EFA**  
使用 [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) cmdlet 搭配 `-NetworkInterfaces` 參數。

```
-NetworkInterface $networkInterface
```

定義網路介面，如下所示。

```
$networkInterface = New-Object Amazon.EC2.Model.InstanceNetworkInterfaceSpecification
$networkInterface.DeviceIndex = 0
$networkInterface.InterfaceType = "efa"
$networkInterface.Groups = @("sg-1234567890abcdef0")
$networkInterface.SubnetId = "subnet-0abcdef1234567890"
```

------

## 將 EFA 新增至啟動範本
<a name="efa-launch-template"></a>

您可以建立啟動範本，其中包含啟動具備 EFA 功能的執行個體所需的組態資訊。您可以在啟動範本中指定 EFA 和僅限 EFA 的網路介面。若要建立具備 EFA 功能的啟動範本，請建立新的啟動範本，並指定支援的執行個體類型、具備 EFA 功能的 AMI，以及具備 EFA 功能的安全群組。針對 `NetworkInterfaces`，指定要連接的 EFA 網路介面。對於主要網路介面，針對 `NetworkCardIndex=0` 和 `DeviceIndex=0` 指定 `InterfaceType=efa`。如果您要連接多個 EFA 網路介面，請參閱[使用多個網路卡最大化 Amazon EC2 執行個體的網路頻寬](efa-acc-inst-types.md)。

您可以利用啟動範本，透過其他 AWS 服務啟動已啟用 EFA 的執行個體，例如 [AWS Batch](https://docs.aws.amazon.com/batch/latest/userguide/what-is-batch.html)或 [AWS ParallelCluster](https://docs.aws.amazon.com/parallelcluster/latest/ug/what-is-aws-parallelcluster.html)。

如需建立啟動範本的詳細資訊，請參閱[建立 Amazon EC2 啟動範本](create-launch-template.md)。

# 從 Amazon EC2 執行個體分離和刪除 EFA
<a name="detach-efa"></a>

您可以將 EFA 從 Amazon EC2 執行個體分離，並以與 Amazon EC2 中任何其他彈性網路介面相同的方式刪除。

## 分離 EFA
<a name="efa-detach"></a>

若要從執行個體分離 EFA，您必須先停止執行個體。您無法從處於執行中狀態的執行個體分離 EFA。

就像從執行個體分離彈性網絡介面，您以同樣的方式從執行個體分離 EFA。如需詳細資訊，請參閱[分離網路介面](network-interface-attachments.md#detach_eni)。

## 刪除 EFA
<a name="efa-delete"></a>

若要刪除 EFA，您必須先從執行個體分離它。您無法刪除仍連接至執行個體的 EFA。

就像刪除彈性網絡介面一樣，您以同樣的方式刪除 EFAs。如需詳細資訊，請參閱[刪除網路介面](delete_eni.md)。

# 在 Amazon EC2 上監控彈性布料轉接器
<a name="efa-working-monitor"></a>

您可以使用下列功能來監控 Elastic Fabric Adapter 的效能。

**Topics**
+ [Amazon EC2 執行個體的 EFA 驅動程式指標](#efa-driver-metrics)
+ [Amazon VPC 流程日誌](#efa-flowlog)
+ [Amazon CloudWatch](#efa-cloudwatch)

## Amazon EC2 執行個體的 EFA 驅動程式指標
<a name="efa-driver-metrics"></a>

Elastic Fabric Adapter (EFA) 驅動程式會從已連接 EFA 介面的執行個體中實時發佈多個指標。可以使用這些指標來進行執行個體效能和聯網問題的故障診對、為工作負載選擇正確的叢集大小、主動計劃擴展活動，以及基準化分析應用程式，以判斷其是否能夠最大化執行個體上的可用效能。

**Topics**
+ [可用的 EFA 驅動程式指標](#available-efa-metrics)
+ [擷取執行個體的 EFA 驅動程式指標](#view-efa-driver-metrics)

### 可用的 EFA 驅動程式指標
<a name="available-efa-metrics"></a>

ENA 驅動程式會即時將下列指標交付至執行個體。其提供從執行個體啟動或上次驅動程式重設以來，所連接之 EFA 裝置傳送、接收、傳輸或捨棄的累計錯誤、連線事件和封包或位元組數量。


| 指標 | Description | 支援的執行個體類型 | 
| --- | --- | --- | 
| tx\$1bytes |  已傳輸的位元組數目。 單位：位元組  | 支援 EFA 的所有執行個體類型 | 
| rx\$1bytes |  接收的位元組數量。 單位：位元組  | 支援 EFA 的所有執行個體類型 | 
| tx\$1pkts |  代理程式傳輸的封包數目。 單位：計數  | 支援 EFA 的所有執行個體類型 | 
| rx\$1pkts |  接收的封包數量。 單位：計數  | 支援 EFA 的所有執行個體類型 | 
| rx\$1drops |  收到然後捨棄的封包數量。 單位：計數  | 支援 EFA 的所有執行個體類型 | 
| send\$1bytes |  使用傳送操作傳送的位元組數。 單位：位元組  | 支援 EFA 的所有執行個體類型 | 
| recv\$1bytes |  傳送操作收到的位元組數。 單位：位元組  | 支援 EFA 的所有執行個體類型 | 
| send\$1wrs |  使用傳送操作傳送的封包數量。 單位：計數  | 支援 EFA 的所有執行個體類型 | 
| recv\$1wrs |  傳送操作收到的封包數量。 單位：計數  | 支援 EFA 的所有執行個體類型 | 
| rdma\$1write\$1wrs |  已完成的 rdma 寫入操作數目。 單位：計數  | 支援 EFA 的所有執行個體類型 | 
| rdma\$1read\$1wrs |  已完成的 rdma 讀取操作數目。 單位：計數  | 支援 EFA 的所有執行個體類型 | 
| rdma\$1write\$1bytes |  其他執行個體使用 rdma 寫入操作寫入其中的位元組數。 單位：位元組  | 支援 EFA 的所有執行個體類型 | 
| rdma\$1read\$1bytes |  使用 rdma 讀取操作收到的位元組數。 單位：位元組  | 支援 EFA 的所有執行個體類型 | 
| rdma\$1write\$1wr\$1err |  發生本機或遠端錯誤的 rdma 寫入操作數目。 單位：計數  | 支援 EFA 的所有執行個體類型 | 
| rdma\$1read\$1wr\$1err |  發生本機或遠端錯誤的 rdma 讀取操作數目。 單位：計數  | 支援 EFA 的所有執行個體類型 | 
| rdma\$1read\$1resp\$1bytes |  回應 rdma 讀取操作而傳送的位元組數。 單位：位元組  | 支援 EFA 的所有執行個體類型 | 
| rdma\$1write\$1recv\$1bytes |  rdma 寫入操作收到的位元組數。 單位：位元組  | 支援 EFA 的所有執行個體類型 | 
| retrans\$1bytes |  重新傳輸的 EFA SRD 位元組數。 單位：計數  | 支援 EFA 的 Nitro v4 和更新版本的執行個體類型 | 
| retrans\$1pkts |  重新傳輸的 EFA SRD 封包數目。 單位：位元組  | 支援 EFA 的 Nitro v4 和更新版本的執行個體類型 | 
| retrans\$1timeout\$1events |  EFA SRD 流量逾時並導致網路路徑變更的次數。 單位：計數  | 支援 EFA 的 Nitro v4 和更新版本的執行個體類型 | 
| impaired\$1remote\$1conn\$1events |  EFA SRD 連線進入受損狀態的次數，導致輸送量速率限制降低。 單位：計數  | 支援 EFA 的 Nitro v4 和更新版本的執行個體類型 | 
| unresponsive\$1remote\$1events |  EFA SRD 遠端連線沒有回應的次數。 單位：計數  | 支援 EFA 的 Nitro v4 和更新版本的執行個體類型 | 

如需有關支援 EFA 的執行個體類型詳細資訊，請參閱 [支援的執行個體類型](efa.md#efa-instance-types)。

### 擷取執行個體的 EFA 驅動程式指標
<a name="view-efa-driver-metrics"></a>

您可以使用 [rdma-tool](https://man7.org/linux/man-pages/man8/rdma.8.html) 命令列工具來擷取連接至執行個體之所有 EFA 介面的指標，如下所示：

```
$ rdma -p statistic show
link rdmap0s31/1 
    tx_bytes 0 
    tx_pkts 0 
    rx_bytes 0 
    rx_pkts 0 
    rx_drops 0 
    send_bytes 0 
    send_wrs 0 
    recv_bytes 0 
    recv_wrs 0 
    rdma_read_wrs 0 
    rdma_read_bytes 0 
    rdma_read_wr_err 0 
    rdma_read_resp_bytes 0 
    rdma_write_wrs 0 
    rdma_write_bytes 0 
    rdma_write_wr_err 0
    retrans_bytes 0
    retrans_pkts 0
    retrans_timeout_events 0
    unresponsive_remote_events 0
    impaired_remote_conn_events 0
```

或者，您可以使用下列命令，從 sys 檔案擷取連接至執行個體之每個 EFA 介面的指標。

```
$ more /sys/class/infiniband/device_number/ports/port_number/hw_counters/* | cat
```

例如

```
$ more /sys/class/infiniband/rdmap0s31/ports/1/hw_counters/* | cat
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/lifespan
::::::::::::::
12
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_read_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_read_resp_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_read_wr_err
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_read_wrs
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_write_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_write_recv_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_write_wr_err
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_write_wrs
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/recv_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/recv_wrs
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rx_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rx_drops
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rx_pkts
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/send_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/send_wrs
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/tx_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/tx_pkts
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/retrans_bytes
::::::::::::::
0
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/retrans_pkts
::::::::::::::
0
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/retrans_timeout_events
::::::::::::::
0
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/unresponsive_remote_events
::::::::::::::
0
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/impaired_remote_conn_events
::::::::::::::
0
```

## Amazon VPC 流程日誌
<a name="efa-flowlog"></a>

您可以建立 Amazon VPC 流程日誌，以擷取進出 EFA 的流量的相關資訊。現在流程日誌資料可發佈至 Amazon CloudWatch Logs 與 Amazon S3。建立流量日誌之後，您可以在選擇的目的地中擷取及檢視其資料。如需詳細資訊，請參閱「Amazon VPC 使用者指南」**中的 [VPC 流程日誌](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)。

就像為彈性網絡介面建立流程日誌，您以同樣的方式為 EFA 建立流程日誌。如需詳細資訊，請參閱「Amazon VPC 使用者指南」**中的[建立流量日誌](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-flow-logs.html#create-flow-log)。

在流程日誌項目中，EFA 流量是以 `srcAddress` 和 `destAddress` 來識別，兩者的格式都是 MAC 地址，如下列範例所示。

```
version accountId  eniId        srcAddress        destAddress       sourcePort destPort protocol packets bytes start      end        action log-status
2       3794735123 eni-10000001 01:23:45:67:89:ab 05:23:45:67:89:ab -          -        -        9       5689  1521232534 1524512343 ACCEPT OK
```

## Amazon CloudWatch
<a name="efa-cloudwatch"></a>

如果您在 Amazon EKS 叢集中使用 EFA，您可以使用 CloudWatch Container Insights 監控 EFAs。Amazon CloudWatch Container Insights 支援所有 [EFA 驅動程式指標](#efa-driver-metrics)，但 `retrans_bytes`、`retrans_pkts`、`retrans_timeout_events`、`unresponsive_remote_events` 和 `impaired_remote_conn_events` 除外。

如需詳細資訊，請參閱「Amazon CloudWatch 使用者指南」**中的 [Amazon ECS Container Insights 指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-enhanced-EKS.html#Container-Insights-metrics-EFA)。

# 使用檢查總和驗證 EFA 安裝程式
<a name="efa-verify"></a>

可以選擇使用 MD5 或 SHA256 檢查總和來驗證 EFA tarball (`.tar.gz` 檔案)。我們建議您執行這項操作來確認軟體發行者的身分識別，並檢查應用程式自發行以來並未遭到變更或損毀。

**驗證 tarball 的步驟**  
使用 **md5sum** 公用程式做為 MD5 檢查總和，或使用 **Sha256sum** 公用程式做為 SHA256 檢查總和，並指定 tarball 檔案名稱。您必須從儲存 tarball 檔案的目錄執行命令。
+ MD5

  ```
  $  md5sum tarball_filename.tar.gz
  ```
+ SHA256

  ```
  $  sha256sum tarball_filename.tar.gz
  ```

這些命令應該會傳回下列格式的檢查總和值。

```
checksum_value tarball_filename.tar.gz
```

將命令傳回的檢查總和值與下表所提供的檢查總和值進行比較。如果檢查總和相符，則可以安全地執行安裝指令碼。如果檢查總和不相符，請勿執行安裝指令碼，然後聯絡 支援。

例如，下列指令會使用 SHA256 檢查總和來驗證 EFA 1.9.4 tarball。

```
$  sha256sum aws-efa-installer-1.9.4.tar.gz
```

輸出範例：

```
1009b5182693490d908ef0ed2c1dd4f813cc310a5d2062ce9619c4c12b5a7f14 aws-efa-installer-1.9.4.tar.gz
```

下表列出 EFA 最新版本的檢查總和。


| 版本 | 檢查總和 | 
| --- | --- | 
| EFA 1.47.0 |  **MD5: **`c81d4caf24dabc04a6e4818590620f5f` **SHA256：**`2df4201e046833c7dc8160907bee7f52b76ff80ed147376a2d0ed8a0dd66b2db`  | 
| EFA 1.46.0 |  **MD5：**a88bbd9b71624d7ca401b54bc2fc0c19`` **SHA256：**`8302bd7849afb95c903a875d7dcb6f85b3d7629e9a8b67d020031cfc6f4d0ee1`  | 
| EFA 1.45.1 |  **MD5：**91c3c87e16bbcaca1513252c38b771bb`` **SHA256：**`9aeb20c645135b6039cc08986d8f14e63280f7839e882a74df5e83627ffeaa17`  | 
| EFA 1.45.0 |  **MD5：**800aeddfa9d9c5f139a7b8f7c4fec627`` **SHA256：**`25ba26a0877fe3317390dc126aad2f23e27fc461cf0b940004f032cb342fa539`  | 
| EFA 1.44.0 |  **MD5: **d024f6bebe080db42745103b84ca7c43`` **SHA256：**`f129a5b44a49d593d247e55a59eb9bcb57121566e1c2e42b832a4e794fa83d8a`  | 
| EFA 1.43.3 |  **MD5: **`4dbc6eeecc516760253c10cbedb6319d` **SHA256：**`6c470ebce254c7165347b5048895ac2996c88567271642297f4c597738300652`  | 
| EFA 1.43.2 |  **MD5: **`7287b25a07c9747c0d4001e8fc5f59b2` **SHA256：**`de15c5bdbc83b952afbde876110830c604ad0796680e5157c05f7c1979a41069`  | 
| EFA 1.43.1 |  **MD5: **`7cfafc8debaea51dd4966fa0b2bba673` **SHA256: **54211eda0c193138ee8ed09b5fb41c41fc76fe0a77935fa4ec8d989466342740``  | 
| EFA 1.43.0 |  **MD5: **`f2b3dd7dc8670b541f7c23fd58e5e503` **SHA256：**`786df3458c499237be33bb8e50ffd4da7c18c20e254380ffc80fb90833d8cc73`  | 
| EFA 1.42.0 |  **MD5: **`94b2b1db09da1dde08ec049db1f24370` **SHA256：**`4114fe612905ee05083ae5cb391a00a012510f3abfecc642d86c9a5ae4be9008`  | 
| EFA 1.41.0 |  **MD5: **`086181c3ee3f8da512fc6e1c795e8936` **SHA256：**`3506354cdfbe31ff552fe75f5d0d9bb7efd29cf79bd99457347d29c751c38f9f`  | 
| EFA 1.40.0 |  **MD5: **`f3ec6f73fbeaccba082327507581157c` **SHA256：**`30491b0fe7c3470d4439594538855c981b05fa69862d74f8c05eb9b97912368a`  | 
| EFA 1.39.0 |  **MD5: **`c223d5954a85a7fbcd248c942b866e43` **SHA256：**`2cbc028c03064633bb990782b47c36156637769e2f48704417a9c700a7a32101`  | 
| EFA 1.38.1 |  **MD5: **`f112569e828ab65187777f794bab542c` **SHA256：**`83923374afd388b1cfcf4b3a21a2b1ba7cf46a01a587f7b519b8386cb95e4f81`  | 
| EFA 1.38.0 |  **MD5: **`43a2a446b33a2506f40853d55059f1ea` **SHA256：**`4f436954f35ad53754b4d005fd8d0be63de3b4184de41a695b504bdce0fecb22`  | 
| EFA 1.37.0 |  **MD5: **`6328070192bae920eca45797ad4c1db1` **SHA256：**`2584fc3c8bb99f29b3285e275747ff09d67c18e162c2a652e36c976b72154bfb`  | 
| EFA 1.36.0 |  **MD5: **`1bec83180fbffb23452ab6469ca21dfa` **SHA256：**`de183f333cfb58aeb7908a67bf9106985ba3ccb7f8638b851d2a0d8dbfacaec4`  | 
| EFA 1.35.0 |  **MD5: **`252f03c978dca5f8e8d9f34e488b256e` **SHA256：**`432b6ad4368ba0cd8b902729d14a908a97be7a3dcc5239422ea994a47f35a5e1`  | 
| EFA 1.34.0 |  **MD5: **`5cd4b28d27a31677c16139b54c9acb45` **SHA256：**`bd68839e741b0afd3ec2e37d50603803cfa7a279c120f0a736cc57c2ff2d7fdc`  | 
| EFA 1.33.0 |  **MD5: **`e2f61fccbcaa11e2ccfddd3660522276` **SHA256：**`0372877b87c6a7337bb7791d255e1053b907d030489fb2c3732ba70069185fce`  | 
| EFA 1.32.0 |  **MD5: **`db8d65cc028d8d08b5a9f2d88881c1b1` **SHA256：**`5f7233760be57f6fee6de8c09acbfbf59238de848e06048dc54d156ef578fc66`  | 
| EFA 1.31.0 |  **MD5: **`856352f12bef2ccbadcd75e35aa52aaf` **SHA256：**`943325bd37902a4300ac9e5715163537d56ecb4e7b87b37827c3e547aa1897bf`  | 
| EFA 1.30.0 |  **MD5: **`31f48e1a47fe93ede8ebd273fb747358` **SHA256：**`876ab9403e07a0c3c91a1a34685a52eced890ae052df94857f6081c5f6c78a0a`  | 
| EFA 1.29.1 |  **MD5: **`e1872ca815d752c1d7c2b5c175e52a16` **SHA256：**`178b263b8c25845b63dc93b25bcdff5870df5204ec509af26f43e8d283488744`  | 
| EFA 1.29.0 |  **MD5: **`39d06a002154d94cd982ed348133f385` **SHA256：**`836655f87015547e733e7d9f7c760e4e24697f8bbc261bb5f3560abd4206bc36`  | 
| EFA 1.28.0 |  **MD5: **`9dc13b7446665822605e66febe074035` **SHA256：**`2e625d2d6d3e073b5178e8e861891273d896b66d03cb1a32244fd56789f1c435`  | 
| EFA 1.27.0 |  **MD5: **`98bfb515ea3e8d93f554020f3837fa15` **SHA256：**`1d49a97b0bf8d964d91652a79ac851f2550e33a5bf9d0cf86ec9357ff6579aa3`  | 
| EFA 1.26.1 |  **MD5: **`884e74671fdef4725501f7cd2d451d0c` **SHA256：**`c616994c924f54ebfabfab32b7fe8ac56947fae00a0ff453d975e298d174fc96`  | 
| EFA 1.26.0 |  **MD5: **`f8839f12ff2e3b9ba09ae8a82b30e663` **SHA256：**`bc1abc1f76e97d204d3755d2a9ca307fc423e51c63141f798c2f15be3715aa11`  | 
| EFA 1.25.1 |  **MD5: **`6d876b894547847a45bb8854d4431f18` **SHA256：**`d2abc553d22b89a4ce92882052c1fa6de450d3a801fe005da718b7d4b9602b06`  | 
| EFA 1.25.0 |  **MD5: **`1993836ca749596051da04694ea0d00c` **SHA256：**`98b7b26ce031a2d6a93de2297cc71b03af647194866369ca53b60d82d45ad342`  | 
| EFA 1.24.1 |  **MD5: **`211b249f39d53086f3cb0c07665f4e6f` **SHA256：**`120cfeec233af0955623ac7133b674143329f9561a9a8193e473060f596aec62`  | 
| EFA 1.24.0 |  **MD5: **`7afe0187951e2dd2c9cc4b572e62f924` **SHA256：**`878623f819a0d9099d76ecd41cf4f569d4c3aac0c9bb7ba9536347c50b6bf88e`  | 
| EFA 1.23.1 |  **MD5: **`22491e114b6ee7160a8290145dca0c28` **SHA256：**`5ca848d8e0ff4d1571cd443c36f8d27c8cdf2a0c97e9068ebf000c303fc40797`  | 
| EFA 1.23.0 |  **MD5: **`38a6d7c1861f5038dba4e441ca7683ca` **SHA256：**`555d497a60f22e3857fdeb3dfc53aa86d05926023c68c916d15d2dc3df6525bd`  | 
| EFA 1.22.1 |  **MD5: **`600c0ad7cdbc06e8e846cb763f92901b` **SHA256：**`f90f3d5f59c031b9a964466b5401e86fd0429272408f6c207c3f9048254e9665`  | 
| EFA 1.22.0 |  **MD5: **`8f100c93dc8ab519c2aeb5dab89e98f8` **SHA256：**`f329e7d54a86a03ea51da6ea9a5b68fb354fbae4a57a02f9592e21fce431dc3a`  | 
| EFA 1.21.0 |  **MD5: **`959ccc3a4347461909ec02ed3ba7c372` **SHA256：**`c64e6ca34ccfc3ebe8e82d08899ae8442b3ef552541cf5429c43d11a04333050`  | 
| EFA 1.20.0 |  **MD5: **`7ebfbb8e85f1b94709df4ab3db47913b` **SHA256：**`aeefd2681ffd5c4c631d1502867db5b831621d6eb85b61fe3ec80df983d1dcf0`  | 
| EFA 1.19.0 |  **MD5: **`2fd45324953347ec5518da7e3fefa0ec` **SHA256：**`99b77821b9e72c8dea015cc92c96193e8db307deee05b91a58094cc331f16709`  | 
| EFA 1.18.0 |  **MD5: **`fc2571a72f5d3c7b7b576ce2de38d91e` **SHA256：**`acb18a0808aedb9a5e485f1469225b9ac97f21db9af78e4cd6939700debe1cb6`  | 
| EFA 1.17.3 |  **MD5: **`0517df4a190356ab559235147174cafd` **SHA256：**`5130998b0d2883bbae189b21ab215ecbc1b01ae0231659a9b4a17b0a33ebc6ca`  | 
| EFA 1.17.2 |  **MD5: **`a329dedab53c4832df218a24449f4c9a` **SHA256：**`bca1fdde8b32b00346e175e597ffab32a09a08ee9ab136875fb38283cc4cd099`  | 
| EFA 1.17.1 |  **MD5: **`733ae2cfc9d14b52017eaf0a2ab6b0ff` **SHA256：**`f29322640a88ae9279805993cb836276ea240623820848463ca686c8ce02136f`  | 
| EFA 1.17.0 |  **MD5: **`d430fc841563c11c3805c5f82a4746b1` **SHA256：**`75ab0cee4fb6bd38889dce313183f5d3a83bd233e0a6ef6205d8352821ea901d`  | 
| EFA 1.16.0 |  **MD5: **`399548d3b0d2e812d74dd67937b696b4` **SHA256：**`cecec36495a1bc6fdc82f97761a541e4fb6c9a3cbf3cfcb145acf25ea5dbd45b`  | 
| EFA 1.15.2 |  **MD5: **`955fea580d5170b05823d51acde7ca21` **SHA256：**`84df4fbc1b3741b6c073176287789a601a589313accc8e6653434e8d4c20bd49`  | 
| EFA 1.15.1 |  **MD5: **`c4610267039f72bbe4e35d7bf53519bc` **SHA256：**`be871781a1b9a15fca342a9d169219260069942a8bda7a8ad06d4baeb5e2efd7`  | 
| EFA 1.15.0 |  **MD5: **`9861694e1cc00d884fadac07d22898be` **SHA256：**`b329862dd5729d2d098d0507fb486bf859d7c70ce18b61c302982234a3a5c88f`  | 
| EFA 1.14.1 |  **MD5: **`50ba56397d359e57872fde1f74d4168a` **SHA256：**`c7b1b48e86fe4b3eaa4299d3600930919c4fe6d88cc6e2c7e4a408a3f16452c7`  | 
| EFA 1.14.0 |  **MD5: **`40805e7fd842c36ececb9fd7f921b1ae` **SHA256：**`662d62c12de85116df33780d40e0533ef7dad92709f4f613907475a7a1b60a97`  | 
| EFA 1.13.0 |  **MD5: **`c91d16556f4fd53becadbb345828221e` **SHA256：**`ad6705eb23a3fce44af3afc0f7643091595653a723ad0374084f4f2b715192e1`  | 
| EFA 1.12.3 |  **MD5: **`818aee81f097918cfaebd724eddea678` **SHA256：**`2c225321824788b8ca3fbc118207b944cdb096b847e1e0d1d853ef2f0d727172`  | 
| EFA 1.12.2 |  **MD5: **`956bb1fc5ae0d6f0f87d2e481d49fccf` **SHA256: **`083a868a2c212a5a4fcf3e4d732b685ce39cceb3ca7e5d50d0b74e7788d06259`  | 
| EFA 1.12.1 |  **MD5: **`f5bfe52779df435188b0a2874d0633ea` **SHA256: **`5665795c2b4f09d5f3f767506d4d4c429695b36d4a17e5758b27f033aee58900`  | 
| EFA 1.12.0 |  **MD5: **`d6c6b49fafb39b770297e1cc44fe68a6` **SHA256: **`28256c57e9ecc0b0778b41c1f777a9982b4e8eae782343dfe1246079933dca59`  | 
| EFA 1.11.2 |  **MD5: **`2376cf18d1353a4551e35c33d269c404` **SHA256: **`a25786f98a3628f7f54f7f74ee2b39bc6734ea9374720507d37d3e8bf8ee1371`  | 
| EFA 1.11.1 |  **MD5: **`026b0d9a0a48780cc7406bd51997b1c0` **SHA256: **`6cb04baf5ffc58ddf319e956b5461289199c8dd805fe216f8f9ab8d102f6d02a`  | 
| EFA 1.11.0 |  **MD5: **`7d9058e010ad65bf2e14259214a36949` **SHA256: **`7891f6d45ae33e822189511c4ea1d14c9d54d000f6696f97be54e915ce2c9dfa`  | 
| EFA 1.10.1 |  **MD5: **`78521d3d668be22976f46c6fecc7b730` **SHA256: **`61564582de7320b21de319f532c3a677d26cc46785378eb3b95c636506b9bcb4`  | 
| EFA 1.10.0 |  **MD5: **`46f73f5a7afe41b4bb918c81888fefa9` **SHA256: **`136612f96f2a085a7d98296da0afb6fa807b38142e2fc0c548fa986c41186282`  | 
| EFA 1.9.5 |  **MD5: **`95edb8a209c18ba8d250409846eb6ef4` **SHA256: **`a4343308d7ea4dc943ccc21bcebed913e8868e59bfb2ac93599c61a7c87d7d25`  | 
| EFA 1.9.4 |  **MD5: **`f26dd5c350422c1a985e35947fa5aa28` **SHA256: **`1009b5182693490d908ef0ed2c1dd4f813cc310a5d2062ce9619c4c12b5a7f14`  | 
| EFA 1.9.3 |  **MD5: **`95755765a097802d3e6d5018d1a5d3d6` **SHA256: **`46ce732d6f3fcc9edf6a6e9f9df0ad136054328e24675567f7029edab90c68f1`  | 
| EFA 1.8.4 |  **MD5: **`85d594c41e831afc6c9305263140457e` **SHA256：**`0d974655a09b213d7859e658965e56dc4f23a0eee2dc44bb41b6d039cc5bab45`  | 

# Elastic Fabric Adapter 版本備註
<a name="efa-changelog"></a>

下表說明 Elastic Fabric Adapter 軟體的版本歷史記錄和變更日誌。


| 版本 | 變更 | 版本日期 | 
| --- | --- | --- | 
| 1.47.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2026 年 1 月 29 日 | 
| 1.46.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 12 月 12 日 | 
| 1.45.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 11 月 26 日 | 
| 1.45.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 11 月 17 日 | 
| 1.44.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 10 月 29 日 | 
| 1.43.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 10 月 01 日 | 
| 1.43.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 8 月 15 日 | 
| 1.43.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 7 月 31 日 | 
| 1.43.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 7 月 25 日 | 
| 1.42.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 6 月 6 日 | 
| 1.41.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 5 月 16 日 | 
| 1.40.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 5 月 2 日 | 
| 1.39.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 4 月 16 日 | 
| 1.38.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 3 月 3 日 | 
| 1.38.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 1 月 8 日 | 
| 1.37.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 11 月 18 日 | 
| 1.36.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 11 月 7 日 | 
| 1.35.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 10 月 14 日 | 
| 1.34.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 8 月 6 日 | 
| 1.33.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 6 月 20 日 | 
| 1.32.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 4 月 18 日 | 
| 1.31.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 3 月 7 日 | 
| 1.30.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 12 月 | 
| 1.29.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 12 月 | 
| 1.29.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 11 月 | 
| 1.28.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 10 月 | 
| 1.27.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 9 月 | 
| 1.26.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 9 月 | 
| 1.26.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 9 月 | 
| 1.25.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 9 月 | 
| 1.25.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 7 月 | 
| 1.24.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 7 月 | 
| 1.24.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 6 月 | 
| 1.23.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 6 月 | 
| 1.23.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 5 月 | 
| 1.22.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 3 月 | 
| 1.22.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 2 月 | 
| 1.21.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 12 月 | 
| 1.20.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 11 月 | 
| 1.19.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 10 月 | 
| 1.18.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 8 月 | 
| 1.17.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 8 月 | 
| 1.17.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 7 月 | 
| 1.17.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 7 月 | 
| 1.17.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 7 月 | 
| 1.16.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 6 月 | 
| 1.15.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 5 月 | 
| 1.15.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 3 月 | 
| 1.15.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 2 月 | 
| 1.14.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 10 月 | 
| 1.14.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 10 月 | 
| 1.13.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 8 月 | 
| 1.12.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 7 月 | 
| 1.12.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 6 月 | 
| 1.12.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 5 月 | 
| 1.12.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 5 月 | 
| 1.11.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 2 月 | 
| 1.11.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 12 月 | 
| 1.11.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 12 月 | 
| 1.10.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 11 月 | 
| 1.10.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 10 月 | 
| 1.9.5 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 9 月 | 
| 1.9.4 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 7 月 | 
| 1.9.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 6 月 | 
| 1.8.4 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 4 月 | 
| 1.8.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 2 月 | 
| 1.8.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 1 月 | 
| 1.8.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 1 月 | 
| 1.8.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 12 月 | 
| 1.7.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 12 月 | 
| 1.7.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 11 月 | 
| 1.6.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 10 月 | 
| 1.6.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 10 月 | 
| 1.5.4 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 9 月 | 
| 1.5.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 9 月 | 
| 1.5.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 8 月 | 
| 1.5.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 8 月 | 
| 1.4.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 7 月 | 
| 1.4.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 7 月 | 