Elastic Fabric Adapter - Amazon Elastic Compute Cloud

Elastic Fabric Adapter

Elastic Fabric Adapter (EFA) 是一种网络设备,可以将其附加到 Amazon EC2 实例以加速高性能计算 (HPC) 和机器学习应用程序。EFA 使您能够利用 AWS 云提供的可伸缩性、灵活性和弹性,实现本地 HPC 集群的应用程序性能。

与以前在基于云的 HPC 系统中使用的 TCP 传输相比,EFA 提供更低且更一致的延迟和更高的吞吐量。它提高了实例间通信的性能,这对于扩展 HPC 和机器学习应用程序至关重要。它经过优化以在现有的 AWS 网络基础设施上使用,并且可以根据应用程序要求进行扩展。

EFA 与 Libfabric 1.7.0 及更高版本集成在一起,并支持适用于 HPC 应用程序的 Open MPI 3.1.3 及更高版本和 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 的软件堆栈进行比较。

以前,HPC 应用程序使用消息传递接口 (MPI) 与系统的网络传输进行交互。在 AWS 云中,这意味着应用程序与 MPI 进行交互,然后 MPI 使用操作系统的 TCP/IP 堆栈和 ENA 设备驱动程序以启用实例之间的网络通信。

有了 EFA,HPC 应用程序可使用 MPI 或 NCCLLibfabric 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 3.1.3 及更高版本

  • 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.32xlarge | m6a.48xlarge | m6a.metal | m6i.32xlarge | m6i.metal | m6id.32xlarge | m6id.metal

  • 计算优化型:c5n.18xlarge | c5n.9xlarge | c5n.metal | c6a.32xlarge | c6a.48xlarge | c6a.metal | c6gn.16xlarge | c6i.32xlarge | c6i.metal | c6id.32xlarge | c6id.metal | c7g.16xlarge | hpc6a.48xlarge

  • 内存优化型:r5dn.24xlarge | r5dn.metal | r5n.24xlarge | r5n.metal | r6a.48xlarge | r6a.metal | r6i.32xlarge | r6i.metal | r6id.32xlarge | r6id.metal | x2d.32xlarge | x2d.metal | x2ed.32xlarge | x2ed.metal | x2iezn.12xlarge | x2iezn.metal | x2idn.32xlarge | x2iedn.32xlarge

  • 存储优化型:i3en.24xlarge | i3en.12xlarge | i3en.metal | i4i.32xlarge | i4i.metal | im4gn.16xlarge

  • 加速型计算:dl1.24xlarge | g4dn.8xlarge | g4dn.12xlarge | g4dn.metal | g5.48xlarge | inf1.24xlarge | p3dn.24xlarge | p4d.24xlarge | trn1.32xlarge

查看特定区域中支持 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

输出示例

c5n.18xlarge c5n.9xlarge c5n.metal c6a.32xlarge c6a.48xlarge c6a.metal c6gn.16xlarge c6i.32xlarge ...

支持的 AMI

以下 AMI 支持包括基于 Intel x86 的实例类型的 EFA:

  • Amazon Linux 2

  • CentOS 7

  • RHEL 7 和 8

  • Ubuntu 18.04、20.04 和 22.04

  • SUSE Linux Enterprise 15 SP2 和更高版本

  • openSUSE Leap 15.3 和更高版本

注意

Ubuntu 20.04 在与 dl1.24xlarge 实例配合使用时提供点对点直接支持。

以下 AMI 支持包括基于 ARM 的(Graviton 2)实例类型的 EFA:

  • Amazon Linux 2

  • RHEL 8

  • Ubuntu 18.04、20.04 和 22.04

  • SUSE Linux Enterprise 15 SP2 和更高版本

EFA 限制

EFA 具有以下限制:

  • p4d.24xlargedl1.24xlarge 实例最多支持四个 EFA。所有其他支持的实例类型每个实例仅支持一个 EFA。

  • 对于 c7g.16xlarge,当附加 EFA 时,不支持专用实例和专属主机。

  • EFA 操作系统绕过流量限制为单个子网。换句话说,无法将 EFA 流量从一个子网发送到另一个子网。可以将来自 EFA 的普通 IP 流量从一个子网发送到另一个子网。

  • 无法路由 EFA 操作系统绕过流量。仍然可以路由来自 EFA 的普通 IP 流量。

  • EFA 必须是一个安全组的成员,以允许进出安全组本身的所有入站和出站流量。