本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 EFA 启动 AWS Deep Learning AMI 实例
最新 DLAMI可随时与 EFA 结合使用,并随附所需的驱动程序、内核模块、libfabric、openmpi 和适用于 GPU 实例的 NCCL OFI 插件
支持的 CUDA 版本:具有 EFA 的 NCCL 应用程序仅在 CUDA-10.0、CUDA-10.1、CUDA-10.2 和 CUDA-11.0 上受支持,因为 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 文档
-
通过 https://console.aws.amazon.com/ec2/
打开 Amazon EC2 控制台。 -
在导航窗格中,选择 Security Groups,然后选择 Create Security Group。
-
在 Create Security Group 窗口中,执行以下操作:
-
对于 Security group name (安全组名称),输入安全组的描述性名称,例如
EFA-enabled security group
。 -
(可选)对于 Description (描述),输入安全组的简要描述。
-
对于 VPC,选择要在其中启动启用了 EFA 的实例的 VPC。
-
选择创建。
-
-
选择您创建的安全组,然后在 Description (描述) 选项卡上复制 Group ID (组 ID)。
-
在 Inbound (入站) 和 Outbound (出站) 选项卡上,执行以下操作:
-
选择 Edit。
-
对于 Type (类型),请选择 All traffic (所有流量)。
-
对于 Source,选择 Custom。
-
将您复制的安全组 ID 粘贴到该字段中。
-
选择 Save。
-
-
启用入站流量,请参考授权您 Linux 实例的入站流量
。如果您跳过此步骤,您将无法与您的 DLAMI 实例进行通信。
启动实例
上的 EFA 目前支持以下实例类型和操作系统:AWS Deep Learning AMI
-
P3dn.24xlarge:Amazon Linux、Amazon Linux 2、Ubuntu 16.04 和 Ubuntu 18.04
-
P4d.24xlarge:Amazon Linux 2、Ubuntu 16.04 和 Ubuntu 18.04
以下部分说明如何启动启用了 EFA 的 DLAMI 实例。有关启动启用了 EFA 的实例的更多信息,请参阅在集群置放群组中启动启用了 EFA 的实例
-
通过 https://console.aws.amazon.com/ec2/
打开 Amazon EC2 控制台。 -
选择 Launch Instance。
-
在选择一个 AMI 页面上,选择“深度学习 AMI (Ubuntu 18.04) 版本 25.0”
-
在 Choose an Instance Type 页面上,选择以下支持的实例类型之一,然后选择 Next:配置实例详细信息。有关支持的实例列表,请参阅此链接:https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html
-
在 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 (添加存储) 页面上,除了 AMI 指定的卷(如根设备卷)以外,还要指定要附加到实例的卷,然后选择 Next: (下一步:)。 添加标签。
-
在 Add Tags 页面上,为实例指定标签 (如用户友好型名称),然后选择 Next: 配置安全组。
-
在 Configure Security Group 页面上,对于 Assign a security group,选择 Select an existing security group,然后选择您之前创建的安全组。
-
选择 Review and Launch。
-
在 Review Instance Launch (核查实例启动) 页面上,检查这些设置,然后选择 Launch (启动) 以选择一个密钥对并启动您的实例。
验证 EFA 附件
通过控制台
启动实例后,在 AWS 控制台中查看实例详细信息。为此,请在 EC2 控制台中选择实例,然后查看页面下部窗格中的 Description (描述) 选项卡。找到参数“Network Interfaces: eth0”,然后单击 eth0,这将弹出一个弹出窗口。确保“Elastic Fabric Adapter”已启用。
如果未启用 EFA,您可以通过以下任一方式解决此问题:
-
终止 EC2 实例并使用相同步骤启动新实例。确保已附加 EFA。
-
将 EFA 附加到现有实例。
-
在 EC2 控制台中,转到 Network Interfaces (网络接口)。
-
单击 Create a Network Interface (创建虚拟网络接口)。
-
选择您的实例所在的相同子网。
-
确保启用“Elastic Fabric Adapter”并点击 Create (创建)。
-
返回 EC2 Instances (EC2 实例) 选项卡并选择您的实例。
-
转到操作:实例状态并在附加 EFA 之前停止实例。
-
从 Actions (操作) 中,选择 Networking (联网):附加网络接口。
-
选择您刚刚创建的界面,然后点击“附加”。
-
重新启动您的实例。
-
通过实例
以下测试脚本已存在于 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 ~/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
如果它停止响应或未完成,请确保您的安全组具有正确的入站/出站规则。