适用于 Amazon EC2 上 AI/ML 和 HPC 工作负载的 Elastic Fabric Adapter
Elastic Fabric Adapter(EFA)是一种网络设备,可以将其附加到 Amazon EC2 实例以加速人工智能(AI)、机器学习(ML)和高性能计算(HPC)应用程序。EFA 使您能够利用 AWS 云提供的可伸缩性、灵活性和弹性,实现本地 AI/ML 或 HPC 集群的应用程序性能。
与以前在基于云的 HPC 系统中使用的 TCP 传输相比,EFA 提供更低且更一致的延迟和更高的吞吐量。它提高了实例间通信的性能,这对于扩展 AI/ML 和 HPC 应用程序至关重要。它经过优化以在现有的 AWS 网络基础设施上使用,并且可以根据应用程序要求进行扩展。
EFA 与 Libfabric 1.7.0 及更高版本集成在一起,并支持适用于 AI 和 ML 应用程序的 Nvidia Collective Communications Library(NCCL),以及适用于 HPC 应用程序的 Open MPI 4 及更高版本和 Intel MPI 2019 Update 5 及更高版本。
内容
EFA 基础知识
EFA 设备可以通过两种方式附加到 EC2 实例:
-
使用传统 EFA 接口(也称为带 ENA 的 EFA),它可以创建 EFA 设备和 ENA 设备。
-
使用仅限 EFA 的接口,该接口仅创建 EFA 设备。
EFA 设备通过可扩展的可靠数据报(SRD)协议提供内置操作系统绕过和拥塞控制等功能。EFA 设备功能支持低延迟、可靠的传输功能,可让 EFA 接口为 Amazon EC2 上的 HPC 和 ML 应用程序提供更理想的应用程序性能。ENA 设备则提供传统的 IP 联网。
以前,AI/ML 应用程序使用 NCCL、HPC 应用程序使用消息传递接口(MPI)与系统的网络传输进行交互。在 AWS 云中,这意味着应用程序与NCCL 或 MPI 进行交互,然后 MPI 使用操作系统的 TCP/IP 堆栈和 ENA 设备驱动程序以启用实例之间的网络通信。
对于传统 EFA(带 ENA 的 EFA)或仅限 EFA 的接口,AI/ML 应用程序使用 NCCL、HPC 应用程序使用 MPI 直接与 Libfabric API 进行交互。Libfabric API 绕过操作系统内核,并直接与 EFA 设备通信以将数据包放在网络上。这减少了开销,并且可以更有效地运行 AL/ML 和 HPC 应用程序。
注意
libfabric 是 OpenFabrics 接口 (OFI) 框架的核心组件,它定义并导出 OFI 的 user-space API。有关更多信息,请参阅 libfabric OpenFabrics
ENA、EFA 和仅限 EFA 的网络接口之间的区别
Amazon EC2 提供两种类型的网络接口:
-
ENA 接口提供支持 VPC 的 IP 联网所需的所有传统 IP 联网和路由功能。有关更多信息,请参阅 在 EC2 实例上使用 ENA 启用增强联网功能。
-
EFA(带 ENA 的 EFA)接口既提供用于 IP 联网的 ENA 设备,又提供用于低延迟、高吞吐量通信的 EFA 设备。
-
仅限 EFA 的接口仅支持 EFA 设备功能,不支持用于传统 IP 联网的 ENA 设备。
下表比较 ENA、EFA 和仅限 EFA 的网络接口。
支持的接口和库
EFA 支持以下接口和库:
-
Open MPI 4 及更高版本
注意
Open MPI 4.0 或更新版本是基于 Graviton 的实例的首选
-
Intel MPI 2019 Update 5 及更高版本
-
NVIDIA Collective Communications Library (NCCL) 2.4.2 及更高版本
-
AWS Neuron SDK 版本 2.3 及更高版本
支持的实例类型
以下实例类型支持 EFAs:
查看特定区域中支持 EFA 的可用实例类型
可用的实例类型因区域而异。要查看某个区域中支持 EFA 的可用实例类型,请使用带 --region
参数的 describe-instance-types 命令。包括 --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
支持的操作系统
操作系统支持因处理器类型而异。下表显示支持的操作系统。
操作系统 | Intel/AMD(x86_64 )实例类型 |
AWS Graviton(arm64 )实例类型 |
---|---|---|
Amazon Linux 2023 | ✓ | ✓ |
Amazon Linux 2 | ✓ | ✓ |
RHEL 8 和 9 | ✓ | ✓ |
Debian 10 和 11 | ✓ | ✓ |
Rocky Linux 8 和 9 | ✓ | ✓ |
Ubuntu 20.04、22.04 和 24.04 | ✓ | ✓ |
SUSE Linux Enterprise 15 SP2 和更高版本 | ✓ | ✓ |
OpenSUSE Leap 15.5 和更高版本 | ✓ |
注意
Ubuntu 20.04 在与 dl1.24xlarge
实例配合使用时提供点对点直接支持。
EFA 限制
EFA 具有以下限制:
注意
EFA 流量是指通过 EFA(带 ENA 的 EFA)或仅限 EFA 接口的 EFA 设备传输的流量。
-
目前不支持 P4d/P4de/DL1 实例与其他实例类型之间的 EFA 流量。
-
支持多个网卡的实例类型可以为每个网卡配置一个 EFA。所有其他支持的实例类型每个实例仅支持一个 EFA。
-
对于
c7g.16xlarge
、m7g.16xlarge
和r7g.16xlarge
,当附加 EFA 时,不支持专用实例和专属主机。 -
EFA 流量无法跨越可用区或 VPC。这不适用于来自 EFA 接口的 ENA 设备的正常 IP 流量。
-
无法路由 EFA 流量。仍然可以路由来自 EFA 接口的 ENA 设备的普通 IP 流量。
-
AWS Outposts 上不支持 EFA。
-
仅在基于AWS Cloud Digital Interface 软件开发套件(AWS CDI SDK)的应用程序的 Windows 实例上支持 EFA(带 ENA 的 EFA)接口的 EFA 设备。如果您将 EFA(带 ENA 的 EFA)接口附加到基于非 CDI SDK 的应用程序的 Windows 实例,则该接口将充当 ENA 接口,而没有任何附加 EFA 设备功能。Windows 或 Linux 上基于 AWS CDI 的应用程序不支持仅限 EFA 的接口。有关更多信息,请参阅 AWS Cloud Digital Interface 软件开发工具包(AWS CDI SDK)用户指南。
EFA 定价
EFA 作为一项可选的 Amazon EC2 联网功能提供,您可以在任何支持的实例上启用该功能,无需支付额外费用。