Elastic Fabric Adapter - Amazon Elastic Compute Cloud

Elastic Fabric Adapter

Elastic Fabric Adapter (EFA) は、High Performance Computing (HPC) と機械学習アプリケーションを高速化するために Amazon EC2 インスタンスにアタッチできるネットワークデバイスです。EFA では、AWS クラウドが提供するスケーラビリティ、柔軟性、伸縮性により、オンプレミス HPC クラスターのアプリケーションパフォーマンスを実現できます。

EFA では、クラウドベースの HPC システムで従来使用されていた TCP トランスポートよりも低く、一貫性の高いレイテンシーを提供し、高いスループットが得られます。HPC と機械学習アプリケーションのスケーリングに不可欠なインスタンス間通信のパフォーマンスが向上します。既存の AWS ネットワークインフラストラクチャで動作するように最適化されており、アプリケーション要件に応じてスケーリングすることができます。

EFA は、Libfabric 1.7.0 と統合されており、HPC アプリケーション向けに Open MPI 5 以降とインテル MPI 2019 Update 5 以降をサポートし、さらに機械学習アプリケーション向けに NVIDIA Collective Communications Library (NCCL) をサポートしています

注記

EFAs の OS バイパス機能は、Windows インスタンスではサポートされていません。EFA を Windows インスタンスにアタッチした場合、インスタンスは、Elastic Network Adapter として動作し、EFA 機能は追加されません。

EFA の基本

EFA は、機能が追加された Elastic Network Adapter (ENA) です。ENA のすべての機能に OS バイパス機能が追加されています。OS バイパスは、HPC と機械学習アプリケーションがネットワークインターフェイスハードウェアと直接通信して、レイテンシーが低く、信頼性の高い転送機能を実現できるようにするアクセスモデルです。

従来の HPC ソフトウェアスタックと、EFA を使用するソフトウェアスタックの比較。

従来、HPC アプリケーションは、Message Passing Interface (MPI) を使用してシステムのネットワーク転送と通信していました。AWS クラウドでは、アプリケーションが MPI と通信することを意味します。MPI はオペレーティングシステムの TCP/IP スタックと ENA デバイスドライバーを使用して、インスタンス間のネットワーク通信を行います。

EFA の場合、HPC アプリケーションは MPI または NCCL を使用して Libfabric API と連携します。Libfabric API はオペレーティングシステムのカーネルをバイパスし、EFA デバイスと直接通信してパケットをネットワークに送ります。これにより、オーバーヘッドが削減され、HPC アプリケーションを効率的に実行できるようになります。

注記

Libfabric は、OpenFabrics Interface (OFI) フレームワークのコアコンポーネントで、OFI のユーザースペース API を定義およびエクスポートします。詳細については、Libfabric OpenFabricsウェブサイトを参照してください。

EFAs と ENA の違い

Elastic Network Adapters (ENA) は、VPC ネットワーキングをサポートするために必要な従来の IP ネットワーキング機能を提供します。EFAは、ENA と同じ従来の IP ネットワーキング機能すべてに加えて、OS バイパス機能をサポートしています。OS バイパスにより、HPC と機械学習アプリケーションはオペレーティングシステムのカーネルをバイパスして EFA デバイスと直接通信できます。

サポートされているインターフェイスとライブラリ

EFA は、以下のインターフェイスとライブラリをサポートしています。

  • Open MPI 5 以降

  • Graviton には、Open MPI 4.0 以降が推奨されます

  • 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 | 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 コマンドを使用します。結果を EFA をサポートするインスタンスタイプにスコープする --filters パラメーターと、出力を InstanceType の値にスコープする --query パラメーターを含めます。

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 Remote Direct Memory Access (RDMA) をサポートします。

  • P4d/P4de/DL1 インスタンスと他のインスタンスタイプ間の EFA トラフィックは、現在サポートされていません。

  • 複数のネットワークカードをサポートするインスタンスタイプは、ネットワークカードごとに 1 つの EFA で設定できます。その他のサポートされているインスタンスタイプはすべて、インスタンスごとに 1 つの EFA のみをサポートしています。

  • EFA がアタッチされている場合、c7g.16xlargem7g.16xlarger7g.16xlarge Dedicated Instances および Dedicated Hosts はサポートされません。

  • EFA OS バイパストラフィックは、1 つのサブネットに制限されています。つまり、EFA トラフィックをサブネット間で送信することはできません。EFA の通常の IP トラフィックは、サブネット間で送信することができます。

  • EFA OS バイパストラフィックは、ルーティングできません。EFA の通常の IP トラフィックは、引き続きルーティングできます。

  • EFA は、セキュリティグループ自体との間のインバウンドおよびアウトバウンドのトラフィックをすべて許可するセキュリティグループのメンバーである必要があります。

  • EFA は、AWS Outposts ではサポートされていません。

EFA 価格設定

EFA はオプションの Amazon EC2 ネットワーキング機能として利用でき、サポートされているどのインスタンスでも追加費用なしで有効にできます。