適用於 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 可讓您實現內部部署的 AI/ML 或 HPC 叢集的應用程式效能,並具有 AWS 雲端提供的可擴展性、靈活性和彈性。

EFA 比雲端式 HPC 系統中傳統上使用的 TCP 傳輸,提供更低和更一致的延遲及更高的傳輸量。它可增強執行個體間通訊的效能,在擴展 HPC 和機器學習應用程式時不可或缺。它在現有 AWS 網路基礎設施上的表現最佳,可隨著應用程式需求而擴展。

EFA 整合 Libfabric 1.7.0 和更新版本,並支援適用於 HPC 應用程式的 Open MPI 4 和更新版本及 Intel MPI 2019 Update 5 和更新版本,以及適用於機器學習應用程式的 Nvidia Collective Communications Library (NCCL)。

EFA 基本概念

EFA 裝置可以透過兩種方式連接到 EC2 執行個體:

  1. 使用傳統的 EFA 介面,也稱為 EFA 搭配 ENA,這會同時建立 EFA 裝置和 ENA 裝置。

  2. 使用僅限 EFA 介面,僅建立 EFA 裝置。

EFA 裝置透過可擴展可靠資料包 (SRD) 通訊協定提供內建 OS-bypass 和擁塞控制等功能。EFA 裝置功能可實現低延遲、可靠的傳輸功能,讓 EFA 介面為 Amazon EC2 上的 HPC 和 ML 應用程式提供更好的應用程式效能。雖然 ENA 裝置提供傳統 IP 網路。

將傳統 HPC 軟體堆疊與使用 EFA 的 HPC 軟體堆疊作對比。

傳統上,AI/ML 應用程式使用 NCCL,和 HPC 應用程式使用 Message Passing Interface (MPI) 來與系統的網路傳輸連接。在 AWS 雲端,這意味著應用程式與 MPI 連接,MPI 接著使用作業系統的 TCP/IP 堆疊和 ENA 裝置驅動程式,讓執行個體之間能夠進行網路通訊。

使用傳統 EFA (EFA 搭配 ENA) 或僅限 EFA 介面,AI/ML 應用程式會使用 NCCL 和 HPC 應用程式使用 MPI,直接與 Libfabric API 連接。Libfabric API 會繞過作業系統的核心,直接與 EFA 裝置通訊來將封包放到網路上。這減少了額外負荷,使 AI/ML 和 HPC 應用程式能夠更有效率地執行。

注意

Libfabric 是 OpenFabrics Interfaces (OFI) 框架的核心元件,定義並匯出 OFI 的使用者空間 API。如需詳細資訊,請參閱 Libfabric OpenFabrics 網站。

ENA、EFA 和僅限 EFA 網路介面之間的差異

Amazon EC2 提供兩種類型的網路介面:

  • ENA 介面提供支援 VPC IP 聯網所需的所有傳統 IP 聯網和路由功能。如需詳細資訊,請參閱在 EC2 執行個體上使用 ENA 啟用增強型網路

  • EFA (EFA 搭配 ENA) 介面提供用於 IP 聯網的 ENA 裝置和用於低延遲、高輸送量通訊的 EFA 裝置。

  • 僅 EFA 介面僅支援 EFA 裝置功能,沒有傳統 IP 網路的 ENA 裝置。

下表提供 ENA、EFA 和僅限 EFA 網路介面的比較。

ENA EFA (EFA 搭配 ENA) 僅限 EFA
支援 IP 網路功能
可以指派 IPv4 或 IPv6 地址
可用作執行個體的主要網路介面
計入執行個體的 ENI 連接限制
執行個體類型支援 支援所有 Nitro 型執行個體類型 支援的執行個體類型 支援的執行個體類型
EC2 APIs 中的參數命名 interface efa efa-only
EC2 主控台中的欄位命名 沒有選取項目 EFA 搭配 ENA 僅限 EFA

支援的介面和程式庫

EFA 支援下列介面和程式庫:

  • 開啟 Open MPI 4 和更新版本

    注意

    Graviton 首選 Open MPI 4.0 或更高版本。

  • 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

  • Storage Optimized:i7ie.48xlarge

  • 加速運算:p5en.48xlarge | trn2.48xlarge | trn2u.48xlarge

  • 高效能運算: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-48xlge

  • 記憶體最佳化: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-6tb.112xlarge | u7i-8tb.112xlarge | u7i-12tb.224xlarge | u7in-16tb.224xlarge | u7in-24tb.224xlarge | u7in-32tb.224xlarge | x2idn.32xlarge | x2idn.metal | x2iedn.32xlarge | x2iedn.metal

  • Storage Optimized:i4g.16xlarge | i4i.32xlarge | i4i.metal | im4gn.16xlarge

  • 加速運算:f2.48xlarge | 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

  • Storage Optimized: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 的可用執行個體類型,請使用 describe-instance-types 命令,搭配 --region 參數。包含 --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 和 12
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 (EFA 搭配 ENA) 或僅限 EFA 介面的 EFA 裝置傳輸的流量。

  • 目前不支援 P4d/P4de/DL1 執行個體與其他執行個體類型之間的 EFA 流量。

  • 支援多個網路卡的執行個體類型可以設定為每個網路卡一個 EFA。所有其他支援的執行個體類型每個執行個體只支援一個 EFA。

  • 對於 c7g.16xlarge,在連接 EFA 時,不支援 m7g.16xlarger7g.16xlarge 專用執行個體和專用主機。

  • EFA 流量無法跨可用區域或 VPCs。這不適用於來自 EFA 介面 ENA 裝置的一般 IP 流量。

  • EFA OS-bypass 流量不可路由傳送。來自 EFA 介面 ENA 裝置的正常 IP 流量仍然可以路由。

  • AWS Outposts 上不支援 EFA。

  • EFA (EFA 搭配 ENA) 介面的 EFA 裝置僅在以AWS Cloud Digital Interface軟體開發套件 (AWS CDI SDK) 為基礎的應用程式支援 Windows 執行個體。如果您將 EFA (EFA 搭配 ENA) 介面連接至非 CDI SDK 型應用程式的 Windows 執行個體,則其可做為 ENA 介面運作,無需新增 EFA 裝置功能。Windows 或 Linux 上的AWS CDI應用程式不支援僅限 EFA 介面。如需詳細資訊,請參閱AWS Cloud Digital Interface 軟體開發套件 (AWS CDI SDK) 使用者指南

EFA 定價

EFA 是選用的 Amazon EC2 聯網功能,您可以在任何支援的執行個體上啟用該功能,而無需額外付費。