Elastic Fabric Adapter
Elastic Fabric Adapter (EFA) 是一种网络设备,可以将其附加到 Amazon EC2 实例以加速高性能计算 (HPC) 和机器学习应用程序。EFA 使您能够利用 Amazon 云提供的可伸缩性、灵活性和弹性,实现本地 HPC 集群的应用程序性能。
与以前在基于云的 HPC 系统中使用的 TCP 传输相比,EFA 提供更低且更一致的延迟和更高的吞吐量。它提高了实例间通信的性能,这对于扩展 HPC 和机器学习应用程序至关重要。它经过优化以在现有的 Amazon 网络基础设施上使用,并且可以根据应用程序要求进行扩展。
EFA 与 Libfabric 1.7.0 及更高版本集成在一起,并支持适用于 HPC 应用程序的 Open MPI 5 及更高版本,和 Intel MPI 2019 Update 5 及更高版本,以及适用于机器学习应用程序的 Nvidia Collective Communications Library(NCCL)。
注意
在 Windows 实例上不支持 EFAs 的操作系统绕过功能。如果将 EFA 附加到一个 Windows 实例,该实例将作为 Elastic Network Adapter,而没有添加的 EFA 功能。
目录
EFA 基础知识
EFA 是具有添加的功能的 Elastic Network Adapter (ENA)。它提供了 ENA 的所有功能,并具有额外的操作系统绕过功能。操作系统绕过是一种访问模式,它允许 HPC 和机器学习应用程序直接与网络接口硬件通信以提供低延迟且可靠的传输功能。
![将传统的 HPC 软件堆栈与使用 EFA 的软件堆栈进行比较。](images/efa_stack.png)
以前,HPC 应用程序使用消息传递接口 (MPI) 与系统的网络传输进行交互。在 Amazon 云中,这意味着应用程序与 MPI 进行交互,然后 MPI 使用操作系统的 TCP/IP 堆栈和 ENA 设备驱动程序以启用实例之间的网络通信。
有了 EFA,HPC 应用程序可使用 MPI 或 NCCL 与 Libfabric API 进行交互。Libfabric API 绕过操作系统内核,并直接与 EFA 设备通信以将数据包放在网络上。这减少了开销,并且可以更有效地运行 HPC 应用程序。
注意
libfabric 是 OpenFabrics 接口 (OFI) 框架的核心组件,它定义并导出 OFI 的 user-space API。有关更多信息,请参阅 libfabric OpenFabrics
EFAs 和 ENA 之间的差异
Elastic Network Adapter (ENA) 提供支持 VPC 联网所需的传统 IP 网络功能。EFA 提供与 ENA 相同的所有传统 IP 网络功能,并且它们还支持操作系统绕过功能。操作系统绕过允许 HPC 和机器学习应用程序绕过操作系统内核,并直接与 EFA 设备进行通信。
支持的接口和库
EFA 支持以下接口和库:
-
Open MPI 5 及更高版本
-
Open MPI 4.0 或更新版本是 Graviton 的首选
-
Intel MPI 2019 Update 5 及更高版本
-
NVIDIA Collective Communications Library (NCCL) 2.4.2 及更高版本
支持的实例类型
以下实例类型支持 EFAs:
-
通用型:
m5dn.24xlarge
|m5dn.metal
|m5n.24xlarge
|m5n.metal
|m5zn.12xlarge
|m5zn.metal
|m6a.48xlarge
|m6a.metal
|m6i.32xlarge
|m6i.metal
|m6id.32xlarge
|m6id.metal
|m6idn.32xlarge
|m6idn.metal
|m6in.32xlarge
|m6in.metal
|m7a.48xlarge
|m7a.metal-48xl
|m7g.16xlarge
|m7g.metal
|m7gd.16xlarge
|m7gd.metal
|m7i.48xlarge
|m7i.metal-48xl
-
计算优化型:
c5n.9xlarge
|c5n.18xlarge
|c5n.metal
|c6a.48xlarge
|c6a.metal
|c6gn.16xlarge
|c6i.32xlarge
|c6i.metal
|c6id.32xlarge
|c6id.metal
|c6in.32xlarge
|c6in.metal
|c7a.48xlarge
|c7a.metal-48xl
|c7g.16xlarge
|c7g.metal
|c7gd.16xlarge
|c7gd.metal
|c7gn.16xlarge
|c7gn.metal
|c7i.48xlarge
|c7i.metal-48xl
-
内存优化型:
r5dn.24xlarge
|r5dn.metal
|r5n.24xlarge
|r5n.metal
|r6a.48xlarge
|r6a.metal
|r6i.32xlarge
|r6i.metal
|r6idn.32xlarge
|r6idn.metal
|r6in.32xlarge
|r6in.metal
|r6id.32xlarge
|r6id.metal
|r7a.48xlarge
|r7a.metal-48xl
|r7g.16xlarge
|r7g.metal
|r7gd.16xlarge
|r7gd.metal
|r7i.48xlarge
|r7i.metal-48xl
|r7iz.32xlarge
|r7iz.metal-32xl
|u7i-12tb.224xlarge
|u7in-16tb.224xlarge
|u7in-24tb.224xlarge
|u7in-32tb.224xlarge
|x2idn.32xlarge
|x2idn.metal
|x2iedn.32xlarge
|x2iedn.metal
|x2iezn.12xlarge
|x2iezn.metal
-
存储优化:
i3en.12xlarge
|i3en.24xlarge
|i3en.metal
|i4g.16xlarge
|i4i.32xlarge
|i4i.metal
|im4gn.16xlarge
-
加速型计算:
dl1.24xlarge
|dl2q.24xlarge
|g4dn.8xlarge
|g4dn.12xlarge
|g4dn.16xlarge
|g4dn.metal
|g5.8xlarge
|g5.12xlarge
|g5.16xlarge
|g5.24xlarge
|g5.48xlarge
|g6.8xlarge
|g6.12xlarge
|g6.16xlarge
|g6.24xlarge
|g6.48xlarge
|gr6.8xlarge
|inf1.24xlarge
|p3dn.24xlarge
|p4d.24xlarge
|p4de.24xlarge
|p5.48xlarge
|trn1.32xlarge
|trn1n.32xlarge
|vt1.24xlarge
-
高性能计算:
hpc6a.48xlarge
|hpc6id.32xlarge
|hpc7a.12xlarge
|hpc7a.24xlarge
|hpc7a.48xlarge
|hpc7a.96xlarge
|hpc7g.4xlarge
|hpc7g.8xlarge
|hpc7g.16xlarge
查看特定区域中支持 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 的实例类型的 EFA:
Amazon Linux 2023
Amazon Linux 2
CentOS 7
RHEL 7、8 和 9
Debian 10 和 11
Rocky Linux 8 和 9
Ubuntu 20.04 和 22.04
SUSE Linux Enterprise 15 SP2 和更高版本
OpenSUSE Leap 15.4 和更高版本
注意
Ubuntu 20.04 在与 dl1.24xlarge
实例配合使用时提供点对点直接支持。
以下操作系统支持包括基于 Arm 的(Graviton)实例类型的 EFA:
Amazon Linux 2023
Amazon Linux 2
RHEL 8/9 和 Rocky Linux 8/9
Debian 10 和 11
Ubuntu 20.04 和 22.04
SUSE Linux Enterprise 15 SP2 和更高版本
EFA 限制
EFA 具有以下限制:
-
所有 P4d 和 P5 实例类型都支持 NVIDIA GPUDirect 远程直接内存访问(RDMA)。
-
目前不支持 P4d/P4de/DL1 实例与其他实例类型之间的 EFA 流量。
-
支持多个网卡的实例类型可以为每个网卡配置一个 EFA。所有其他支持的实例类型每个实例仅支持一个 EFA。
-
对于
c7g.16xlarge
、m7g.16xlarge
和r7g.16xlarge
,当附加 EFA 时,不支持专用实例和专属主机。 -
EFA 操作系统绕过流量限制为单个子网。换句话说,无法将 EFA 流量从一个子网发送到另一个子网。可以将来自 EFA 的普通 IP 流量从一个子网发送到另一个子网。
-
无法路由 EFA 操作系统绕过流量。仍然可以路由来自 EFA 的普通 IP 流量。
-
EFA 必须是一个安全组的成员,以允许进出安全组本身的所有入站和出站流量。
-
EFA 在 Windows 实例上不受支持。
-
Amazon Outposts 上不支持 EFA。
EFA 定价
EFA 作为一项可选的 Amazon EC2 联网功能提供,您可以在任何支持的实例上启用该功能,无需支付额外费用。