适用于 Amazon EC2 上 AI/ML 和 HPC 工作负载的 Elastic Fabric Adapter - Amazon Elastic Compute Cloud

适用于 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 实例:

  1. 使用传统 EFA 接口(也称为带 ENA 的 EFA),它可以创建 EFA 设备和 ENA 设备。

  2. 使用仅限 EFA 的接口,该接口仅创建 EFA 设备。

EFA 设备通过可扩展的可靠数据报(SRD)协议提供内置操作系统绕过和拥塞控制等功能。EFA 设备功能支持低延迟、可靠的传输功能,可让 EFA 接口为 Amazon EC2 上的 HPC 和 ML 应用程序提供更理想的应用程序性能。ENA 设备则提供传统的 IP 联网。

将传统的 HPC 软件堆栈与使用 EFA 的软件堆栈进行比较。

以前,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 的网络接口。

ENA EFA(带 ENA 的 EFA) 仅限 EFA
支持 IP 联网功能
可以分配 IPv4 或 IPv6 地址
例如,可以用作主网络接口
例如,计入 ENI 附件限制
实例类型支持 在所有基于 Nitro 的实例类型上支持 支持的实例类型 支持的实例类型
EC2 API 中的参数命名 interface efa efa-only
EC2 控制台中的字段命名 未选择 带 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:

Nitro v5
  • 通用型:m8g.24xlarge | m8g.48xlarge | m8g.metal-24xl | m8g.metal-48xl

  • 计算优化型:c7gn.16xlarge | c7gn.metal | c8g.24xlarge | c8g.48xlarge | c8g.metal-24xl | c8g.metal-48xl

  • 内存优化型:r8g.24xlarge | r8g.48xlarge | r8g.metal-24xl | r8g.metal-48xl | x8g.24xlarge | x8g.48xlarge | x8g.metal-24xl | x8g.metal-48xl

  • 高性能计算型:hpc7g.4xlarge | hpc7g.8xlarge | hpc7g.16xlarge

Nitro v4
  • 通用型: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

  • 计算优化型: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 | c7i.48xlarge | c7i.metal-48xl

  • 内存优化型: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

  • 存储空间优化型:i4g.16xlarge | i4i.32xlarge | i4i.metal | im4gn.16xlarge

  • 加速计算型:g6.8xlarge | g6.12xlarge | g6.16xlarge | g6.24xlarge | g6.48xlarge | g6e.8xlarge | g6e.12xlarge | g6e.16xlarge | g6e.24xlarge | g6e.48xlarge | gr6.8xlarge | p5.48xlarge | p5e.48xlarge | trn1.32xlarge | trn1n.32xlarge

  • 高性能计算型:hpc6a.48xlarge | hpc6id.32xlarge | hpc7a.12xlarge | hpc7a.24xlarge | hpc7a.48xlarge | hpc7a.96xlarge

Nitro v3
  • 通用型:m5dn.24xlarge | m5dn.metal | m5n.24xlarge | m5n.metal | m5zn.12xlarge | m5zn.metal

  • 计算优化型:c5n.9xlarge | c5n.18xlarge | c5n.metal

  • 内存优化型:r5dn.24xlarge | r5dn.metal | r5n.24xlarge | r5n.metal | x2iezn.12xlarge | x2iezn.metal

  • 存储优化型:i3en.12xlarge | i3en.24xlarge | i3en.metal

  • 加速计算型:dl1.24xlarge | dl2q.24xlarge | g4dn.8xlarge | g4dn.12xlarge | g4dn.16xlarge | g4dn.metal | g5.8xlarge | g5.12xlarge | g5.16xlarge | g5.24xlarge | g5.48xlarge | inf1.24xlarge | p3dn.24xlarge | p4d.24xlarge | p4de.24xlarge | vt1.24xlarge

查看特定区域中支持 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.16xlargem7g.16xlarger7g.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 联网功能提供,您可以在任何支持的实例上启用该功能,无需支付额外费用。