深度学习 AMI
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 EFA 启动 AWS Deep Learning AMI 实例

最新 DLAMI可随时与 EFA 结合使用,并随附所需的驱动程序、内核模块、libfabric、openmpi 和适用于 GPU 实例的 NCCL OFI 插件

支持的 AMI:AWS Deep Learning AMI (Ubuntu 18.04) 版本 25.0

支持的 CUDA 版本:只有使用 EFA 的 NCCL 应用程序才在 CUDA-10.0 和 CUDA-10.1 上受支持,因为 NCCL OFI 插件要求 NCCL 版本 > 2.4.2。

注意:

  • 在 EFA 上使用 mpirun 运行 NCCL 应用程序时,必须将 EFA 支持的安装的完整路径指定为:

    /opt/amazon/openmpi/bin/mpirun <command>
  • 要使您的应用程序能够使用 EFA,请将 FI_PROVIDER="efa" 添加到 mpirun 命令,如在 DLAMI 上使用 EFA中所示。

准备启用 EFA 的安全组

EFA 需要使用一个安全组,以允许进出安全组本身的所有入站和出站流量。 有关更多信息,请参阅 EFA 文档

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 在导航窗格中,选择 Security Groups (安全组),然后选择 Create Security Group (创建安全组)

  3. Create Security Group (创建安全组) 窗口中,执行以下操作:

    • 对于 Security group name (安全组名称),请输入一个描述性的安全组名称,例如 EFA-enabled security group

    • (可选)对于 Description (描述),请输入安全组的简要描述。

    • 对于 VPC,请选择要在其中启动启用了 EFA 的实例的 VPC。

    • 选择 Create (创建)

  4. 选择您创建的安全组,然后在 Description (描述) 选项卡上复制 Group ID (组 ID)

  5. Inbound (入站)Outbound (出站) 选项卡上,执行以下操作:

    • 选择 Edit (编辑)

    • 对于 Type (类型),请选择 All traffic (所有流量)

    • 对于 Source (源),选择 Custom (自定义)

    • 将您复制的安全组 ID 粘贴到该字段中。

    • 选择 Save (保存)。 

  6. 启用入站流量,请参考授权您 Linux 实例的入站流量。如果您跳过此步骤,您将无法与您的 DLAMI 实例进行通信。

启动实例

有关更多信息,请参阅在集群置放群组中启动启用 EFA 的实例

  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

  2. 选择 Launch Instance (启动实例)

  3. Choose an AMI (选择 AMI) 页面上,选择“深度学习 AMI (Ubuntu 18.04) 25.0版”

  4. Choose an Instance Type (选择实例类型) 页面上,选择以下支持的实例类型之一,然后选择下一步:配置实例详细信息。 有关支持的实例列表,请参阅此链接:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html

  5. Configure Instance Details (配置实例详细信息) 页面中,执行以下操作:

    • 对于 Number of instances (实例的数量),请输入要启动的启用了 EFA 的实例数量。

    • 对于 Network (网络)Subnet (子网),请选择要在其中启动实例的 VPC 和子网。

    • 对于 Placement group (置放群组),请选择 Add instance to placement group (将实例添加到置放群组)。为获得最佳性能,请在置放群组中启动实例。

    • (可选)对于 Placement group name (置放群组名称),请选择 Add to a new placement group (添加到新的置放群组),输入一个描述性的置放群组名称,然后为 Placement group strategy (置放群组策略) 选择 cluster (集群)

    • 请确保在此页面上启用“Elastic Fabric Adapter”。如果禁用此选项,请将子网更改为支持所选实例类型的子网。 

    • Network Interfaces (网络接口) 部分中,为设备 eth0 选择 New network interface (新网络接口)。您可以选择指定主 IPv4 地址以及一个或多个辅助 IPv4 地址。如果在具有关联的 IPv6 CIDR 块的子网中启动实例,您可以选择指定主 IPv6 地址以及一个或多个辅助 IPv6 地址。

    • 选择 Next: Add Storage (下一步:添加存储)

  6. Add Storage (添加存储) 页面上,除了 AMI 指定的卷(如根设备卷)以外,还要指定要附加到实例的卷,然后选择 Next: Add Tags (下一步:添加标签)

  7. Add Tags (添加标签) 页面上,为实例指定标签(例如,便于用户识别的名称),然后选择 Next: Configure Security Group (下一步:配置安全组)

  8. Configure Security Group (配置安全组) 页面上,为 Assign a security group (分配安全组) 选择 Select an existing security group (选择一个现有的安全组),然后选择先前创建的安全组

  9. 选择 Review and Launch (审核并启动)

  10. Review Instance Launch (核查实例启动) 页面上,检查这些设置,然后选择 Launch (启动) 以选择一个密钥对并启动您的实例。

验证 EFA 附件

通过控制台

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

如果未启用 EFA,您可以通过以下任一方式解决此问题:

  • 终止 EC2 实例并使用相同步骤启动新实例。确保已附加 EFA。

  • 将 EFA 附加到现有实例。

    1. 在 EC2 控制台中,转到 Network Interfaces (网络接口)。

    2. 单击 Create a Network Interface (创建虚拟网络接口)。

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

    4. 确保启用“Elastic Fabric Adapter”并点击 Create (创建)。

    5. 返回 EC2 Instances (EC2 实例) 选项卡并选择您的实例。

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

    7. 从 “操作”中,选择“网络连接:连接网络接口”。

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

    9. 重新启动您的实例。

通过实例

以下测试脚本已存在于 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

验证安全组配置

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

$ cd /home/ubuntu/src/bin/efa-tests/ $ ./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

如果它挂起或未完成,请确保您的安全组具有正确的入站/出站规则。