Amazon EC2 の HPC および ML ワークロード用の 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 アプリケーションは、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
|m8g.24xlarge
|m8g.48xlarge
|m8g.metal-24xl
|m8g.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
|c8g.24xlarge
|c8g.48xlarge
|c8g.metal-24xl
|c8g.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
|r8g.24xlarge
|r8g.48xlarge
|r8g.metal-24xl
|r8g.metal-48xl
|u7i-12tb.224xlarge
|u7in-16tb.224xlarge
|u7in-24tb.224xlarge
|u7in-32tb.224xlarge
|x2idn.32xlarge
|x2idn.metal
|x2iedn.32xlarge
|x2iedn.metal
|x2iezn.12xlarge
|x2iezn.metal
|x8g.24xlarge
|x8g.48xlarge
|x8g.metal-24xl
|x8g.metal-48xl
-
ストレージの最適化:
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
|g6e.8xlarge
|g6e.12xlarge
|g6e.16xlarge
|g6e.24xlarge
|g6e.48xlarge
|gr6.8xlarge
|inf1.24xlarge
|p3dn.24xlarge
|p4d.24xlarge
|p4de.24xlarge
|p5.48xlarge
|p5e.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_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 には次の制限があります。
-
すべての P4d および P5 インスタンスのタイプは、NVIDIA GPUDirect Remote Direct Memory Access (RDMA) をサポートします。
-
P4d/P4de/DL1 インスタンスと他のインスタンスタイプ間の EFA トラフィックは、現在サポートされていません。
-
複数のネットワークカードをサポートするインスタンスタイプは、ネットワークカードごとに 1 つの EFA で設定できます。その他のサポートされているインスタンスタイプはすべて、インスタンスごとに 1 つの EFA のみをサポートしています。
-
EFA がアタッチされている場合、
c7g.16xlarge
、m7g.16xlarge
、r7g.16xlarge
Dedicated Instances および Dedicated Hosts はサポートされません。 -
EFA OS バイパストラフィックは、アベイラビリティーゾーンまたは VPC をまたがることができません。つまり、EFA OS バイパストラフィックは、あるアベイラビリティーゾーンまたは VPC (VPC ピアリング接続あり/なし) から、別のアベイラビリティーゾーンなどに流れることはできません。これは、EFA からの IP トラフィックには適用されません。
-
ローカルゾーン内のサブネットを越えて EFA OS バイパストラフィックを送信することはできません。
-
EFA OS バイパストラフィックは、ルーティングできません。EFA の通常の IP トラフィックは、引き続きルーティングできます。
-
EFA は、セキュリティグループ自体との間のインバウンドおよびアウトバウンドのトラフィックをすべて許可するセキュリティグループのメンバーである必要があります。
-
EFA は Windows インスタンスではサポートされていません。
-
EFA は、AWS Outposts ではサポートされていません。
EFA 価格設定
EFA はオプションの Amazon EC2 ネットワーキング機能として利用でき、サポートされているどのインスタンスでも追加費用なしで有効にできます。