

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

# 使用 EFA 启动 AWS Deep Learning AMIs 实例
<a name="tutorial-efa-launching"></a>

最新基础 DLAMI 可随时与 EFA 结合使用，并随附所需的驱动程序、内核模块、libfabric、openmpi 和适用于 GPU 实例的 [NCCL OFI 插件](https://github.com/aws/aws-ofi-nccl/tree/aws)。

您可以在[发布说明](appendix-ami-release-notes.md#appendix-ami-release-notes-base)中找到基础 DLAMI 的支持 CUDA 版本。

注意：
+ 在 EFA 上使用 `mpirun` 运行 NCCL 应用程序时，必须将 EFA 支持的安装的完整路径指定为：

  ```
  /opt/amazon/openmpi/bin/mpirun <command>  
  ```
+ 要使您的应用程序能够使用 EFA，请将 `FI_PROVIDER="efa"` 添加到 `mpirun` 命令，如[在 DLAMI 上使用 EFA](tutorial-efa-using.md)中所示。

**Topics**
+ [准备 EFA 启用的安全组](#tutorial-efa-security-group)
+ [启动实例](#tutorial-efa-launch)
+ [验证 EFA 附件](#tutorial-efa-verify-attachment)

## 准备 EFA 启用的安全组
<a name="tutorial-efa-security-group"></a>

EFA 需要一个安全组来支持进出安全组本身的所有入站和出站流量。有关更多信息，请参阅 [EFA 文档](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-security)。

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**安全组**，然后选择**创建安全组**。

1. 在**创建安全组**窗口中，执行以下操作：
   + 对于**安全组名称**，请输入一个描述性的安全组名称，例如 `EFA-enabled security group`。
   + （可选）对于**描述**，请输入安全组的简要描述。
   + 对于 **VPC**，请选择要在其中启动启用了 EFA 的实例的 VPC。
   + 选择**创建**。

1. 选择您创建的安全组，然后在**描述** 选项卡上复制**组 ID**。

1. 在**入站**和**出站**选项卡上，执行以下操作：
   + 选择**编辑**。
   + 对于**类型**，请选择**所有流量**。
   + 对于 **Source**，选择 **Custom**。
   + 将您复制的安全组 ID 粘贴到该字段中。
   + 选择**保存**。

1. 启用入站流量，请参考[授权您 Linux 实例的入站流量](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html)。如果跳过此步骤，您将无法与您的 DLAMI 实例进行通信。

## 启动实例
<a name="tutorial-efa-launch"></a>

目前 AWS Deep Learning AMIs ，以下实例类型和操作系统支持上的 EFA：
+  P3dn：Amazon Linux 2、Ubuntu 20.04
+  P4d、P4de：Amazon Linux 2、Amazon Linux 2023、Ubuntu 20.04、Ubuntu 22.04
+  P5、P5e、P5en：Amazon Linux 2、Amazon Linux 2023、Ubuntu 20.04、Ubuntu 22.04

下节介绍如何启动启用了 EFA 的 DLAMI 实例。有关启动 EFA 启用的 DLAMI 实例的更多信息，请参阅[在集群置放群组中启动 EFA 启用的实例](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html#efa-start-instances)。

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 选择**启动实例**。

1. 在**选择 AMI** 页面上，选择在 [DLAMI Release Notes Page](https://docs.aws.amazon.com/dlami/latest/devguide/appendix-ami-release-notes) 上找到的受支持的 DLAMI。

1. 在**选择实例类型**页面上，选择以下支持的实例类型之一，然后选择**下一步：配置实例详细信息**。有关受支持的实例的列表，请参阅此链接：[开始使用 EFA 和 MPI](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html)。

1. 在**配置实例详细信息**页面中，执行以下操作：
   + 对于**实例的数量**，请输入要启动的启用了 EFA 的实例数量。
   + 对于**网络** 和**子网**，请选择要在其中启动实例的 VPC 和子网。
   + [可选] 对于**置放群组**，请选择**将实例添加到置放群组**。为获得最佳性能，请在置放群组中启动实例。
   + [可选] 对于**置放群组名称**，请选择**添加到新的置放群组**，输入置放群组的描述性名称，然后对于**置放群组策略**选择**集群**。
   + 请务必在此页面上启用**“Elastic Fabric Adapter”**。如果禁用此选项，请将子网更改为支持所选实例类型的子网。
   + 在**网络接口**部分中，为设备 **eth0** 选择**新网络接口**。您可以选择指定一个主 IPv4 地址和一个或多个辅助 IPv4 地址。如果您要在具有关联 IPv6 CIDR 块的子网中启动实例，则可以选择指定一个主 IPv6 地址和一个或多个辅助 IPv6 地址。
   + 选择**下一步：添加存储**。

1. 在**添加存储**页面上，除了 AMI 指定的卷（如根设备卷）以外，还要指定要附加到实例的卷，然后选择**下一步：添加标签**。

1. 在**添加标签**页面上，为实例指定标签（例如，便于用户识别的名称），然后选择**下一步：配置安全组**。

1. 在**配置安全组**页面上，对于**分配安全组**选择**选择一个现有的安全组**，然后选择先前创建的安全组**。**

1. 选择**审核并启动**。

1. 在**核查实例启动**页面上，检查这些设置，然后选择**启动**以选择一个密钥对并启动您的实例。

## 验证 EFA 附件
<a name="tutorial-efa-verify-attachment"></a>

### 通过控制台
<a name="tutorial-efa-verify-attachment-console"></a>

启动实例后，请在 AWS 控制台中查看实例详细信息。为此，请在 EC2 控制台中选择实例，然后查看页面下部窗格中的 Description (描述) 选项卡。找到参数“Network Interfaces: eth0”，然后单击 eth0，这将弹出一个弹出窗口。确保已启用“Elastic Fabric Adapter”。

如果未启用 EFA，您可以通过以下任一方式解决此问题：
+ 终止 EC2 实例并使用相同步骤启动新实例。确保已附加 EFA。
+ 将 EFA 附加到现有实例。

  1. 在 EC2 控制台中，转到“网络接口”。

  1. 单击“创建虚拟网络接口”。

  1. 选择您的实例所在的相同子网。

  1. 确保启用“Elastic Fabric Adapter”并点击“创建”。

  1. 返回“EC2 实例”选项卡并选择您的实例。

  1. 转到“操作：实例状态”并在附加 EFA 之前停止实例。

  1. 从 “操作”中，选择“网络连接：连接网络接口”。

  1. 选择您刚刚创建的界面，然后点击“附加”。

  1. 重新启动您的实例。

### 通过实例
<a name="tutorial-efa-verify-attachment-instance"></a>

以下测试脚本已存在于 DLAMI 中。运行它以确保内核模块正确加载。

```
$ fi_info -p efa
```

您的输出应类似于以下内容。

```
provider: efa
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-rdm
    version: 2.0
    type: FI_EP_RDM
    protocol: FI_PROTO_EFA
provider: efa
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-dgrm
    version: 2.0
    type: FI_EP_DGRAM
    protocol: FI_PROTO_EFA
provider: efa;ofi_rxd
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-dgrm
    version: 1.0
    type: FI_EP_RDM
    protocol: FI_PROTO_RXD
```

### 验证安全组配置
<a name="tutorial-efa-verify-attachment-security"></a>

以下测试脚本已存在于 DLAMI 中。运行它以确保您创建的安全组配置正确。

```
$ cd /opt/amazon/efa/test/ 
$ ./efa_test.sh
```

您的输出应类似于以下内容。

```
Starting server...
Starting client...
bytes   #sent   #ack     total       time     MB/sec    usec/xfer   Mxfers/sec
64      10      =10      1.2k        0.02s      0.06    1123.55       0.00
256     10      =10      5k          0.00s     17.66      14.50       0.07
1k      10      =10      20k         0.00s     67.81      15.10       0.07
4k      10      =10      80k         0.00s    237.45      17.25       0.06
64k     10      =10      1.2m        0.00s    921.10      71.15       0.01
1m      10      =10      20m         0.01s   2122.41     494.05       0.00
```

如果它停止响应或未完成，请确保您的安全组具有正确的 inbound/outbound 规则。