

# Amazon EC2 の AI/ML および HPC ワークロード用の Elastic Fabric Adapter
<a name="efa"></a>

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

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

EFA は Libfabric と統合されており、AI および機械学習アプリケーション向けに Nvidia Collective Communications Library (NCCL) と NVIDIA Inference Xfer Library (NIXL)、および HPC アプリケーション向けに Open MPI 4.1 以降と Intel MPI 2019 Update 5 以降をサポートしています。NCCL と MPI は Libfabric 1.7.0 以降と統合されています。NIXL は Libfabric 1.21.0 以降と統合されています。

Nitro バージョン 4 以降でサポートされているほとんどのインスタンスタイプで、EFA は RDMA (リモートダイレクトメモリアクセス) 書き込みをサポートしています。RDMA 読み取りは、Nitro バージョン 4 以降のすべてのインスタンスでサポートされています。詳細については「[サポートされるインスタンスタイプ](#efa-instance-types)」を参照してください。

**Topics**
+ [EFA の基本](#efa-basics)
+ [サポートされているインターフェイスとライブラリ](#efa-mpi)
+ [サポートされるインスタンスタイプ](#efa-instance-types)
+ [サポートされるオペレーティングシステム](#efa-os)
+ [EFA の制限事項](#efa-limits)
+ [EFA 価格設定](#efa-pricing)
+ [EFAと MPI の開始方法](efa-start.md)
+ [EFAとNCCL の開始方法](efa-start-nccl.md)
+ [EFA と NIXL の開始方法](efa-start-nixl.md)
+ [ネットワーク帯域幅の最大化](efa-acc-inst-types.md)
+ [EFA を作成してアタッチする](create-efa.md)
+ [EFA をデタッチおよび削除する](detach-efa.md)
+ [EFA のモニタリング](efa-working-monitor.md)
+ [EFA インストーラを検証する](efa-verify.md)
+ [リリースノート](efa-changelog.md)

## EFA の基本
<a name="efa-basics"></a>

EFA デバイスは次の 2 つの方法で EC2 インスタンスにアタッチできます。

1. EFA デバイスと ENA デバイスの両方を作成する EFA と ENA の組み合わせとも呼ばれる従来の EFA インターフェイスを使用します。

1. EFA のみのインターフェイスを使用して、EFA デバイスのみを作成します。

EFA デバイスはScalable Reliable Datagram (SRD) プロトコルを介した組み込み OS バイパスや輻輳制御などの機能を提供します。EFA デバイス機能により、低レイテンシーで信頼性の高いトランスポート機能が可能になり、EFA インターフェイスが Amazon EC2 の HPC および ML アプリケーションのパフォーマンスを向上させることができます。一方、ENA デバイスは従来の IP ネットワークを提供します。

![\[従来の HPC ソフトウェアスタックと、EFA を使用するソフトウェアスタックの比較。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/efa_stack.png)


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

従来の EFA (ENA を使用した EFA) または EFA 専用インターフェイスでは、AI/ML アプリケーションは NCCL と NIXL (分散推論用) を使用します。HPC アプリケーションは MPI を使用して Libfabric API と直接連携します。Libfabric API はオペレーティングシステムのカーネルをバイパスし、EFA デバイスと直接通信してパケットをネットワークに送ります。これにより、オーバーヘッドが削減され、AI/ML および HPC アプリケーションを効率的に実行できるようになります。

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

### ENA、EFA、EFA のみのネットワークインターフェイスの違い
<a name="efa-differences"></a>

Amazon EC2 では次の 2 種類のネットワークインターフェイスを提供しています。
+ **ENA** インターフェイスはVPC の IP ネットワークをサポートするために必要なすべての従来の IP ネットワークとルーティング機能を提供します。詳細については「[EC2 インスタンスで ENA による拡張ネットワーキングを有効にする](enhanced-networking-ena.md)」を参照してください。
+ **EFA** (EFA と ENA の組み合わせ) インターフェイスはIP ネットワーク用の ENA デバイスと、低レイテンシーで高スループット通信用の EFA デバイスの両方を提供します。
+ **EFA のみ**のインターフェイスは EFA デバイス機能のみをサポートし、従来の IP ネットワーク用の ENA デバイスはありません。

次の表はENA、EFA、および EFA のみのネットワークインターフェイスの比較を提示しています。


|  | ENA | EFA (EFA と ENA の組み合わせ) | EFA のみ | 
| --- | --- | --- | --- | 
| IP ネットワーク機能をサポート | はい | あり | なし | 
| IPv4 アドレスまたは IPv6 アドレスを割り当て可能 | あり | あり | なし | 
| インスタンスのプライマリネットワークインターフェイスとして使用可能 | あり | あり | なし | 
| インスタンスの ENI アタッチメント制限へのカウント | あり | はい | はい | 
| インスタンスタイプのサポート | すべての Nitro ベースのインスタンスタイプでサポートに対応 | [サポートされるインスタンスタイプ](#efa-instance-types) | [サポートされるインスタンスタイプ](#efa-instance-types) | 
| EC2 API のパラメータ命名 | interface | efa | efa-only | 
| EC2 コンソールのフィールド命名 | 選択なし | EFA と ENA の組み合わせ | EFA のみ | 

## サポートされているインターフェイスとライブラリ
<a name="efa-mpi"></a>

EFA は以下のインターフェイスとライブラリをサポートしています。
+ Open MPI 4.1 以降
+ Intel MPI 2019 Update 5 以降
+ NVIDIA Collective Communications Library (NCCL) 2.4.2 以降
+ NVIDIA Inference Xfer Library (NIXL) 1.0.0 以降
+ AWS Neuron SDK バージョン 2.3 以降

## サポートされるインスタンスタイプ
<a name="efa-instance-types"></a>

次のインスタンスタイプはすべて EFA をサポートしています。また、この表は、インスタンスタイプの RDMA 読み取りおよび RDMA 書き込みのサポートを示しています。

------
#### [ Nitro v6 ]


| インスタンスタイプ | RDMA 読み取りサポート | RDMA 書き込みサポート | 
| --- |--- |--- |
| 汎用 | 
| --- |
| m8a.48xlarge | Yes | Yes | 
| m8a.metal-48xl | Yes | Yes | 
| m8azn.24xlarge | Yes | Yes | 
| m8azn.metal-24xl | Yes | Yes | 
| m8gb.16xlarge | Yes | Yes | 
| m8gb.24xlarge | Yes | Yes | 
| m8gb.48xlarge | Yes | Yes | 
| m8gb.metal-24xl | Yes | Yes | 
| m8gb.metal-48xl | Yes | Yes | 
| m8gn.16xlarge | Yes | Yes | 
| m8gn.24xlarge | Yes | Yes | 
| m8gn.48xlarge | Yes | Yes | 
| m8gn.metal-24xl | Yes | Yes | 
| m8gn.metal-48xl | Yes | Yes | 
| m8i.48xlarge | Yes | Yes | 
| m8i.96xlarge | Yes | Yes | 
| m8i.metal-48xl | Yes | Yes | 
| m8i.metal-96xl | Yes | Yes | 
| m8id.48xlarge | Yes | Yes | 
| m8id.96xlarge | Yes | Yes | 
| m8id.metal-48xl | Yes | Yes | 
| m8id.metal-96xl | Yes | Yes | 
| コンピューティング最適化 | 
| --- |
| c8a.48xlarge | Yes | Yes | 
| c8a.metal-48xl | Yes | Yes | 
| c8gb.16xlarge | Yes | Yes | 
| c8gb.24xlarge | Yes | Yes | 
| c8gb.48xlarge | Yes | Yes | 
| c8gb.metal-24xl | Yes | Yes | 
| c8gb.metal-48xl | Yes | Yes | 
| c8gn.16xlarge | Yes | Yes | 
| c8gn.24xlarge | Yes | Yes | 
| c8gn.48xlarge | Yes | Yes | 
| c8gn.metal-24xl | Yes | Yes | 
| c8gn.metal-48xl | Yes | Yes | 
| c8i.48xlarge | Yes | Yes | 
| c8i.96xlarge | Yes | Yes | 
| c8i.metal-48xl | Yes | Yes | 
| c8i.metal-96xl | Yes | Yes | 
| c8id.48xlarge | Yes | Yes | 
| c8id.96xlarge | Yes | Yes | 
| c8id.metal-48xl | Yes | Yes | 
| c8id.metal-96xl | Yes | Yes | 
| メモリを最適化 | 
| --- |
| r8a.48xlarge | Yes | Yes | 
| r8a.metal-48xl | Yes | Yes | 
| r8gb.16xlarge | Yes | Yes | 
| r8gb.24xlarge | Yes | Yes | 
| r8gb.48xlarge | Yes | Yes | 
| r8gb.metal-24xl | Yes | Yes | 
| r8gb.metal-48xl | Yes | Yes | 
| r8gn.16xlarge | Yes | Yes | 
| r8gn.24xlarge | Yes | Yes | 
| r8gn.48xlarge | Yes | Yes | 
| r8gn.metal-24xl | Yes | Yes | 
| r8gn.metal-48xl | Yes | Yes | 
| r8i.48xlarge | Yes | Yes | 
| r8i.96xlarge | Yes | Yes | 
| r8i.metal-48xl | Yes | Yes | 
| r8i.metal-96xl | Yes | Yes | 
| r8id.48xlarge | Yes | Yes | 
| r8id.96xlarge | Yes | Yes | 
| r8id.metal-48xl | Yes | Yes | 
| r8id.metal-96xl | Yes | Yes | 
| x8aedz.24xlarge | Yes | Yes | 
| x8aedz.metal-24xl | Yes | Yes | 
| x8i.48xlarge | Yes | Yes | 
| x8i.64xlarge | Yes | Yes | 
| x8i.96xlarge | Yes | Yes | 
| x8i.metal-48xl | Yes | Yes | 
| x8i.metal-96xl | Yes | Yes | 
| ストレージの最適化 | 
| --- |
| i8ge.48xlarge | Yes | No | 
| i8ge.metal-48xl | Yes | No | 
| 高速コンピューティング | 
| --- |
| g7e.8xlarge | Yes | Yes | 
| g7e.12xlarge | Yes | Yes | 
| g7e.24xlarge | Yes | Yes | 
| g7e.48xlarge | Yes | Yes | 
| p6-b200.48xlarge | Yes | Yes | 
| p6-b300.48xlarge | Yes | Yes | 
| ハイパフォーマンスコンピューティング | 
| --- |
| hpc8a.96xlarge | Yes | Yes | 

------
#### [ Nitro v5 ]


| インスタンスタイプ | RDMA 読み取りサポート | RDMA 書き込みサポート | 
| --- |--- |--- |
| 汎用 | 
| --- |
| m8g.24xlarge | Yes | No | 
| m8g.48xlarge | Yes | No | 
| m8g.metal-24xl | Yes | No | 
| m8g.metal-48xl | Yes | No | 
| m8gd.24xlarge | No | No | 
| m8gd.48xlarge | No | No | 
| m8gd.metal-24xl | No | No | 
| m8gd.metal-48xl | No | No | 
| コンピューティング最適化 | 
| --- |
| c7gn.16xlarge | Yes | No | 
| c7gn.metal | Yes | No | 
| c8g.24xlarge | Yes | No | 
| c8g.48xlarge | Yes | No | 
| c8g.metal-24xl | Yes | No | 
| c8g.metal-48xl | Yes | No | 
| c8gd.24xlarge | No | No | 
| c8gd.48xlarge | No | No | 
| c8gd.metal-24xl | No | No | 
| c8gd.metal-48xl | No | No | 
| メモリを最適化 | 
| --- |
| r8g.24xlarge | No | No | 
| r8g.48xlarge | No | No | 
| r8g.metal-24xl | No | No | 
| r8g.metal-48xl | No | No | 
| r8gd.24xlarge | No | No | 
| r8gd.48xlarge | No | No | 
| r8gd.metal-24xl | No | No | 
| r8gd.metal-48xl | No | No | 
| x8g.24xlarge | No | No | 
| x8g.48xlarge | No | No | 
| x8g.metal-24xl | No | No | 
| x8g.metal-48xl | No | No | 
| ストレージの最適化 | 
| --- |
| i7ie.48xlarge | Yes | No | 
| i7ie.metal-48xl | Yes | No | 
| i8g.48xlarge | No | No | 
| i8g.metal-48xl | No | No | 
| 高速コンピューティング | 
| --- |
| p5en.48xlarge | Yes | Yes | 
| p6e-gb200.36xlarge | Yes | Yes | 
| trn2.3xlarge | Yes | Yes | 
| trn2.48xlarge | Yes | Yes | 
| trn2u.48xlarge | Yes | Yes | 
| ハイパフォーマンスコンピューティング | 
| --- |
| hpc7g.4xlarge | Yes | No | 
| hpc7g.8xlarge | Yes | No | 
| hpc7g.16xlarge | Yes | No | 

------
#### [ Nitro v4 ]


| インスタンスタイプ | RDMA 読み取りサポート | RDMA 書き込みサポート | 
| --- |--- |--- |
| 汎用 | 
| --- |
| m6a.48xlarge | Yes | Yes | 
| m6a.metal | Yes | Yes | 
| m6i.32xlarge | Yes | Yes | 
| m6i.metal | Yes | Yes | 
| m6id.32xlarge | Yes | Yes | 
| m6id.metal | Yes | Yes | 
| m6idn.32xlarge | Yes | Yes | 
| m6idn.metal | Yes | Yes | 
| m6in.32xlarge | Yes | Yes | 
| m6in.metal | Yes | Yes | 
| m7a.48xlarge | Yes | No | 
| m7a.metal-48xl | Yes | No | 
| m7g.16xlarge | Yes | No | 
| m7g.metal | Yes | No | 
| m7gd.16xlarge | Yes | No | 
| m7gd.metal | Yes | No | 
| m7i.48xlarge | Yes | No | 
| m7i.metal-48xl | Yes | No | 
| コンピューティング最適化 | 
| --- |
| c6a.48xlarge | Yes | Yes | 
| c6a.metal | Yes | Yes | 
| c6gn.16xlarge | Yes | Yes | 
| c6i.32xlarge | Yes | Yes | 
| c6i.metal | Yes | Yes | 
| c6id.32xlarge | Yes | Yes | 
| c6id.metal | Yes | Yes | 
| c6in.32xlarge | Yes | Yes | 
| c6in.metal | Yes | Yes | 
| c7a.48xlarge | Yes | No | 
| c7a.metal-48xl | Yes | No | 
| c7g.16xlarge | Yes | Yes | 
| c7g.metal | Yes | Yes | 
| c7gd.16xlarge | Yes | No | 
| c7gd.metal | Yes | No | 
| c7i.48xlarge | Yes | No | 
| c7i.metal-48xl | Yes | No | 
| メモリを最適化 | 
| --- |
| r6a.48xlarge | Yes | Yes | 
| r6a.metal | Yes | Yes | 
| r6i.32xlarge | Yes | Yes | 
| r6i.metal | Yes | Yes | 
| r6id.32xlarge | Yes | Yes | 
| r6id.metal | Yes | Yes | 
| r6idn.32xlarge | Yes | Yes | 
| r6idn.metal | Yes | Yes | 
| r6in.32xlarge | Yes | Yes | 
| r6in.metal | Yes | Yes | 
| r7a.48xlarge | No | No | 
| r7a.metal-48xl | No | No | 
| r7g.16xlarge | No | No | 
| r7g.metal | No | No | 
| r7gd.16xlarge | No | No | 
| r7gd.metal | No | No | 
| r7i.48xlarge | No | No | 
| r7i.metal-48xl | No | No | 
| r7iz.32xlarge | No | No | 
| r7iz.metal-32xl | No | No | 
| u7i-6tb.112xlarge | Yes | Yes | 
| u7i-8tb.112xlarge | Yes | Yes | 
| u7i-12tb.224xlarge | Yes | Yes | 
| u7in-16tb.224xlarge | Yes | Yes | 
| u7in-24tb.224xlarge | Yes | Yes | 
| u7in-32tb.224xlarge | Yes | Yes | 
| u7inh-32tb.480xlarge | Yes | Yes | 
| x2idn.32xlarge | Yes | Yes | 
| x2idn.metal | Yes | Yes | 
| x2iedn.32xlarge | Yes | Yes | 
| x2iedn.metal | Yes | Yes | 
| ストレージの最適化 | 
| --- |
| i4g.16xlarge | Yes | Yes | 
| i4i.32xlarge | Yes | Yes | 
| i4i.metal | Yes | Yes | 
| i7i.24xlarge | Yes | No | 
| i7i.48xlarge | Yes | No | 
| i7i.metal-48xl | Yes | No | 
| im4gn.16xlarge | Yes | Yes | 
| 高速コンピューティング | 
| --- |
| f2.48xlarge | Yes | Yes | 
| g6.8xlarge | Yes | Yes | 
| g6.12xlarge | Yes | Yes | 
| g6.16xlarge | Yes | Yes | 
| g6.24xlarge | Yes | Yes | 
| g6.48xlarge | Yes | Yes | 
| g6e.8xlarge | Yes | Yes | 
| g6e.12xlarge | Yes | Yes | 
| g6e.16xlarge | Yes | Yes | 
| g6e.24xlarge | Yes | Yes | 
| g6e.48xlarge | Yes | Yes | 
| gr6.8xlarge | Yes | Yes | 
| p5.4xlarge | Yes | Yes | 
| p5.48xlarge | Yes | Yes | 
| p5e.48xlarge | Yes | Yes | 
| trn1.32xlarge | Yes | Yes | 
| trn1n.32xlarge | Yes | Yes | 
| ハイパフォーマンスコンピューティング | 
| --- |
| hpc6a.48xlarge | Yes | Yes | 
| hpc6id.32xlarge | Yes | Yes | 
| hpc7a.12xlarge | Yes | No | 
| hpc7a.24xlarge | Yes | No | 
| hpc7a.48xlarge | Yes | No | 
| hpc7a.96xlarge | Yes | No | 

------
#### [ Nitro v3 ]


| インスタンスタイプ | RDMA 読み取りサポート | RDMA 書き込みサポート | 
| --- |--- |--- |
| 汎用 | 
| --- |
| m5dn.24xlarge | No | No | 
| m5dn.metal | No | No | 
| m5n.24xlarge | No | No | 
| m5n.metal | No | No | 
| m5zn.12xlarge | No | No | 
| m5zn.metal | No | No | 
| コンピューティング最適化 | 
| --- |
| c5n.9xlarge | No | No | 
| c5n.18xlarge | No | No | 
| c5n.metal | No | No | 
| メモリを最適化 | 
| --- |
| r5dn.24xlarge | No | No | 
| r5dn.metal | No | No | 
| r5n.24xlarge | No | No | 
| r5n.metal | No | No | 
| x2iezn.12xlarge | No | No | 
| x2iezn.metal | No | No | 
| ストレージの最適化 | 
| --- |
| i3en.12xlarge | No | No | 
| i3en.24xlarge | No | No | 
| i3en.metal | No | No | 
| 高速コンピューティング | 
| --- |
| dl1.24xlarge | Yes | No | 
| dl2q.24xlarge | No | No | 
| g4dn.8xlarge | No | No | 
| g4dn.12xlarge | No | No | 
| g4dn.16xlarge | No | No | 
| g4dn.metal | No | No | 
| g5.8xlarge | No | No | 
| g5.12xlarge | No | No | 
| g5.16xlarge | No | No | 
| g5.24xlarge | No | No | 
| g5.48xlarge | No | No | 
| inf1.24xlarge | No | No | 
| p3dn.24xlarge | No | No | 
| p4d.24xlarge | Yes | No | 
| p4de.24xlarge | Yes | No | 
| vt1.24xlarge | No | No | 
| 前の世代 | 
| --- |
| p3dn.24xlarge | No | No | 

------

**特定のリージョンで EFA をサポートする利用可能なインスタンスタイプを確認するには**  
利用可能なインスタンスタイプはリージョンごとに異なります。リージョンで EFA をサポートする使用可能なインスタンスタイプを確認するには`--region` パラメーターを指定して [describe-instance-types](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-instance-types.html) コマンドを使用します。結果を 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
```

## サポートされるオペレーティングシステム
<a name="efa-os"></a>

オペレーティングシステムのサポートはプロセッサタイプによって異なります。次の表はサポートされているオペレーティングシステムを示しています。


| オペレーティングシステム | Intel/AMD (`x86_64`) インスタンスタイプ | AWS Graviton (`arm64`) インスタンスタイプ | 
| --- | --- | --- | 
| Amazon Linux 2023 | ✓ | ✓ | 
| Amazon Linux 2 | ✓ | ✓ | 
| RHEL 8 および 9 | ✓ | ✓ | 
| Debian 11、12、13 | ✓ | ✓ | 
| Rocky Linux 8 および 9 | ✓ | ✓ | 
| Ubuntu 22.04 と 24.04 | ✓ | ✓ | 
| SUSE Linux Enterprise 15 SP2 以降 | ✓ | ✓ | 
| OpenSUSE Leap 15.5 以降 | ✓ |  | 

**注記**  
リストされているオペレーティングシステムの一部は、Intel MPI でサポートされていない場合があります。Intel MPI を使用している場合は、[Intel MPI ドキュメント](https://www.intel.com/content/www/us/en/developer/articles/system-requirements/mpi-library-system-requirements.html)を参照してオペレーティングシステムのサポートを確認してください。

## EFA の制限事項
<a name="efa-limits"></a>

EFA には次の制限があります。
+ RDMA 書き込みは、すべてのインスタンスタイプでサポートされているわけではありません。詳細については「[サポートされるインスタンスタイプ](#efa-instance-types)」を参照してください。
+ P4d/P4de/DL1 インスタンスと他のインスタンスタイプ間の EFA トラフィック 1 は現在サポートされていません。
+ [複数のネットワークカードをサポートするインスタンスタイプ](using-eni.md#network-cards)はネットワークカードごとに 1 つの EFA で設定できます。その他のサポートされているインスタンスタイプはすべて、インスタンスごとに 1 つの EFA のみをサポートしています。
+ EFA がアタッチされている場合、`c7g.16xlarge`、`m7g.16xlarge`、および `r7g.16xlarge` のハードウェア専有インスタンスおよび専有ホストはサポートされません。
+ EFA トラフィック 1 はアベイラビリティーゾーンまたは VPC をまたがることはできません。これはEFA インターフェイスの ENA デバイスからの通常の IP トラフィックには適用されません。
+ EFA トラフィック 1 はルーティングできません。EFA インターフェイスの ENA デバイスからの通常の IP トラフィックはルーティング可能です。
+ EFA は AWS Outposts ではサポートされていません。
+ EFA (EFA と ENA の組み合わせ) インターフェイスの EFA デバイスは AWS Cloud Digital Interface Software Development Kit (AWS CDI SDK) ベースのアプリケーションでのみ Windows インスタンスでサポートされています。EFA (EFA と ENA の組み合わせ) インターフェイスを Windows インスタンスに非 CDI SDK ベースのアプリケーション用として接続すると、EFA デバイスの機能を追加せずに、ENA インターフェースとして機能します。EFA のみのインターフェイスはWindows または Linux で AWS CDI ベースのアプリケーションではサポートされていません。詳細については「[AWS Cloud Digital Interface Software Development Kit (AWS CDI SDK) ユーザーガイド](https://docs.aws.amazon.com/CDI-SDK/latest/ug/what-is.html)」を参照してください。

1*EFA トラフィック*とは、EFA (EFA および ENA の組み合わせ) または EFA 専用のインターフェイスのいずれかの EFA デバイスを介して配信されるトラフィックを指します。

## EFA 価格設定
<a name="efa-pricing"></a>

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

# Amazon EC2 の HPC ワークロードに対して EFA と MPI の使用を開始する
<a name="efa-start"></a>

本チュートリアルはEFA と HPC ワークロードの MPI 対応インスタンスクラスターの起動に役立ちます。

**注記**  
`u7i-12tb.224xlarge`、`u7in-16tb.224xlarge`、`u7in-24tb.224xlarge`、および `u7in-32tb.224xlarge` インスタンスはOpen MPI では最大 128 の並列 MPI プロセスを実行でき、Intel MPI では最大 256 の並列 MPI プロセスを実行できます。

**Topics**
+ [ステップ 1: EFA 対応のセキュリティグループを準備する](#efa-start-security)
+ [ステップ 2: 一時インスタンスを作成する](#efa-start-tempinstance)
+ [ステップ 3: EFA ソフトウェアをインストールする](#efa-start-enable)
+ [ステップ 4: (*オプション*) Open MPI 5 を有効にする](#efa-start-ompi5)
+ [ステップ 5: (*オプション*) インテル MPI をインストールする](#efa-start-impi)
+ [ステップ 6: ptrace 保護を無効にする](#efa-start-ptrace)
+ [ステップ 7. インストールを確認する](#efa-start-test)
+ [ステップ 8: HPC アプリケーションをインストールする](#efa-start-hpc-app)
+ [ステップ 9: EFA 対応の AMI を作成する](#efa-start-ami)
+ [ステップ 10: クラスタープレイスメントグループで EFA 対応のインスタンスを作成する](#efa-start-instances)
+ [ステップ 11: 一時インスタンスを終了する](#efa-start-terminate)
+ [ステップ 12: パスワードレス SSH を有効にする](#efa-start-passwordless)

## ステップ 1: EFA 対応のセキュリティグループを準備する
<a name="efa-start-security"></a>

EFA にはセキュリティグループ自体とのインバウンドおよびアウトバウンドのトラフィックをすべて許可するセキュリティグループが必要です。以下の手順ではセキュリティグループを作成します。このセキュリティグループではセキュリティグループ自体とのすべてのインバウンドおよびアウトバウンドのトラフィックと、SSH 接続用の任意の IPv4 アドレスからのインバウンド SSH トラフィックを許可します。

**重要**  
このセキュリティグループはテストのみを目的としています。本番環境ではコンピュータの IP アドレスやローカルネットワークの IP アドレスの範囲など、接続元の IP アドレスからのトラフィックのみを許可するインバウンド SSH ルールを作成することをお勧めします。

その他のシナリオについては[さまざまなユースケースのセキュリティグループのルール](security-group-rules-reference.md)を参照してください。

**EFA 対応のセキュリティグループを作成するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**Security Groups**] (セキュリティグループ) を選択して、[**Create security group**] (セキュリティグループの作成) を選択してください。

1. [**Create security group**] (セキュリティグループの作成) ウィンドウで、以下を行います。

   1. [**セキュリティグループ名**] に、`EFA-enabled security group` のような、分かりやすいセキュリティグループ名を入力してください。

   1. (オプション) [**説明**] に、セキュリティグループの簡単な説明を入力してください。

   1. [**VPC**] で、EFA 対応のインスタンスを起動する VPC を選択してください。

   1. **[セキュリティグループの作成]** を選択してください。

1. 作成したセキュリティグループを選択し、**[Details]** (詳細) タブで **[Security group ID]** (セキュリティグループ ID) をコピーします。

1. セキュリティグループが選択された状態で、**[Actions]** (アクション)、**[Edit inbound rules]** (インバウンドルールの編集) の順に選択し、次の手順を実行します。

   1. [**Add rule**] を選択してください。

   1. [**Type**] で、[**All traffic**] を選択してください。

   1. **[Source type]** (送信元タイプ) で、**[Custom]** (カスタム) を選択し、コピーしたセキュリティグループ ID をフィールドに貼り付けます。

   1. [**ルールを追加**] を選択してください。

   1. **[タイプ]** で **SSH]** を選択してください。

   1. **[Source type]** (ソースタイプ) で、**[Anywhere-IPv4]** を選択してください。

   1. **[Save Rules]** (ルールの保存) を選択してください。

1. セキュリティグループが選択された状態で、**[Actions]** (アクション)、**[Edit outbound rules]** (アウトバウンドルールの編集) の順に選択し、次の手順を実行します。

   1. [**Add rule**] を選択してください。

   1. [**Type**] で、[**All traffic**] を選択してください。

   1. **[Destination type]** (送信先タイプ) で、**[Custom]** (カスタム) を選択し、コピーしたセキュリティグループ ID をフィールドに貼り付けます。

   1. **[Save Rules]** (ルールの保存) を選択してください。

## ステップ 2: 一時インスタンスを作成する
<a name="efa-start-tempinstance"></a>

EFA ソフトウェアコンポーネントのインストールおよび設定に使用する一時インスタンスを起動します。このインスタンスを使用して、EFA 対応のインスタンスを起動する EFA 対応の AMI を作成します。

**一時インスタンスを起動するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、**[Instances]** (インスタンス) を選択し、**[Launch Instances]** (インスタンスの起動) を選択して、新しいインスタンス起動ウィザードを開きます。

1. (*オプション*) **[Name and tags]** (名前とタグ) セクションで、`EFA-instance` などのインスタンス名を指定します。指定した名前はリソースタグとしてインスタンスに割り当てられます (`Name=EFA-instance`)。

1. **[Application and OS Images]** (アプリケーションと OS イメージ) セクションで、[サポートされるオペレーティングシステム](efa.md#efa-os)を選択してください。

1. **[Instance type]** (インスタンスタイプ) セクションで、[サポートされているインスタンスタイプ](efa.md#efa-instance-types)を選択してください。

1. **[Key pair]** (キーペア) セクションで、インスタンスに使用するキーペアを選択してください。

1. **[Network settings]** (ネットワーク設定) セクションで、**[Edit]** (編集) を選択し、次の操作を行います。

   1. [**サブネット**] で、インスタンスを起動するサブネットを選択してください。サブネットを選択しない場合、EFA のインスタンスを有効にすることはできません。

   1. **[Firewall (security groups)]** (ファイアウォール (セキュリティグループ)) の場合、**[Select existing security group]** (既存のセキュリティグループの選択) を選択し、前のステップで作成したセキュリティグループを選択してください。

   1. **[高度な設定]** セクションを展開します。

      **ネットワークインターフェイス 1** では**[ネットワークカードインデックス = 0]**、**[デバイスインデックス = 0]**、**[インターフェイスタイプ = EFA と ENA の組み合わせ]** を選択してください。

      (オプション) `p4d.24xlarge` または `p5.48xlarge` などのマルチカードインスタンスタイプを、必要な追加のネットワークインターフェイスごとに使用する場合は**[ネットワークインターフェイスの追加]** を選択し、**ネットワークカードインデックス**の場合は次の未使用インデックスを選択してから、**[デバイスインデックス = 1]**、**[インターフェイスタイプ = EFA と ENA の組み合わせ]** または **[EFA のみ]** を選択してください。

1. **[Storage]** (ストレージ) セクションで、必要に応じてボリュームを設定します。

1. 右側の **[合計mary]** (サマリー) パネルで、**[Launch instance]** (インスタンスの起動) を選択してください。

**注記**  
既に[アカウントのデフォルトとして IMDSv2 を設定](configuring-IMDS-new-instances.md#set-imdsv2-account-defaults)していない限り、一時インスタンスと[ステップ 9](#efa-start-ami) で作成する AMI に IMDSv2 の使用を必須化することを検討してください。IMDSv2 設定ステップの詳細については「[新規インスタンスのインスタンスメタデータオプションの設定](configuring-IMDS-new-instances.md)」を参照してください。

## ステップ 3: EFA ソフトウェアをインストールする
<a name="efa-start-enable"></a>

一時インスタンスで EFA をサポートするために必要な EFA 対応のカーネル、EFA ドライバー、Libfabric、および Open MPI スタックをインストールします。

このステップはEFA で Open MPI、Intel MPI、または Open MPI と Intel MPI のどれを使用するかによって異なります。

**注記**  
一部のオペレーティングシステムは、Intel MPI でサポートされていない場合があります。Intel MPI を使用している場合は、[Intel MPI ドキュメント](https://www.intel.com/content/www/us/en/developer/articles/system-requirements/mpi-library-system-requirements.html)を参照してオペレーティングシステムのサポートを確認してください。

**EFA ソフトウェアをインストールするには**

1. 起動したインスタンスに接続します。詳細については「[SSH を使用した Linux インスタンスへの接続](connect-to-linux-instance.md)」を参照してください。

1. すべてのソフトウェアパッケージが最新の状態であることを確認するため、インスタンスでソフトウェアの更新を実行します。このプロセスには数分かかることがあります。
   + Amazon Linux 2023、Amazon Linux 2、RHEL 8/9、Rocky Linux 8/9

     ```
     $ sudo yum update -y
     ```
   + Ubuntu と Debian

     ```
     $ sudo apt-get update && sudo apt-get upgrade -y
     ```
   + SUSE Linux Enterprise

     ```
     $ sudo zypper update -y
     ```

1. インスタンスを再起動して、そのインスタンスに再接続します。

1. EFA ソフトウェアのインストールファイルをダウンロードします。ソフトウェアのインストールファイルは圧縮された tar (`.tar.gz`) ファイルにパッケージ化されています。次のコマンドを使用して、*安定している*最新バージョンをダウンロードします。

   前述のコマンドのバージョン番号を `latest` に置き換えることで最新バージョンを取得することもできます。

   ```
   $ curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.47.0.tar.gz
   ```

1. (*オプション*) EFA tarball (`.tar.gz`) ファイルの認証と完全性を検証します。

   ソフトウェアパブリッシャーの ID を検証し、発行後にファイルの改変や破損がないことを確認するために、これを行うことをお勧めします。tar ファイルを検証しない場合はこの手順をスキップします。
**注記**  
代わりに、MD5 または SHA256 チェックサムを使用して tar ファイルを検証する場合は[チェックサムを使用した EFA インストーラの検証](efa-verify.md)を参照してください。

   1. パブリック GPG キーをダウンロードして、キーリングにインポートします。

      ```
      $ wget https://efa-installer.amazonaws.com/aws-efa-installer.key && gpg --import aws-efa-installer.key
      ```

      コマンドはキーの値を返します。次の手順で必要になるため、キーの値を書きとめておきます。

   1. GPG キーのフィンガープリントを検証します。次のコマンドを実行し、前のステップで作成したキーの値を指定します。

      ```
      $ gpg --fingerprint key_value
      ```

      コマンドは`4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC` と同じフィンガープリントを返します。フィンガープリントが一致しない場合はEFA インストールスクリプトを実行せず、サポート にお問い合わせください。

   1. 署名ファイルをダウンロードし、EFA tar ファイルの署名を検証します。

      ```
      $ wget https://efa-installer.amazonaws.com/aws-efa-installer-1.47.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.47.0.tar.gz.sig
      ```

      出力例を次に示します。

      ```
      gpg: Signature made Wed 29 Jul 2020 12:50:13 AM UTC using RSA key ID DD2D3CCC
      gpg: Good signature from "Amazon EC2 EFA <ec2-efa-maintainers@amazon.com>"
      gpg: WARNING: This key is not certified with a trusted signature!
      gpg:          There is no indication that the signature belongs to the owner.
      Primary key fingerprint: 4E90 91BC BB97 A96B 26B1  5E59 A054 80B1 DD2D 3CCC
      ```

      結果に `Good signature` が含まれ、フィンガープリントが前のステップで返されたフィンガープリントと一致する場合は次のステップに進みます。そうでない場合はEFA インストールスクリプトを実行せず、サポート にお問い合わせください。

1. 圧縮された `.tar.gz` ファイルからファイルを展開し、展開されたディレクトリに移動します。

   ```
   $ tar -xf aws-efa-installer-1.47.0.tar.gz && cd aws-efa-installer
   ```

1. EFA ソフトウェアをインストールします。使用するユースケースに応じて、以下のいずれかを実行します。
**注記**  
**EFA は SUSE Linux での NVIDIA GPUDirect をサポートしていません**。SUSE Linux を使用している場合はさらに kmod のインストールを防止する `--skip-kmod` オプションを指定する必要があります。デフォルトではSUSE Linux はツリー外のカーネルモジュールを許可しません。

------
#### [ Open MPI and Intel MPI ]

   EFA で Open MPI と Intel MPI を使用する場合はEFA ソフトウェアと共に Libfabric と Open MPI をインストールする必要があります。また、**「ステップ 5: (オプション) インテル MPI をインストールする」を完了する必要があります。**

   Libfabric および Open MPI と共に EFA ソフトウェアをインストールするには次のコマンドを実行します。

**注記**  
EFA 1.30.0 からは　Open MPI 4.1 と Open MPI 5 の両方がデフォルトでインストールされます。任意で、インストールする Open MPI のバージョンを指定できます。Open MPI 4.1 のみをインストールするには `--mpi=openmpi4` を含めてください。Open MPI 5 のみをインストールするには`--mpi=openmpi5` を含めてください。両方をインストールする場合は`--mpi` オプションを省略してください。

   ```
   $ sudo ./efa_installer.sh -y
   ```

   Libfabric は `/opt/amazon/efa` にインストールされます。Open MPI 4.1 は `/opt/amazon/openmpi` にインストールされます。Open MPI 5 は `/opt/amazon/openmpi5` にインストールされます。

------
#### [ Open MPI only ]

   EFA で Open MPI のみを使用する場合はEFA ソフトウェアと共に Libfabric と Open MPI をインストールする必要があります。また、**「ステップ 5: (オプション) インテル MPI をインストールする」はスキップできます**。Libfabric および Open MPI と共に EFA ソフトウェアをインストールするには次のコマンドを実行します。

**注記**  
EFA 1.30.0 からは　Open MPI 4.1 と Open MPI 5 の両方がデフォルトでインストールされます。任意で、インストールする Open MPI のバージョンを指定できます。Open MPI 4.1 のみをインストールするには `--mpi=openmpi4` を含めてください。Open MPI 5 のみをインストールするには`--mpi=openmpi5` を含めてください。両方をインストールする場合は`--mpi` オプションを省略してください。

   ```
   $ sudo ./efa_installer.sh -y
   ```

   Libfabric は `/opt/amazon/efa` にインストールされます。Open MPI 4.1 は `/opt/amazon/openmpi` にインストールされます。Open MPI 5 は `/opt/amazon/openmpi5` にインストールされます。

------
#### [ Intel MPI only ]

   EFA で Intel MPI のみを使用する場合はLibfabric および Open MPI を使用せずに EFA ソフトウェアをインストールできます。この場合、Intel MPI は埋め込まれている Libfabric を使用します。これを選択した場合は「**ステップ 5: (オプション) インテル MPI をインストールする」を完了する必要があります**。

   Libfabric および Open MPI を使用せずに EFA ソフトウェアをインストールするには次のコマンドを実行します。

   ```
   $ sudo ./efa_installer.sh -y --minimal
   ```

------

1. EFA インストーラーでインスタンスの再起動を求めるメッセージが表示された場合は再起動してからインスタンスに再接続します。それ以外の場合はインスタンスからログアウトし、再度ログインしてインストールを完了します。

1. 非圧縮 tarball と tarball 自体を削除してください。そうしないと、これらが作成する EFA 対応 AMI に含まれてしまい、サイズが増加します。

## ステップ 4: (*オプション*) Open MPI 5 を有効にする
<a name="efa-start-ompi5"></a>

**注記**  
このステップはOpen MPI 5 を使用する場合にのみ実行します。

EFA 1.30.0 からは　Open MPI 4.1 と Open MPI 5 の両方がデフォルトでインストールされます。あるいは、Open MPI 4.1 または Open MPI 5 のみをインストールするように選択することもできます。

「**ステップ 3: EFA ソフトウェアをインストールする**」で Open MPI 5 のインストールを選択し、これを使用する場合は次の手順を実行して有効にする必要があります。

**Open MPI 5 を有効にするには**

1. Open MPI 5 を PATH 環境変数に追加します。

   ```
   $ module load openmpi5
   ```

1. Open MPI 5 の使用が有効になっていることを確認します。

   ```
   $ which mpicc
   ```

   このコマンドは Open MPI 5 のインストールディレクトリ - `/opt/amazon/openmpi5` を返すはずです。

1. (*オプション*) インスタンスが起動するたびに Open MPI 5 が PATH 環境変数に追加されるようにするには次の操作を行います。

------
#### [ bash shell ]

   `module load openmpi5` を `/home/username/.bashrc` と `/home/username/.bash_profile` に追加します。

------
#### [ csh and tcsh shells ]

   `/home/username/.cshrc` に `module load openmpi5` を追加します。

------

Open MPI 5 を PATH 環境変数から削除する必要がある場合は次のコマンドを実行して、シェルスタートアップスクリプトからそのコマンドを削除します。

```
$ module unload openmpi5
```

## ステップ 5: (*オプション*) インテル MPI をインストールする
<a name="efa-start-impi"></a>

**重要**  
このステップはIntel MPI を使用する場合にのみ実行します。Open MPI のみを使用する場合はこのステップをスキップしてください。

Intel MPI を使用するには追加のインストールと環境変数設定が必要です。

**前提条件**  
以下のステップはsudo アクセス許可を持つユーザーが実行してください。

**Intel MPI をインストールするには**

1. インテル MPI のインストールスクリプトをダウンロードするには次の手順を実行します。

   1. [インテルのウェブサイト](https://www.intel.com/content/www/us/en/developer/articles/tool/oneapi-standalone-components.html#mpi)にアクセスします。

   1. ウェブページの「**Intel MPI Library**」(インテル MPI ライブラリ) セクションで、**Intel MPI Library for Linux** **Offline** インストーラのリンクを選択してください。

1. 前のステップでダウンロードしたインストールスクリプトを実行します。

   ```
   $ sudo bash installation_script_name.sh
   ```

1. インストーラで、**[Accept & install]** (承諾してインストール) を選択してください。

1. インテル Improvement Program を読み、適切なオプションを選択してから、**[Begin Installation]** (インストールを開始) を選択してください。

1. インストールが完了したら、[**Close**] を選択してください。

1. デフォルトではインテル MPI は埋め込まれている (内部) Libfabric を使用します。代わりに、EFA インストーラに同梱されている Libfabric を使用するようにインテル MPI を設定できます。通常、EFA インストーラにはインテル MPI よりも新しいバージョンの Libfabric が同梱されています。場合によってはEFA インストーラに同梱されている Libfabric はインテル MPI よりもパフォーマンスが高い場合があります。EFA インストーラに同梱されている Libfabric を使用するようにインテル MPI を設定するにはシェルに応じて次のいずれかを実行します。

------
#### [ bash shells ]

   次のステートメントを `/home/username/.bashrc` と `/home/username/.bash_profile` に追加します。

   ```
   export I_MPI_OFI_LIBRARY_INTERNAL=0
   ```

------
#### [ csh and tcsh shells ]

   次のステートメントを `/home/username/.cshrc` に追加します。

   ```
   setenv I_MPI_OFI_LIBRARY_INTERNAL 0
   ```

------

1. 次の**ソース**コマンドをシェルスクリプトに追加して、インストールディレクトリから `vars.sh` スクリプトを読み込み、インスタンスが開始するたびにコンパイラ環境をセットアップします。使用するシェルに応じて、以下のいずれかを実行します。

------
#### [ bash shells ]

   次のステートメントを `/home/username/.bashrc` と `/home/username/.bash_profile` に追加します。

   ```
   source /opt/intel/oneapi/mpi/latest/env/vars.sh
   ```

------
#### [ csh and tcsh shells ]

   次のステートメントを `/home/username/.cshrc` に追加します。

   ```
   source /opt/intel/oneapi/mpi/latest/env/vars.csh
   ```

------

1. デフォルトでは設定ミスにより EFA が使用できない場合、インテル MPI はデフォルトで TCP/IP ネットワークスタックを使用するため、アプリケーションのパフォーマンスが低下する可能性があります。`I_MPI_OFI_PROVIDER` を `efa` に設定することでこれを防ぐことができます。これにより、EFA が利用できない場合、インテル MPI は次のエラーで失敗します。

   ```
   Abort (XXXXXX) on node 0 (rank 0 in comm 0): Fatal error in PMPI_Init: OtherMPI error,
   MPIR_Init_thread (XXX)........:	
   MPID_Init (XXXX)..............:
   MPIDI_OFI_mpi_init_hook (XXXX):
   open_fabric (XXXX)............:
   find_provider (XXXX)..........:
   OFI fi_getinfo() failed (ofi_init.c:2684:find_provider:
   ```

   使用するシェルに応じて、以下のいずれかを実行します。

------
#### [ bash shells ]

   次のステートメントを `/home/username/.bashrc` と `/home/username/.bash_profile` に追加します。

   ```
   export I_MPI_OFI_PROVIDER=efa
   ```

------
#### [ csh and tcsh shells ]

   次のステートメントを `/home/username/.cshrc` に追加します。

   ```
   setenv I_MPI_OFI_PROVIDER efa
   ```

------

1. デフォルトではインテル MPI はデバッグ情報を出力しません。さまざまな詳細レベルを指定して、デバッグ情報を制御できます。可能な値は次のとおりです (提供される詳細の量の順): `0` (デフォルト)、`1`、`2`、`3`、`4`、`5`。レベル `1` 以上は `libfabric version` と `libfabric provider` を出力します。インテル MPI が内部 Libfabric を使用しているか、または EFA インストーラに同梱されている Libfabric を使用しているかを確認するために `libfabric version` を使用します。内部 Libfabric を使用している場合、バージョンのサフィックスは `impi` です。インテル MPI が EFA または TCP/IP ネットワークを使用しているかどうかを確認するために `libfabric provider` を使用します。EFA を使用している場合、値は `efa` です。TCP/IP を使用している場合、値は `tcp;ofi_rxm` です。

   デバッグ情報を有効にするには使用するシェルに応じて、次のいずれかを実行します。

------
#### [ bash shells ]

   次のステートメントを `/home/username/.bashrc` と `/home/username/.bash_profile` に追加します。

   ```
   export I_MPI_DEBUG=value
   ```

------
#### [ csh and tcsh shells ]

   次のステートメントを `/home/username/.cshrc` に追加します。

   ```
   setenv I_MPI_DEBUG value
   ```

------

1. デフォルトではインテル MPI はノード内通信にオペレーティングシステムの共有メモリ (`shm`) を使用し、ノード間通信にのみ Libfabric (`ofi`) を使用します。通常、この設定は最高のパフォーマンスを提供します。ただし、場合によってはインテル MPI shm ファブリックによって特定のアプリケーションが無期限にハングすることがあります。

   この問題を解決するために、インテル MPI がノード内通信とノード間通信の両方に Libfabric を使用するように強制できます。これを実行するには使用するシェルに応じて、次のいずれかを実行します。

------
#### [ bash shells ]

   次のステートメントを `/home/username/.bashrc` と `/home/username/.bash_profile` に追加します。

   ```
   export I_MPI_FABRICS=ofi
   ```

------
#### [ csh and tcsh shells ]

   次のステートメントを `/home/username/.cshrc` に追加します。

   ```
   setenv I_MPI_FABRICS ofi
   ```

------
**注記**  
EFA Libfabric プロバイダーはオペレーティングシステムの共有メモリをノード内通信に使用します。これは`I_MPI_FABRICS` を `ofi` に設定すると、デフォルトの `shm:ofi` 設定と同様のパフォーマンスが得られることを意味します。

1. インスタンスからログアウトしてからログインし直します。

Intel MPI が不要になった場合はシェル起動スクリプトから環境変数を削除してください。

## ステップ 6: ptrace 保護を無効にする
<a name="efa-start-ptrace"></a>

HPC アプリケーションのパフォーマンスを向上させるために、Libfabric はプロセスが同じインスタンスで実行されている場合、プロセス間通信にインスタンスのローカルメモリを使用します。

共有メモリ機能では*ptrace 保護*ではサポートされない Cross-Memory Attach (CMA) が使用されます。Ubuntu など、ptrace 保護がデフォルトで有効になっている Linux ディストリビューションを使用している場合は無効にする必要があります。Linux ディストリビューションで ptrace 保護がデフォルトで有効になっていない場合はこのステップをスキップします。

**ptrace 保護を無効にするには**  
次のいずれかを行ってください。
+ テストのために ptrace 保護を一時的に無効にするには次のコマンドを実行します。

  ```
  $ sudo sysctl -w kernel.yama.ptrace_scope=0
  ```
+ ptrace 保護を完全に無効にするには`kernel.yama.ptrace_scope = 0` を `/etc/sysctl.d/10-ptrace.conf` に追加してインスタンスを再起動します。

## ステップ 7. インストールを確認する
<a name="efa-start-test"></a>

**インストールが正常に完了したことを確認するには**

1. MPI が正常にインストールされていることを確認するには次のコマンドを実行します。

   ```
   $ which mpicc
   ```
   + Open MPI の場合、返されるパスには `/opt/amazon/` が含まれている必要があります。
   + Intel MPI の場合、返されるパスには `/opt/intel/` が含まれている必要があります。期待どおりの出力が得られない場合はIntel MPI `vars.sh` スクリプトをソースとしていることを確認してください。

1. EFA ソフトウェアコンポーネントと Libfabric が正常にインストールされたことを確認するには以下のコマンドを実行します。

   ```
   $ fi_info -p efa -t FI_EP_RDM
   ```

   コマンドによって、Libfabric の EFA インターフェイスに関する情報が返ります。以下の例はコマンド出力を示しています。

   ```
   provider: efa
       fabric: EFA-fe80::94:3dff:fe89:1b70
       domain: efa_0-rdm
       version: 2.0
       type: FI_EP_RDM
       protocol: FI_PROTO_EFA
   ```

## ステップ 8: HPC アプリケーションをインストールする
<a name="efa-start-hpc-app"></a>

HPC アプリケーションを一時インスタンスにインストールします。インストール手順は特定の HPC アプリケーションによって異なります。詳細については「Amazon Linux 2 ユーザーガイド」の「[AL2 インスタンスでのソフトウェアの管理](https://docs.aws.amazon.com/linux/al2/ug/managing-software.html)」を参照してください。 **

**注記**  
インストール手順についてはHPC アプリケーションのドキュメントを参照してください。

## ステップ 9: EFA 対応の AMI を作成する
<a name="efa-start-ami"></a>

必要なソフトウェアコンポーネントのインストール後、EFA 対応のインスタンスの起動に再利用できる AMI を作成します。

**一時インスタンスから AMI を作成するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、**[Instances]** (インスタンス) を選択してください。

1. 作成した一時インスタンスを選択し、[**アクション**]、[**イメージ**]、[**イメージの作成**] の順に選択してください。

1. [**イメージの作成**] で、次を行います。

   1. [**イメージ名**] に、の分かりやすい AMI 名を入力してください。

   1. (オプション) [**イメージの説明**] に、AMI の簡単な説明を入力してください。

   1. [**イメージを作成**] を選択してください。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. リストで作成した AMI を探します。ステータスが `pending` から `available` に変わるまで待ってから、次のステップに進みます。

## ステップ 10: クラスタープレイスメントグループで EFA 対応のインスタンスを作成する
<a name="efa-start-instances"></a>

**ステップ 7** で作成した EFA 対応の AMI と、**ステップ 1** で作成した EFA 対応のセキュリティグループを使用して、EFA 対応のインスタンスをクラスタープレイスメントグループ内で起動します。

**注記**  
EFA 対応のインスタンスをクラスタープレイスメントグループに起動することは絶対的な要件ではありません。ただし、EFA 対応のインスタンスは 1 つのアベイラビリティーゾーン内の低レイテンシーグループに起動されるため、クラスタープレイスメントグループで実行することをお勧めします。
クラスターのインスタンスをスケールするときにキャパシティを使用できるようにするにはクラスタープレイスメントグループのキャパシティ予約を作成します。詳細については「[クラスタープレイスメントグループでのキャパシティ予約の操作](cr-cpg.md)」を参照してください。

**インスタンスを起動するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、**[Instances]** (インスタンス) を選択し、**[Launch Instances]** (インスタンスの起動) を選択して、新しいインスタンス起動ウィザードを開きます。

1. (*オプション*) **[Name and tags]** (名前とタグ) セクションで、`EFA-instance` などのインスタンス名を指定します。指定した名前はリソースタグとしてインスタンスに割り当てられます (`Name=EFA-instance`)。

1. **[Application and OS Images]** (アプリケーションと OS イメージ) セクションで、**[My AMI]** (マイ AMI) をクリックし、前のステップで作成した AMI を選択してください。

1. **[Instance type]** (インスタンスタイプ) セクションで、[サポートされているインスタンスタイプ](efa.md#efa-instance-types)を選択してください。

1. **[Key pair]** (キーペア) セクションで、インスタンスに使用するキーペアを選択してください。

1. **[Network settings]** (ネットワーク設定) セクションで、**[Edit]** (編集) を選択し、次の操作を行います。

   1. [**サブネット**] で、インスタンスを起動するサブネットを選択してください。サブネットを選択しない場合、EFA のインスタンスを有効にすることはできません。

   1. **[Firewall (security groups)]** (ファイアウォール (セキュリティグループ)) の場合、**[Select existing security group]** (既存のセキュリティグループの選択) を選択し、前のステップで作成したセキュリティグループを選択してください。

   1. **[高度な設定]** セクションを展開します。

      **ネットワークインターフェイス 1** では**[ネットワークカードインデックス = 0]**、**[デバイスインデックス = 0]**、**[インターフェイスタイプ = EFA と ENA の組み合わせ]** を選択してください。

      (*オプション*) `p4d.24xlarge` または `p5.48xlarge` などのマルチカードインスタンスタイプを、必要な追加のネットワークインターフェイスごとに使用する場合は**[ネットワークインターフェイスの追加]** を選択し、**ネットワークカードインデックス**の場合は次の未使用インデックスを選択してから、**[デバイスインデックス = 1]**、**[インターフェイスタイプ = EFA と ENA の組み合わせ]** または **[EFA のみ]** を選択してください。

1. (*オプション*) **[Storage]** (ストレージ) セクションで、必要に応じてボリュームを設定します。

1. **[Advanced details]** (高度な詳細) セクションの **[Placement group name]** (プレイスメントグループ名) で、インスタンスを起動するクラスタープレイスメントグループを選択してください。新しいクラスタープレイスメントグループを作成する必要がある場合は**[Create new placement group]** (新しいプレイスメントグループの作成) を選択してください。

1. 右側の **[合計mary]** (サマリー) パネルで、**[Number of instances]** (インスタンス数) に、起動する EFA 対応のインスタンスの数を入力し、**[Launch Instance]** (インスタンスの起動) を選択してください。

## ステップ 11: 一時インスタンスを終了する
<a name="efa-start-terminate"></a>

この時点で、[ステップ 2](#efa-start-tempinstance) で起動したインスタンスは不要になります。インスタンスを終了して、料金の発生を停止できます。

**一時インスタンスを終了するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. 作成した一時インスタンスを選択し、**[アクション]**、**[インスタンスの状態]**、**[インスタンスの終了 (削除)]** の順に選択してください。

1. 確認を求めるメッセージが表示されたら、**[終了 (削除)]** を選択してください。

## ステップ 12: パスワードレス SSH を有効にする
<a name="efa-start-passwordless"></a>

クラスター内のすべてのインスタンスでアプリケーションを実行できるようにするにはリーダーノードからメンバーノードへのパスワードなしの SSH アクセスを有効にする必要があります。リーダーノードはアプリケーションを実行するインスタンスです。クラスター内の残りのインスタンスはメンバーノードです。

**クラスター内のインスタンス間でパスワードなしの SSH を有効にするには**

1. クラスター内の 1 つのインスタンスをリーダーノードとして選択し、それに接続します。

1. リーダーノード上で `strictHostKeyChecking` を無効にし `ForwardAgent` を有効にします。任意のテキストエディタを使用して `~/.ssh/config` ファイルを開き、以下を追加します。

   ```
   Host *
       ForwardAgent yes
   Host *
       StrictHostKeyChecking no
   ```

1. RSA キーペアを生成します。

   ```
   $ ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
   ```

   キーペアは`$HOME/.ssh/` ディレクトリで作成されます。

1. リーダーノードのプライベートキーの許可を変更します。

   ```
   $ chmod 600 ~/.ssh/id_rsa
   chmod 600 ~/.ssh/config
   ```

1. 任意のテキストエディタで `~/.ssh/id_rsa.pub` を開き、キーをコピーします。

1. クラスター内の各メンバーノードについて、次の操作を行います。

   1. インスタンスに接続します。

   1. 任意のテキストエディタで `~/.ssh/authorized_keys` を開き、前にコピーしたパブリックキーを追加します。

1. パスワードレス SSH が正常に機能していることをテストするにはリーダーノードに接続して、次のコマンドを実行します。

   ```
   $ ssh member_node_private_ip
   ```

   キーまたはパスワードの入力を求められずに、メンバーノードに接続できるはずです。

# Amazon EC2 の ML ワークロードに対して EFA と NCCL の使用を開始する
<a name="efa-start-nccl"></a>

NVIDIA Collective Communications Library (NCCL) は単一のノードまたは複数のノードの複数の GPU のための集合的な標準コミュニケーションルーチンのライブラリです。NCCL は各種の機械学習のワークロードをサポートするために、EFA、Libfabric、MPI と共に使用できます。詳細については[NCCL](https://developer.nvidia.com/nccl) のウェブサイトを参照してください。

**要件**
+ 高速コンピューティング P シリーズのインスタンスタイプのみがサポートされています。詳細については、「[Amazon EC2 の高速コンピューティングインスタンスの仕様](https://docs.aws.amazon.com/ec2/latest/instancetypes/ac.html#ac-sizes)」を参照してください。
+ Amazon Linux 2023、Amazon Linux 2、Ubuntu 24.04、Ubuntu 22.04 ベースの AMI のみがサポートされています。
+ NCCL EFA 以降のみが 2.4.2 でサポートされています。

AWS Deep Learning AMIs を使用して EFA および NCCL で機械学習ワークロードを実行する方法の詳細については、「*AWS Deep Learning AMIs デベロッパーガイド*」の「[DLAMI での EFA の使用](https://docs.aws.amazon.com/dlami/latest/devguide/tutorial-efa-using.html)」を参照してください。

**Topics**
+ [ステップ 1: EFA 対応のセキュリティグループを準備する](#nccl-start-base-setup)
+ [ステップ 2: 一時インスタンスを作成する](#nccl-start-base-temp)
+ [ステップ 3: Nvidia GPU ドライバー、Nvidia CUDA ツールキットおよび cuDNN をインストールする](#nccl-start-base-drivers)
+ [ステップ 4: GDRCopy をインストールする](#nccl-start-base-gdrcopy)
+ [ステップ 5: EFA ソフトウェアをインストールする](#nccl-start-base-enable)
+ [ステップ 6: NCCL をインストールする](#nccl-start-base-nccl)
+ [ステップ 7: NCCL テストをインストールする](#nccl-start-base-tests)
+ [ステップ 8: EFA と NCCL の設定をテストする](#nccl-start-base-test)
+ [ステップ 9: 機械学習アプリケーションをインストールする](#nccl-start-base-app)
+ [ステップ 10: EFA および NCCL 対応 AMI を作成する](#nccl-start-base-ami)
+ [ステップ 11: 一時インスタンスを終了する](#nccl-start-base-terminate)
+ [ステップ 12: クラスタープレイスメントグループで EFA および NCCL 対応のインスタンスを作成する](#nccl-start-base-cluster)
+ [ステップ 13: パスワードレス SSH を有効にする](#nccl-start-base-passwordless)

## ステップ 1: EFA 対応のセキュリティグループを準備する
<a name="nccl-start-base-setup"></a>

EFA にはセキュリティグループ自体とのインバウンドおよびアウトバウンドのトラフィックをすべて許可するセキュリティグループが必要です。以下の手順ではセキュリティグループを作成します。このセキュリティグループではセキュリティグループ自体とのすべてのインバウンドおよびアウトバウンドのトラフィックと、SSH 接続用の任意の IPv4 アドレスからのインバウンド SSH トラフィックを許可します。

**重要**  
このセキュリティグループはテストのみを目的としています。本番環境ではコンピュータの IP アドレスやローカルネットワークの IP アドレスの範囲など、接続元の IP アドレスからのトラフィックのみを許可するインバウンド SSH ルールを作成することをお勧めします。

その他のシナリオについては[さまざまなユースケースのセキュリティグループのルール](security-group-rules-reference.md)を参照してください。

**EFA 対応のセキュリティグループを作成するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**Security Groups**] (セキュリティグループ) を選択して、[**Create security group**] (セキュリティグループの作成) を選択してください。

1. [**Create security group**] (セキュリティグループの作成) ウィンドウで、以下を行います。

   1. [**セキュリティグループ名**] に、`EFA-enabled security group` のような、分かりやすいセキュリティグループ名を入力してください。

   1. (オプション) [**説明**] に、セキュリティグループの簡単な説明を入力してください。

   1. [**VPC**] で、EFA 対応のインスタンスを起動する VPC を選択してください。

   1. **[セキュリティグループの作成]** を選択してください。

1. 作成したセキュリティグループを選択し、**[Details]** (詳細) タブで **[Security group ID]** (セキュリティグループ ID) をコピーします。

1. セキュリティグループが選択された状態で、**[Actions]** (アクション)、**[Edit inbound rules]** (インバウンドルールの編集) の順に選択し、次の手順を実行します。

   1. [**Add rule**] を選択してください。

   1. [**Type**] で、[**All traffic**] を選択してください。

   1. **[Source type]** (送信元タイプ) で、**[Custom]** (カスタム) を選択し、コピーしたセキュリティグループ ID をフィールドに貼り付けます。

   1. [**ルールを追加**] を選択してください。

   1. **[タイプ]** で **SSH]** を選択してください。

   1. **[Source type]** (ソースタイプ) で、**[Anywhere-IPv4]** を選択してください。

   1. **[Save Rules]** (ルールの保存) を選択してください。

1. セキュリティグループが選択された状態で、**[Actions]** (アクション)、**[Edit outbound rules]** (アウトバウンドルールの編集) の順に選択し、次の手順を実行します。

   1. [**Add rule**] を選択してください。

   1. [**Type**] で、[**All traffic**] を選択してください。

   1. **[Destination type]** (送信先タイプ) で、**[Custom]** (カスタム) を選択し、コピーしたセキュリティグループ ID をフィールドに貼り付けます。

   1. **[Save Rules]** (ルールの保存) を選択してください。

## ステップ 2: 一時インスタンスを作成する
<a name="nccl-start-base-temp"></a>

EFA ソフトウェアコンポーネントのインストールおよび設定に使用する一時インスタンスを起動します。このインスタンスを使用して、EFA 対応のインスタンスを起動する EFA 対応の AMI を作成します。

**一時インスタンスを起動するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、**[Instances]** (インスタンス) を選択し、**[Launch Instances]** (インスタンスの起動) を選択して、新しいインスタンス起動ウィザードを開きます。

1. (*オプション*) **[Name and tags]** (名前とタグ) セクションで、`EFA-instance` などのインスタンス名を指定します。指定した名前はリソースタグとしてインスタンスに割り当てられます (`Name=EFA-instance`)。

1. **[アプリケーションと OS のイメージ]** セクションで、サポートされるオペレーティングシステムのいずれかに対応する AMI を選択してください。

1. **[インスタンスタイプ]** セクションで、サポートされているインスタンスタイプを選択してください。

1. **[Key pair]** (キーペア) セクションで、インスタンスに使用するキーペアを選択してください。

1. **[Network settings]** (ネットワーク設定) セクションで、**[Edit]** (編集) を選択し、次の操作を行います。

   1. [**サブネット**] で、インスタンスを起動するサブネットを選択してください。サブネットを選択しない場合、EFA のインスタンスを有効にすることはできません。

   1. **[Firewall (security groups)]** (ファイアウォール (セキュリティグループ)) の場合、**[Select existing security group]** (既存のセキュリティグループの選択) を選択し、前のステップで作成したセキュリティグループを選択してください。

   1. **[高度な設定]** セクションを展開します。

      **ネットワークインターフェイス 1** では**[ネットワークカードインデックス = 0]**、**[デバイスインデックス = 0]**、**[インターフェイスタイプ = EFA と ENA の組み合わせ]** を選択してください。

      (*オプション*) `p4d.24xlarge` または `p5.48xlarge` などのマルチカードインスタンスタイプを、必要な追加のネットワークインターフェイスごとに使用する場合は**[ネットワークインターフェイスの追加]** を選択し、**ネットワークカードインデックス**の場合は次の未使用インデックスを選択してから、**[デバイスインデックス = 1]**、**[インターフェイスタイプ = EFA と ENA の組み合わせ]** または **[EFA のみ]** を選択してください。

1. **[Storage]** (ストレージ) セクションで、必要に応じてボリュームを設定します。
**注記**  
Nvidia CUDA ツールキットには追加の 10 ～ 20 GiB のストレージをプロビジョニングする必要があります。十分な量のストレージをプロビジョニングしないと、Nvidia ドライバーと CUDA ツールキットをインストールしようとしたときに、`insufficient disk space` エラーが発生します。

1. 右側の **[合計mary]** (サマリー) パネルで、**[Launch instance]** (インスタンスの起動) を選択してください。

## ステップ 3: Nvidia GPU ドライバー、Nvidia CUDA ツールキットおよび cuDNN をインストールする
<a name="nccl-start-base-drivers"></a>

------
#### [ Amazon Linux 2023 and Amazon Linux 2 ]

**NVIDIA GPU ドライバー、NVIDIA CUDA ツールキットおよび cuDNN をインストールするには**

1. すべてのソフトウェアパッケージが最新の状態であることを確認するため、インスタンスでソフトウェアの更新を実行します。

   ```
   $ sudo yum upgrade -y && sudo reboot
   ```

   インスタンスの再起動後に、再接続します。

1. Nvidia GPU ドライバと Nvidia CUDA ツールキットをインストールするために必要なユーティリティをインストールします。

   ```
   $ sudo yum groupinstall 'Development Tools' -y
   ```

1. `nouveau` オープンソースドライバーを無効にします。

   1. 必要なユーティリティ、および現在実行しているカーネルのバージョン用のカーネルヘッダーパッケージをインストールします。

      ```
      $ sudo yum install -y wget kernel-devel-$(uname -r) kernel-headers-$(uname -r)
      ```

   1. `nouveau` 拒否リストファイルに `/etc/modprobe.d/blacklist.conf ` を追加します。

      ```
      $ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
      blacklist vga16fb
      blacklist nouveau
      blacklist rivafb
      blacklist nvidiafb
      blacklist rivatv
      EOF
      ```

   1. `grub` ファイルに `GRUB_CMDLINE_LINUX="rdblacklist=nouveau"` を追加し、Grub 設定を再構成します。

      ```
      $ echo 'GRUB_CMDLINE_LINUX="rdblacklist=nouveau"' | sudo tee -a /etc/default/grub \
      && sudo grub2-mkconfig -o /boot/grub2/grub.cfg
      ```

1. インスタンスを再起動して、そのインスタンスに再接続します。

1. 必要なリポジトリを準備する

   1. EPEL リポジトリを有効にし、ディストリビューションを に設定します`rhel7`。

      ```
      $ sudo amazon-linux-extras install epel \
      && distribution='rhel7'
      ```

   1. CUDA ネットワークリポジトリを設定し、リポジトリキャッシュを更新します。

      ```
      $ ARCH=$( /bin/arch ) \
      && sudo yum-config-manager --add-repo http://developer.download.nvidia.com/compute/cuda/repos/$distribution/${ARCH}/cuda-$distribution.repo \
      && sudo yum clean expire-cache
      ```

   1. (*カーネルバージョン 5.10 のみ*) 以下の手順は、Amazon Linux 2 をカーネルバージョン 5.10 で使用している場合にのみ実行します。Amazon Linux 2 をカーネルバージョン 4.12 で使用している場合は以下の手順をスキップします。カーネルバージョンを確認するには**uname -r** を実行します。

      1. `/etc/dkms/nvidia.conf` という名前で Nvidia ドライバ設定ファイルを作成します。

         ```
         $ sudo mkdir -p /etc/dkms \
         && echo "MAKE[0]=\"'make' -j2 module SYSSRC=\${kernel_source_dir} IGNORE_XEN_PRESENCE=1 IGNORE_PREEMPT_RT_PRESENCE=1 IGNORE_CC_MISMATCH=1 CC=/usr/bin/gcc10-gcc\"" | sudo tee /etc/dkms/nvidia.conf
         ```

      1. (`p4d.24xlarge` と `p5.48xlarge` のみ) NVIDIA ドライバー設定ファイルをコピーします。

         ```
         $ sudo cp /etc/dkms/nvidia.conf /etc/dkms/nvidia-open.conf
         ```

1. NVIDIA GPU ドライバー、NVIDIA CUDA ツールキット、および cuDNN をインストールします。

   ```
   $ sudo yum clean all \
   && sudo yum -y install nvidia-driver-latest-dkms \
   && sudo yum -y install cuda-drivers-fabricmanager cuda libcudnn8-devel
   ```

1. インスタンスを再起動して、そのインスタンスに再接続します。

1. (`p4d.24xlarge` および `p5.48xlarge` のみ) NVIDIA Fabric Manager サービスを開始し、インスタンスの起動時に自動的に起動することを確認します。NVIDIA Fabric Manager はNV Switch Management に必要です。

   ```
   $ sudo systemctl enable nvidia-fabricmanager && sudo systemctl start nvidia-fabricmanager
   ```

1. インスタンスが起動するたびに CUDA パスが設定されていることを確認します。
   + *bash* シェルの場合、次のステートメントを `/home/username/.bashrc` と `/home/username/.bash_profile` に追加します。

     ```
     export PATH=/usr/local/cuda/bin:$PATH
     export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```
   + *tcsh* シェルの場合、次の文を `/home/username/.cshrc` に追加します。

     ```
     setenv PATH=/usr/local/cuda/bin:$PATH
     setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```

1. 以下のコマンドを実行して、Nvidia GPU ドライバが機能することを確認します。

   ```
   $ nvidia-smi -q | head
   ```

   このコマンドはNvidia GPU、Nvidia GPU ドライバ、Nvidia CUDA ツールキットの情報を返します。

------
#### [ Ubuntu 24.04 and Ubuntu 22.04 ]

**NVIDIA GPU ドライバー、NVIDIA CUDA ツールキットおよび cuDNN をインストールするには**

1. すべてのソフトウェアパッケージが最新の状態であることを確認するため、インスタンスでソフトウェアの更新を実行します。

   ```
   $ sudo apt-get update && sudo apt-get upgrade -y
   ```

1. Nvidia GPU ドライバと Nvidia CUDA ツールキットをインストールするために必要なユーティリティをインストールします。

   ```
   $ sudo apt-get update && sudo apt-get install build-essential -y
   ```

1. Nvidia GPU ドライバを使用するにはまず、`nouveau` オープンソースドライバを無効にする必要があります。

   1. 必要なユーティリティ、および現在実行しているカーネルのバージョン用のカーネルヘッダーパッケージをインストールします。

      ```
      $ sudo apt-get install -y gcc make linux-headers-$(uname -r)
      ```

   1. `nouveau` 拒否リストファイルに `/etc/modprobe.d/blacklist.conf ` を追加します。

      ```
      $ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
      blacklist vga16fb
      blacklist nouveau
      blacklist rivafb
      blacklist nvidiafb
      blacklist rivatv
      EOF
      ```

   1. 任意のテキストエディタを使用して `/etc/default/grub` ファイルを開き、以下を追加します。

      ```
      GRUB_CMDLINE_LINUX="rdblacklist=nouveau"
      ```

   1. Grub 設定を再構築します。

      ```
      $ sudo update-grub
      ```

1. インスタンスを再起動して、そのインスタンスに再接続します。

1. CUDA リポジトリを追加し、Nvidia GPU ドライバー、NVIDIA CUDA ツールキット、および cuDNN をインストールします。
   + `p3dn.24xlarge`

     ```
     $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub \
     && wget -O /tmp/deeplearning.deb http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb \
     && sudo dpkg -i /tmp/deeplearning.deb \
     && wget -O /tmp/cuda.pin https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin \
     && sudo mv /tmp/cuda.pin /etc/apt/preferences.d/cuda-repository-pin-600 \
     && sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub \
     && sudo add-apt-repository 'deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /' \
     && sudo apt update \
     && sudo apt install nvidia-dkms-535 \
     && sudo apt install -o Dpkg::Options::='--force-overwrite' cuda-drivers-535 cuda-toolkit-12-3 libcudnn8 libcudnn8-dev -y
     ```
   + `p4d.24xlarge` および `p5.48xlarge` 

     ```
     $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub \
     && wget -O /tmp/deeplearning.deb http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb \
     && sudo dpkg -i /tmp/deeplearning.deb \
     && wget -O /tmp/cuda.pin https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin \
     && sudo mv /tmp/cuda.pin /etc/apt/preferences.d/cuda-repository-pin-600 \
     && sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub \
     && sudo add-apt-repository 'deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /' \
     && sudo apt update \
     && sudo apt install nvidia-kernel-open-535 \
     && sudo apt install -o Dpkg::Options::='--force-overwrite' cuda-drivers-535 cuda-toolkit-12-3 libcudnn8 libcudnn8-dev -y
     ```

1. インスタンスを再起動して、そのインスタンスに再接続します。

1. (`p4d.24xlarge` および `p5.48xlarge` のみ) NVIDIA Fabric Manager をインストールします。

   1. 前の手順でインストールした Nvidia カーネルモジュールのバージョンと一致する Nvidia Fabric Manager のバージョンをインストールする必要があります。

      Nvidia カーネルモジュールのバージョンを確認するには次のコマンドを実行します。

      ```
      $ cat /proc/driver/nvidia/version | grep "Kernel Module"
      ```

      出力例を次に示します。

      ```
      NVRM version: NVIDIA UNIX x86_64 Kernel Module  450.42.01  Tue Jun 15 21:26:37 UTC 2021
      ```

      上記の例ではメジャーバージョン `450` のカーネルモジュールがインストールされました。これはNvidia Fabric Manager のバージョン `450` をインストールする必要があることを意味します。

   1. Nvidia Fabric Manager をインストールする 次のコマンドを、前の手順で識別されたメジャーバージョンを指定して実行します。

      ```
      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-major_version_number
      ```

      例えば、メジャーバージョン `450` のカーネルモジュールがインストールされた場合、以下のコマンドを使用して、一致するバージョンの Nvidia Fabric Manager をインストールします。

      ```
      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-450
      ```

   1. サービスを開始し、インスタンスの起動時に自動的に起動することを確認します。NVIDIA Fabric Manager はNV Switch Management に必要です。

      ```
      $ sudo systemctl start nvidia-fabricmanager && sudo systemctl enable nvidia-fabricmanager
      ```

1. インスタンスが起動するたびに CUDA パスが設定されていることを確認します。
   + *bash* シェルの場合、次のステートメントを `/home/username/.bashrc` と `/home/username/.bash_profile` に追加します。

     ```
     export PATH=/usr/local/cuda/bin:$PATH
     export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```
   + *tcsh* シェルの場合、次の文を `/home/username/.cshrc` に追加します。

     ```
     setenv PATH=/usr/local/cuda/bin:$PATH
     setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```

1. 以下のコマンドを実行して、Nvidia GPU ドライバが機能することを確認します。

   ```
   $ nvidia-smi -q | head
   ```

   このコマンドはNvidia GPU、Nvidia GPU ドライバ、Nvidia CUDA ツールキットの情報を返します。

------

## ステップ 4: GDRCopy をインストールする
<a name="nccl-start-base-gdrcopy"></a>

GDRCopy をインストールして Libfabric のパフォーマンスを向上させます。GDRCopy の詳細については「[GDRCopy レポジトリ](https://github.com/NVIDIA/gdrcopy)」を参照してください。

------
#### [ Amazon Linux 2023 and Amazon Linux 2 ]

**GDRCopy をインストールするには**

1. 必要な依存ファイルをインストールします。

   ```
   $ sudo yum -y install dkms rpm-build make check check-devel subunit subunit-devel
   ```

1. GDRCopy パッケージをダウンロードして解凍します。

   ```
   $ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.4.tar.gz \
   && tar xf v2.4.tar.gz ; cd gdrcopy-2.4/packages
   ```

1. GDRCopy RPM パッケージをビルドします。

   ```
   $ CUDA=/usr/local/cuda ./build-rpm-packages.sh
   ```

1. GDRCopy RPM パッケージをインストールします。

   ```
   $ sudo rpm -Uvh gdrcopy-kmod-2.4-1dkms.noarch*.rpm \
   && sudo rpm -Uvh gdrcopy-2.4-1.x86_64*.rpm \
   && sudo rpm -Uvh gdrcopy-devel-2.4-1.noarch*.rpm
   ```

------
#### [ Ubuntu 24.04 and Ubuntu 22.04 ]

**GDRCopy をインストールするには**

1. 必要な依存ファイルをインストールします。

   ```
   $ sudo apt -y install build-essential devscripts debhelper check libsubunit-dev fakeroot pkg-config dkms
   ```

1. GDRCopy パッケージをダウンロードして解凍します。

   ```
   $ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.4.tar.gz \
   && tar xf v2.4.tar.gz \
   && cd gdrcopy-2.4/packages
   ```

1. GDRCopy RPM パッケージをビルドします。

   ```
   $ CUDA=/usr/local/cuda ./build-deb-packages.sh
   ```

1. GDRCopy RPM パッケージをインストールします。

   ```
   $ sudo dpkg -i gdrdrv-dkms_2.4-1_amd64.*.deb \
   && sudo dpkg -i libgdrapi_2.4-1_amd64.*.deb \
   && sudo dpkg -i gdrcopy-tests_2.4-1_amd64.*.deb \
   && sudo dpkg -i gdrcopy_2.4-1_amd64.*.deb
   ```

------

## ステップ 5: EFA ソフトウェアをインストールする
<a name="nccl-start-base-enable"></a>

一時インスタンスで EFA をサポートするために必要な EFA 対応のカーネル、EFA ドライバー、Libfabric、および Open MPI スタックをインストールします。

**EFA ソフトウェアをインストールするには**

1. 起動したインスタンスに接続します。詳細については「[SSH を使用した Linux インスタンスへの接続](connect-to-linux-instance.md)」を参照してください。

1. EFA ソフトウェアのインストールファイルをダウンロードします。ソフトウェアのインストールファイルは圧縮された tar (`.tar.gz`) ファイルにパッケージ化されています。次のコマンドを使用して、*安定している*最新バージョンをダウンロードします。

   前述のコマンドのバージョン番号を `latest` に置き換えることで最新バージョンを取得することもできます。

   ```
   $ curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.47.0.tar.gz
   ```

1. (*オプション*) EFA tarball (`.tar.gz`) ファイルの認証と完全性を検証します。

   ソフトウェアパブリッシャーの ID を検証し、発行後にファイルの改変や破損がないことを確認するために、これを行うことをお勧めします。tar ファイルを検証しない場合はこの手順をスキップします。
**注記**  
代わりに、MD5 または SHA256 チェックサムを使用して tar ファイルを検証する場合は[チェックサムを使用した EFA インストーラの検証](efa-verify.md)を参照してください。

   1. パブリック GPG キーをダウンロードして、キーリングにインポートします。

      ```
      $ wget https://efa-installer.amazonaws.com/aws-efa-installer.key && gpg --import aws-efa-installer.key
      ```

      コマンドはキーの値を返します。次の手順で必要になるため、キーの値を書きとめておきます。

   1. GPG キーのフィンガープリントを検証します。次のコマンドを実行し、前のステップで作成したキーの値を指定します。

      ```
      $ gpg --fingerprint key_value
      ```

      コマンドは`4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC` と同じフィンガープリントを返します。フィンガープリントが一致しない場合はEFA インストールスクリプトを実行せず、サポート にお問い合わせください。

   1. 署名ファイルをダウンロードし、EFA tar ファイルの署名を検証します。

      ```
      $ wget https://efa-installer.amazonaws.com/aws-efa-installer-1.47.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.47.0.tar.gz.sig
      ```

      出力例を次に示します。

      ```
      gpg: Signature made Wed 29 Jul 2020 12:50:13 AM UTC using RSA key ID DD2D3CCC
      gpg: Good signature from "Amazon EC2 EFA <ec2-efa-maintainers@amazon.com>"
      gpg: WARNING: This key is not certified with a trusted signature!
      gpg:          There is no indication that the signature belongs to the owner.
      Primary key fingerprint: 4E90 91BC BB97 A96B 26B1  5E59 A054 80B1 DD2D 3CCC
      ```

      結果に `Good signature` が含まれ、フィンガープリントが前のステップで返されたフィンガープリントと一致する場合は次のステップに進みます。そうでない場合はEFA インストールスクリプトを実行せず、サポート にお問い合わせください。

1. 圧縮された `.tar.gz` ファイルからファイルを展開し、展開されたディレクトリに移動します。

   ```
   $ tar -xf aws-efa-installer-1.47.0.tar.gz && cd aws-efa-installer
   ```

1. EFA ソフトウェアのインストールスクリプトを実行します。
**注記**  
EFA 1.30.0 からは　Open MPI 4.1 と Open MPI 5 の両方がデフォルトでインストールされます。Open MPI 5 が必要でない限り、Open MPI 4.1 のみをインストールすることをお勧めします。以下のコマンドは Open MPI 4.1 のみをインストールします。Open MPI 4.1 と Open MPI 5 をインストールする場合は `--mpi=openmpi4` を削除してください。

   ```
   $ sudo ./efa_installer.sh -y --mpi=openmpi4
   ```

   **Libfabric** は `/opt/amazon/efa` ディレクトリにインストールされます。**aws-ofi-nccl プラグイン**は `/opt/amazon/ofi-nccl` ディレクトリにインストールされます。**オープン MPI** は `/opt/amazon/openmpi` ディレクトリにインストールされます。

1. EFA インストーラーでインスタンスの再起動を求めるメッセージが表示された場合は再起動してからインスタンスに再接続します。それ以外の場合はインスタンスからログアウトし、再度ログインしてインストールを完了します。

1. EFA ソフトウェアコンポーネントが正常にインストールされたことを確認します。

   ```
   $ fi_info -p efa -t FI_EP_RDM
   ```

   コマンドによって、Libfabric の EFA インターフェイスに関する情報が返ります。以下の例はコマンド出力を示しています。
   + 単一のネットワークインターフェイスを持つ `p3dn.24xlarge`

     ```
     provider: efa
     fabric: EFA-fe80::94:3dff:fe89:1b70
     domain: efa_0-rdm
     version: 2.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     ```
   + 複数のネットワークインターフェイスを持つ `p4d.24xlarge` および `p5.48xlarge`

     ```
     provider: efa
     fabric: EFA-fe80::c6e:8fff:fef6:e7ff
     domain: efa_0-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::c34:3eff:feb2:3c35
     domain: efa_1-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::c0f:7bff:fe68:a775
     domain: efa_2-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::ca7:b0ff:fea6:5e99
     domain: efa_3-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     ```

## ステップ 6: NCCL をインストールする
<a name="nccl-start-base-nccl"></a>

NCCL をインストールします。NCCL に関する詳細については[NCCL repository](https://github.com/NVIDIA/nccl)を参照してください。

**NCCL をインストールするには**

1. `/opt` ディレクトリに移動します。

   ```
   $ cd /opt
   ```

1. 公式の NCCL リポジトリをインスタンスにクローンし、ローカルのクローンされたリポジトリに移動します。

   ```
   $ sudo git clone https://github.com/NVIDIA/nccl.git -b v2.23.4-1 && cd nccl
   ```

1. NCCL を構築およびインストールし、CUDA インストールディレクトリを指定します。

   ```
   $ sudo make -j src.build CUDA_HOME=/usr/local/cuda
   ```

## ステップ 7: NCCL テストをインストールする
<a name="nccl-start-base-tests"></a>

NCCL テストをインストールします。NCCL テストではNCCL が適切にインストールされていることを確認し、想定どおりに機能していることを確認できます。NCCL テストに関する詳細については[nccl-tests リポジトリ](https://github.com/NVIDIA/nccl-tests)を参照してください。

**NCCL テストをインストールするには**

1. ホームディレクトリに移動します。

   ```
   $ cd $HOME
   ```

1. 公式の nccl-tests リポジトリをインスタンスにクローンし、ローカルのクローンされたリポジトリに移動します。

   ```
   $ git clone https://github.com/NVIDIA/nccl-tests.git && cd nccl-tests
   ```

1. Libfabric ディレクトリを `LD_LIBRARY_PATH` 変数に追加します。
   + Amazon Linux 2023 および Amazon Linux 2

     ```
     $ export LD_LIBRARY_PATH=/opt/amazon/efa/lib64:$LD_LIBRARY_PATH
     ```
   + Ubuntu 24.04 と Ubuntu 22.04

     ```
     $ export LD_LIBRARY_PATH=/opt/amazon/efa/lib:$LD_LIBRARY_PATH
     ```

1. NCCL テストをインストールし、MPI、NCCL、CUDA インストールディレクトリを指定します。

   ```
   $ make MPI=1 MPI_HOME=/opt/amazon/openmpi NCCL_HOME=/opt/nccl/build CUDA_HOME=/usr/local/cuda
   ```

## ステップ 8: EFA と NCCL の設定をテストする
<a name="nccl-start-base-test"></a>

テストを実行し、EFA と NCCL に一時インスタンスが適切に設定されていることを確認します。

**EFA と NCCL 設定をテストするには**

1. テストを実行するホストを指定するホストファイルを作成します。以下のコマンドはインスタンス自体へのリファレンスを含む `my-hosts` と呼ばれるホストファイルを作成します。

------
#### [ IMDSv2 ]

   ```
   [ec2-user ~]$ TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"` \
   && curl -H "X-aws-ec2-metadata-token: $TOKEN" -v http://169.254.169.254/latest/meta-data/local-ipv4 >> my-hosts
   ```

------
#### [ IMDSv1 ]

   ```
   [ec2-user ~]$ curl http://169.254.169.254/latest/meta-data/local-ipv4 >> my-hosts
   ```

------

1. テストを実行し、ホストファイル (`--hostfile`) と使用する GPU の数 (`-n`) を指定します。以下のコマンドはインスタンス自体の 8 つの GPU で `all_reduce_perf` テストを実行し、以下の環境変数を指定します。
   + `FI_EFA_USE_DEVICE_RDMA=1` — (`p4d.24xlarge` のみ) 片側転送および両側転送にデバイスの RDMA 機能を使用します。
   + `NCCL_DEBUG=INFO` – 詳細なデバッグ出力を有効にします。また、テストの開始時に NCCL バージョンのみをプリントするために `VERSION` を指定したり、エラーメッセージのみを受信するために `WARN` を指定したりすることもできます。

   NCCL テスト引数に関する詳細は公式の nccl-tests リポジトリの[NCCL Tests README](https://github.com/NVIDIA/nccl-tests/blob/master/README.md)を参照してください。
   + `p3dn.24xlarge`

     ```
     $ /opt/amazon/openmpi/bin/mpirun \
     -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/amazon/ofi-nccl/lib:$LD_LIBRARY_PATH \
     -x NCCL_DEBUG=INFO \
     --hostfile my-hosts -n 8 -N 8 \
     --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \
     $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100
     ```
   + `p4d.24xlarge` および `p5.48xlarge` 

     ```
     $ /opt/amazon/openmpi/bin/mpirun \
     -x FI_EFA_USE_DEVICE_RDMA=1 \
     -x LD_LIBRARY_PATH=/opt/nccl/build/lib:/usr/local/cuda/lib64:/opt/amazon/efa/lib:/opt/amazon/openmpi/lib:/opt/amazon/ofi-nccl/lib:$LD_LIBRARY_PATH \
     -x NCCL_DEBUG=INFO \
     --hostfile my-hosts -n 8 -N 8 \
     --mca pml ^cm --mca btl tcp,self --mca btl_tcp_if_exclude lo,docker0 --bind-to none \
     $HOME/nccl-tests/build/all_reduce_perf -b 8 -e 1G -f 2 -g 1 -c 1 -n 100
     ```

1. `NCCL_DEBUG` ログが出力されるときに、EFA が NCCL の基盤となるプロバイダーとしてアクティブであることを確認できます。

   ```
   ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Selected Provider is efa*
   ```

   `p4d.24xlarge` インスタンスの使用時に、次の追加情報が表示されます。

   ```
   ip-192-168-2-54:14:14 [0] NCCL INFO NET/OFI Running on P4d platform, Setting NCCL_TOPO_FILE environment variable to /home/ec2-user/install/plugin/share/aws-ofi-nccl/xml/p4d-24xl-topo.xml
   ```

## ステップ 9: 機械学習アプリケーションをインストールする
<a name="nccl-start-base-app"></a>

機械学習アプリケーションを一時インスタンスにインストールします。インストール手順はそれぞれの機械学習アプリケーションによって異なります。Linux インスタンスへのソフトウェアのインストールの詳細については「[Amazon Linux 2 インスタンスでのソフトウェアの管理](https://docs.aws.amazon.com/linux/al2/ug/managing-software.html)」を参照してください。

**注記**  
インストール手順については機械学習アプリケーションのドキュメントを参照してください。

## ステップ 10: EFA および NCCL 対応 AMI を作成する
<a name="nccl-start-base-ami"></a>

必要なソフトウェアコンポーネントのインストール後、EFA 対応のインスタンスの起動に再利用できる AMI を作成します。

**一時インスタンスから AMI を作成するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. 作成した一時インスタンスを選択し、[**アクション**]、[**イメージ**]、[**イメージの作成**] の順に選択してください。

1. [**イメージの作成**] で、次を行います。

   1. [**イメージ名**] に、の分かりやすい AMI 名を入力してください。

   1. (オプション) [**イメージの説明**] に、AMI の簡単な説明を入力してください。

   1. [**イメージを作成**] を選択してください。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. リストで作成した AMI を探します。ステータスが `pending` から `available` に変わるまで待ってから、次のステップに進みます。

## ステップ 11: 一時インスタンスを終了する
<a name="nccl-start-base-terminate"></a>

この時点で、起動した一時インスタンスは不要になります。インスタンスを終了して、料金の発生を停止できます。

**一時インスタンスを終了するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. 作成した一時インスタンスを選択し、[**アクション**]、[**インスタンスの状態**]、[**インスタンスの終了**] の順に選択してください。

1. 確認を求めるメッセージが表示されたら、[**終了**] を選択してください。

## ステップ 12: クラスタープレイスメントグループで EFA および NCCL 対応のインスタンスを作成する
<a name="nccl-start-base-cluster"></a>

前に作成した EFA 対応の AMI と EFA 対応のセキュリティグループを使用して、EFA および NCCL 対応のインスタンスをクラスタープレイスメントグループ内で起動します。

**注記**  
EFA 対応のインスタンスをクラスタープレイスメントグループに起動することは絶対的な要件ではありません。ただし、EFA 対応のインスタンスは 1 つのアベイラビリティーゾーン内の低レイテンシーグループに起動されるため、クラスタープレイスメントグループで実行することをお勧めします。
クラスターのインスタンスをスケールするときにキャパシティを使用できるようにするにはクラスタープレイスメントグループのキャパシティ予約を作成します。詳細については[クラスタープレイスメントグループでのキャパシティ予約の操作](cr-cpg.md) を参照してください。

------
#### [ New console ]

**一時インスタンスを起動するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、**[Instances]** (インスタンス) を選択し、**[Launch Instances]** (インスタンスの起動) を選択して、新しいインスタンス起動ウィザードを開きます。

1. (*オプション*) **[Name and tags]** (名前とタグ) セクションで、`EFA-instance` などのインスタンス名を指定します。指定した名前はリソースタグとしてインスタンスに割り当てられます (`Name=EFA-instance`)。

1. **[Application and OS Images]** (アプリケーションと OS イメージ) セクションで、**[My AMI]** (マイ AMI) をクリックし、前のステップで作成した AMI を選択してください。

1. **[Instance type]** (インスタンスタイプ) セクションで、`p3dn.24xlarge` または `p4d.24xlarge` のいずれかを選択してください。

1. **[Key pair]** (キーペア) セクションで、インスタンスに使用するキーペアを選択してください。

1. **[Network settings]** (ネットワーク設定) セクションで、**[Edit]** (編集) を選択し、次の操作を行います。

   1. [**サブネット**] で、インスタンスを起動するサブネットを選択してください。サブネットを選択しない場合、EFA のインスタンスを有効にすることはできません。

   1. **[Firewall (security groups)]** (ファイアウォール (セキュリティグループ)) の場合、**[Select existing security group]** (既存のセキュリティグループの選択) を選択し、前のステップで作成したセキュリティグループを選択してください。

   1. **[高度な設定]** セクションを展開します。

      **ネットワークインターフェイス 1 **では**[ネットワークカードインデックス = 0]**、**[デバイスインデックス = 0]**、および**[インターフェイスタイプ = EFA と ENA の組み合わせ]** を選択してください。

      （オプション) `p4d.24xlarge` または `p5.48xlarge` などのマルチカードインスタンスタイプを使用している場合は必要な追加のネットワークインターフェイスごとに**[ネットワークインターフェイスの追加]** を選択し、**ネットワークカードインデックス**の場合は次の未使用インデックスを選択してから、**[デバイスインデックス = 1]**、**[インターフェイスタイプ = ENA を含む EFA]** または **[EFA のみ]** を選択してください。

1. (*オプション*) **[Storage]** (ストレージ) セクションで、必要に応じてボリュームを設定します。

1. **[Advanced details]** (高度な詳細) セクションの **[Placement group name]** (プレイスメントグループ名) で、インスタンスを起動するクラスタープレイスメントグループを選択してください。新しいクラスタープレイスメントグループを作成する必要がある場合は**[Create new placement group]** (新しいプレイスメントグループの作成) を選択してください。

1. 右側の **[合計mary]** (サマリー) パネルで、**[Number of instances]** (インスタンス数) に、起動する EFA 対応のインスタンスの数を入力し、**[Launch Instance]** (インスタンスの起動) を選択してください。

------
#### [ Old console ]

**EFA および NCCL 対応のインスタンスをクラスタープレイスメントグループに起動するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. [**インスタンスの作成**] を選択してください。

1. [**AMI の選択**] ページで、[**マイ AMI**] を選択し、前に作成した AMI を見つけて、[**選択**] をクリックしてください。

1. **[インスタンスタイプの選択]** ページで **[p3dn.24xlarge]** を選択し、**[次へ: インスタンスの詳細の設定]** を選択してください。

1. [**インスタンスの詳細設定**] ページで、以下を行います。

   1. [**インスタンス数**] に、起動する EFA および NCCL 対応のインスタンスの数を入力してください。

   1. [**ネットワーク**] および [**サブネット**] で、インスタンスを起動する VPC およびサブネットを選択してください。

   1. [**プレイスメントグループ**] で、[**インスタンスをプレイスメントグループに追加します**] チェックボックスをオンにします。

   1. [**プレイスメントグループ名**] で、[**新しいプレイスメントグループに追加する**] チェックボックスをオンにし、分かりやすいプレイスメントグループ名を入力してください。次に、[**プレイスメントグループ戦略**] で [**クラスター**] を選択してください。

   1. [**EFA**] で、[**有効化**] を選択してください。

   1. [**ネットワークインターフェイス**] セクションの [**eth0**] で、[**新しいネットワークインターフェイス**] を選択してください。必要に応じて、プライマリ IPv4 アドレスと 1 つ以上のセカンダリ IPv4 アドレスを指定できます。関連付けられている IPv6 CIDR ブロックを持つサブネットにインスタンスを起動する場合は必要に応じて、プライマリ IPv6 アドレスと 1 つ以上のセカンダリ IPv6 アドレスを指定できます。

   1. [**次の手順: ストレージの追加**] を選択してください。

1. [**ストレージの追加**] ページで、AMI が指定するボリューム (ルートデバイスボリュームなど) に加えて、インスタンスにアタッチするボリュームを指定します。次に、[**次の手順: タグの追加**] を選択してください。

1. [**Add Tags**] ページで、ユーザーフレンドリーな名前などを使ってインスタンスのタグを指定し、[**Next: Configure Security Group**] を選択してください。

1. [**セキュリティグループの設定**] ページの [**セキュリティグループの割り当て**] で、[**既存のセキュリティグループの選択**] を選択し、前に作成したセキュリティグループを選択してください。

1. [**Review and Launch**] を選択してください。

1. [**インスタンス作成の確認**] ページで設定を確認し、[**起動**] を選択してキーペアを選択し、インスタンスを起動します。

------

## ステップ 13: パスワードレス SSH を有効にする
<a name="nccl-start-base-passwordless"></a>

クラスター内のすべてのインスタンスでアプリケーションを実行できるようにするにはリーダーノードからメンバーノードへのパスワードなしの SSH アクセスを有効にする必要があります。リーダーノードはアプリケーションを実行するインスタンスです。クラスター内の残りのインスタンスはメンバーノードです。

**クラスター内のインスタンス間でパスワードなしの SSH を有効にするには**

1. クラスター内の 1 つのインスタンスをリーダーノードとして選択し、それに接続します。

1. リーダーノード上で `strictHostKeyChecking` を無効にし `ForwardAgent` を有効にします。任意のテキストエディタを使用して `~/.ssh/config` ファイルを開き、以下を追加します。

   ```
   Host *
       ForwardAgent yes
   Host *
       StrictHostKeyChecking no
   ```

1. RSA キーペアを生成します。

   ```
   $ ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
   ```

   キーペアは`$HOME/.ssh/` ディレクトリで作成されます。

1. リーダーノードのプライベートキーの許可を変更します。

   ```
   $ chmod 600 ~/.ssh/id_rsa
   chmod 600 ~/.ssh/config
   ```

1. 任意のテキストエディタで `~/.ssh/id_rsa.pub` を開き、キーをコピーします。

1. クラスター内の各メンバーノードについて、次の操作を行います。

   1. インスタンスに接続します。

   1. 任意のテキストエディタで `~/.ssh/authorized_keys` を開き、前にコピーしたパブリックキーを追加します。

1. パスワードレス SSH が正常に機能していることをテストするにはリーダーノードに接続して、次のコマンドを実行します。

   ```
   $ ssh member_node_private_ip
   ```

   キーまたはパスワードの入力を求められずに、メンバーノードに接続できるはずです。

# Amazon EC2 の推論ワークロードに対して EFA と NIXL の使用を開始する
<a name="efa-start-nixl"></a>

NVIDIA Inference Xfer Library (NIXL) は、分散推論ワークロード専用に設計された、高スループットで低レイテンシーの通信ライブラリです。NIXL は、EFA および Libfabric とともに使用すれば、プリフィルノードとデコードノード間の KV キャッシュ転送をサポートでき、さまざまなストレージレイヤー間での KV キャッシュ移動を効率化できます。詳細については、[NIXL](https://github.com/ai-dynamo/nixl) のウェブサイトを参照してください。

**要件**
+ Ubuntu 24.04 と Ubuntu 22.04 ベースの AMI のみがサポートされています。
+ EFA は NIXL 1.0.0 以降のみをサポートしています。

**Topics**

## ステップ 1: EFA 対応のセキュリティグループを準備する
<a name="nixl-start-base-setup"></a>

EFA にはセキュリティグループ自体とのインバウンドおよびアウトバウンドのトラフィックをすべて許可するセキュリティグループが必要です。以下の手順ではセキュリティグループを作成します。このセキュリティグループではセキュリティグループ自体とのすべてのインバウンドおよびアウトバウンドのトラフィックと、SSH 接続用の任意の IPv4 アドレスからのインバウンド SSH トラフィックを許可します。

**重要**  
このセキュリティグループはテストのみを目的としています。本番環境ではコンピュータの IP アドレスやローカルネットワークの IP アドレスの範囲など、接続元の IP アドレスからのトラフィックのみを許可するインバウンド SSH ルールを作成することをお勧めします。

その他のシナリオについては[さまざまなユースケースのセキュリティグループのルール](security-group-rules-reference.md)を参照してください。

**EFA 対応のセキュリティグループを作成するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**Security Groups**] (セキュリティグループ) を選択して、[**Create security group**] (セキュリティグループの作成) を選択してください。

1. [**Create security group**] (セキュリティグループの作成) ウィンドウで、以下を行います。

   1. [**セキュリティグループ名**] に、`EFA-enabled security group` のような、分かりやすいセキュリティグループ名を入力してください。

   1. (オプション) [**説明**] に、セキュリティグループの簡単な説明を入力してください。

   1. [**VPC**] で、EFA 対応のインスタンスを起動する VPC を選択してください。

   1. **[セキュリティグループの作成]** を選択してください。

1. 作成したセキュリティグループを選択し、**[Details]** (詳細) タブで **[Security group ID]** (セキュリティグループ ID) をコピーします。

1. セキュリティグループが選択された状態で、**[Actions]** (アクション)、**[Edit inbound rules]** (インバウンドルールの編集) の順に選択し、次の手順を実行します。

   1. [**Add rule**] を選択してください。

   1. [**Type**] で、[**All traffic**] を選択してください。

   1. **[Source type]** (送信元タイプ) で、**[Custom]** (カスタム) を選択し、コピーしたセキュリティグループ ID をフィールドに貼り付けます。

   1. [**ルールを追加**] を選択してください。

   1. **[タイプ]** で **SSH]** を選択してください。

   1. **[Source type]** (ソースタイプ) で、**[Anywhere-IPv4]** を選択してください。

   1. **[Save Rules]** (ルールの保存) を選択してください。

1. セキュリティグループが選択された状態で、**[Actions]** (アクション)、**[Edit outbound rules]** (アウトバウンドルールの編集) の順に選択し、次の手順を実行します。

   1. [**Add rule**] を選択してください。

   1. [**Type**] で、[**All traffic**] を選択してください。

   1. **[Destination type]** (送信先タイプ) で、**[Custom]** (カスタム) を選択し、コピーしたセキュリティグループ ID をフィールドに貼り付けます。

   1. **[Save Rules]** (ルールの保存) を選択してください。

## ステップ 2: 一時インスタンスを作成する
<a name="nixl-start-base-temp"></a>

EFA ソフトウェアコンポーネントのインストールおよび設定に使用する一時インスタンスを起動します。このインスタンスを使用して、EFA 対応のインスタンスを起動する EFA 対応の AMI を作成します。

**一時インスタンスを起動するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、**[Instances]** (インスタンス) を選択し、**[Launch Instances]** (インスタンスの起動) を選択して、新しいインスタンス起動ウィザードを開きます。

1. (*オプション*) **[Name and tags]** (名前とタグ) セクションで、`EFA-instance` などのインスタンス名を指定します。指定した名前はリソースタグとしてインスタンスに割り当てられます (`Name=EFA-instance`)。

1. **[アプリケーションと OS のイメージ]** セクションで、サポートされるオペレーティングシステムのいずれかに対応する AMI を選択してください。[DLAMI リリースノートページ](https://docs.aws.amazon.com/dlami/latest/devguide/appendix-ami-release-notes)で、サポートされている DLAMI を選択することもできます。

1. **[インスタンスタイプ]** セクションで、サポートされているインスタンスタイプを選択してください。

1. **[Key pair]** (キーペア) セクションで、インスタンスに使用するキーペアを選択してください。

1. **[Network settings]** (ネットワーク設定) セクションで、**[Edit]** (編集) を選択し、次の操作を行います。

   1. [**サブネット**] で、インスタンスを起動するサブネットを選択してください。サブネットを選択しない場合、EFA のインスタンスを有効にすることはできません。

   1. **[Firewall (security groups)]** (ファイアウォール (セキュリティグループ)) の場合、**[Select existing security group]** (既存のセキュリティグループの選択) を選択し、前のステップで作成したセキュリティグループを選択してください。

   1. **[高度な設定]** セクションを展開します。

      **ネットワークインターフェイス 1** では**[ネットワークカードインデックス = 0]**、**[デバイスインデックス = 0]**、**[インターフェイスタイプ = EFA と ENA の組み合わせ]** を選択してください。

      (*オプション*) `p4d.24xlarge` または `p5.48xlarge` などのマルチカードインスタンスタイプを、必要な追加のネットワークインターフェイスごとに使用する場合は**[ネットワークインターフェイスの追加]** を選択し、**ネットワークカードインデックス**の場合は次の未使用インデックスを選択してから、**[デバイスインデックス = 1]**、**[インターフェイスタイプ = EFA と ENA の組み合わせ]** または **[EFA のみ]** を選択してください。

1. **[Storage]** (ストレージ) セクションで、必要に応じてボリュームを設定します。
**注記**  
Nvidia CUDA ツールキットには追加の 10 ～ 20 GiB のストレージをプロビジョニングする必要があります。十分な量のストレージをプロビジョニングしないと、Nvidia ドライバーと CUDA ツールキットをインストールしようとしたときに、`insufficient disk space` エラーが発生します。

1. 右側の **[合計mary]** (サマリー) パネルで、**[Launch instance]** (インスタンスの起動) を選択してください。

**重要**  
AMI に Nvidia GPU ドライバー、CUDA ツールキット、cuDNN がすでに含まれている場合、または非 GPU インスタンスを使用している場合は、ステップ 3 をスキップします。

## ステップ 3: Nvidia GPU ドライバー、Nvidia CUDA ツールキットおよび cuDNN をインストールする
<a name="nixl-start-base-drivers"></a>

**NVIDIA GPU ドライバー、NVIDIA CUDA ツールキットおよび cuDNN をインストールするには**

1. すべてのソフトウェアパッケージが最新の状態であることを確認するため、インスタンスでソフトウェアの更新を実行します。

   ```
   $ sudo apt-get update && sudo apt-get upgrade -y
   ```

1. Nvidia GPU ドライバと Nvidia CUDA ツールキットをインストールするために必要なユーティリティをインストールします。

   ```
   $ sudo apt-get install build-essential -y
   ```

1. Nvidia GPU ドライバを使用するにはまず、`nouveau` オープンソースドライバを無効にする必要があります。

   1. 必要なユーティリティ、および現在実行しているカーネルのバージョン用のカーネルヘッダーパッケージをインストールします。

      ```
      $ sudo apt-get install -y gcc make linux-headers-$(uname -r)
      ```

   1. `nouveau` 拒否リストファイルに `/etc/modprobe.d/blacklist.conf ` を追加します。

      ```
      $ cat << EOF | sudo tee --append /etc/modprobe.d/blacklist.conf
      blacklist vga16fb
      blacklist nouveau
      blacklist rivafb
      blacklist nvidiafb
      blacklist rivatv
      EOF
      ```

   1. 任意のテキストエディタを使用して `/etc/default/grub` ファイルを開き、以下を追加します。

      ```
      GRUB_CMDLINE_LINUX="rdblacklist=nouveau"
      ```

   1. Grub 設定を再構築します。

      ```
      $ sudo update-grub
      ```

1. インスタンスを再起動して、そのインスタンスに再接続します。

1. CUDA リポジトリを追加し、Nvidia GPU ドライバー、NVIDIA CUDA ツールキット、および cuDNN をインストールします。

   ```
   $ sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub \
   && wget -O /tmp/deeplearning.deb http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/nvidia-machine-learning-repo-ubuntu2004_1.0.0-1_amd64.deb \
   && sudo dpkg -i /tmp/deeplearning.deb \
   && wget -O /tmp/cuda.pin https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-ubuntu2004.pin \
   && sudo mv /tmp/cuda.pin /etc/apt/preferences.d/cuda-repository-pin-600 \
   && sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub \
   && sudo add-apt-repository 'deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/ /' \
   && sudo apt update \
   && sudo apt install nvidia-dkms-535 \
   && sudo apt install -o Dpkg::Options::='--force-overwrite' cuda-drivers-535 cuda-toolkit-12-3 libcudnn8 libcudnn8-dev -y
   ```

1. インスタンスを再起動して、そのインスタンスに再接続します。

1. (`p4d.24xlarge` および `p5.48xlarge` のみ) NVIDIA Fabric Manager をインストールします。

   1. 前の手順でインストールした Nvidia カーネルモジュールのバージョンと一致する Nvidia Fabric Manager のバージョンをインストールする必要があります。

      Nvidia カーネルモジュールのバージョンを確認するには次のコマンドを実行します。

      ```
      $ cat /proc/driver/nvidia/version | grep "Kernel Module"
      ```

      出力例を次に示します。

      ```
      NVRM version: NVIDIA UNIX x86_64 Kernel Module  450.42.01  Tue Jun 15 21:26:37 UTC 2021
      ```

      上記の例ではメジャーバージョン `450` のカーネルモジュールがインストールされました。これはNvidia Fabric Manager のバージョン `450` をインストールする必要があることを意味します。

   1. Nvidia Fabric Manager をインストールする 次のコマンドを、前の手順で識別されたメジャーバージョンを指定して実行します。

      ```
      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-major_version_number
      ```

      例えば、メジャーバージョン `450` のカーネルモジュールがインストールされた場合、以下のコマンドを使用して、一致するバージョンの Nvidia Fabric Manager をインストールします。

      ```
      $ sudo apt install -o Dpkg::Options::='--force-overwrite' nvidia-fabricmanager-450
      ```

   1. サービスを開始し、インスタンスの起動時に自動的に起動することを確認します。NVIDIA Fabric Manager はNV Switch Management に必要です。

      ```
      $ sudo systemctl start nvidia-fabricmanager && sudo systemctl enable nvidia-fabricmanager
      ```

1. インスタンスが起動するたびに CUDA パスが設定されていることを確認します。
   + *bash* シェルの場合、次のステートメントを `/home/username/.bashrc` と `/home/username/.bash_profile` に追加します。

     ```
     export PATH=/usr/local/cuda/bin:$PATH
     export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```
   + *tcsh* シェルの場合、次の文を `/home/username/.cshrc` に追加します。

     ```
     setenv PATH=/usr/local/cuda/bin:$PATH
     setenv LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64:$LD_LIBRARY_PATH
     ```

1. 以下のコマンドを実行して、Nvidia GPU ドライバが機能することを確認します。

   ```
   $ nvidia-smi -q | head
   ```

   このコマンドはNvidia GPU、Nvidia GPU ドライバ、Nvidia CUDA ツールキットの情報を返します。

**重要**  
AMI にすでに GDRCopy が含まれている場合、または非 GPU インスタンスを使用している場合は、ステップ 4 をスキップします。

## ステップ 4: GDRCopy をインストールする
<a name="nixl-start-base-gdrcopy"></a>

GDRCopy をインストールして GPU ベースのプラットフォーム上で Libfabric のパフォーマンスを向上させます。GDRCopy の詳細については「[GDRCopy レポジトリ](https://github.com/NVIDIA/gdrcopy)」を参照してください。

**GDRCopy をインストールするには**

1. 必要な依存ファイルをインストールします。

   ```
   $ sudo apt -y install build-essential devscripts debhelper check libsubunit-dev fakeroot pkg-config dkms
   ```

1. GDRCopy パッケージをダウンロードして解凍します。

   ```
   $ wget https://github.com/NVIDIA/gdrcopy/archive/refs/tags/v2.4.tar.gz \
   && tar xf v2.4.tar.gz \
   && cd gdrcopy-2.4/packages
   ```

1. GDRCopy DEB パッケージをビルドします。

   ```
   $ CUDA=/usr/local/cuda ./build-deb-packages.sh
   ```

1. GDRCopy DEB パッケージをインストールします。

   ```
   $ sudo dpkg -i gdrdrv-dkms_2.4-1_amd64.*.deb \
   && sudo dpkg -i libgdrapi_2.4-1_amd64.*.deb \
   && sudo dpkg -i gdrcopy-tests_2.4-1_amd64.*.deb \
   && sudo dpkg -i gdrcopy_2.4-1_amd64.*.deb
   ```

**重要**  
AMI に最新の EFA インストーラがすでに含まれている場合は、ステップ 5 をスキップします。

## ステップ 5: EFA ソフトウェアをインストールする
<a name="nixl-start-base-enable"></a>

インスタンスで EFA をサポートするために必要な EFA 対応のカーネル、EFA ドライバー、Libfabric スタックをインストールします。

**EFA ソフトウェアをインストールするには**

1. 起動したインスタンスに接続します。詳細については「[SSH を使用した Linux インスタンスへの接続](connect-to-linux-instance.md)」を参照してください。

1. EFA ソフトウェアのインストールファイルをダウンロードします。ソフトウェアのインストールファイルは圧縮された tar (`.tar.gz`) ファイルにパッケージ化されています。次のコマンドを使用して、*安定している*最新バージョンをダウンロードします。

   ```
   $ curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.47.0.tar.gz
   ```

1. 圧縮された `.tar.gz` ファイルからファイルを展開してターボールを削除し、展開されたディレクトリに移動します。

   ```
   $ tar -xf aws-efa-installer-1.47.0.tar.gz && rm -rf aws-efa-installer-1.47.0.tar.gz && cd aws-efa-installer
   ```

1. EFA ソフトウェアのインストールスクリプトを実行します。

   ```
   $ sudo ./efa_installer.sh -y
   ```

   **Libfabric** は `/opt/amazon/efa` ディレクトリにインストールされます。

1. EFA インストーラーでインスタンスの再起動を求めるメッセージが表示された場合は再起動してからインスタンスに再接続します。それ以外の場合はインスタンスからログアウトし、再度ログインしてインストールを完了します。

1. EFA ソフトウェアコンポーネントが正常にインストールされたことを確認します。

   ```
   $ fi_info -p efa -t FI_EP_RDM
   ```

   コマンドによって、Libfabric の EFA インターフェイスに関する情報が返ります。以下の例はコマンド出力を示しています。
   + 単一のネットワークインターフェイスを持つ `p3dn.24xlarge`

     ```
     provider: efa
     fabric: EFA-fe80::94:3dff:fe89:1b70
     domain: efa_0-rdm
     version: 2.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     ```
   + 複数のネットワークインターフェイスを持つ `p4d.24xlarge` および `p5.48xlarge`

     ```
     provider: efa
     fabric: EFA-fe80::c6e:8fff:fef6:e7ff
     domain: efa_0-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::c34:3eff:feb2:3c35
     domain: efa_1-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::c0f:7bff:fe68:a775
     domain: efa_2-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     provider: efa
     fabric: EFA-fe80::ca7:b0ff:fea6:5e99
     domain: efa_3-rdm
     version: 111.0
     type: FI_EP_RDM
     protocol: FI_PROTO_EFA
     ```

## ステップ 6: NIXL をインストールする
<a name="nixl-start-base-nixl"></a>

NIXL をインストールします。NIXL の詳細については、[NIXL リポジトリ](https://github.com/ai-dynamo/nixl)を参照してください。

------
#### [ Pre-built distributions ]

**PyPI を使用して NIXL をインストールする方法**

1. 必要な依存ファイルをインストールします。

   ```
   $ sudo apt install pip
   ```

1. NIXL をインストールします。

   ```
   $ pip install nixl
   ```

------
#### [ Build from source ]

**ソースから NIXL をビルドしてインストールする方法**

1. 必要な依存ファイルをインストールします。

   ```
   $ sudo apt install cmake pkg-config meson pybind11-dev libaio-dev nvidia-cuda-toolkit pip libhwloc-dev \
   && pip install meson ninja pybind11
   ```

1. ホームディレクトリに移動します。

   ```
   $ cd $HOME
   ```

1. 公式の NIXL リポジトリをインスタンスにクローンし、ローカルのクローンされたリポジトリに移動します。

   ```
   $ sudo git clone https://github.com/ai-dynamo/nixl.git && cd nixl
   ```

1. NIXL を構築してインストールし、Libfabric インストールディレクトリへのパスを指定します。

   ```
   $ sudo meson setup . nixl --prefix=/usr/local/nixl -Dlibfabric_path=/opt/amazon/efa
   $ cd nixl && sudo ninja && sudo ninja install
   ```

------

## ステップ 7: NIXL Benchmark をインストールして EFA と NIXL 設定をテストする
<a name="nixl-start-base-tests"></a>

NIXL Benchmark をインストールし、テストを実行して EFA と NIXL に一時インスタンスが適切に設定されていることを確認します。NIXL Benchmark により、NIXL が適切にインストールされていることと、想定どおりに機能していることを確認できます。詳細については、[nixlbench リポジトリ](https://github.com/ai-dynamo/nixl/tree/main/benchmark/nixlbench)を参照してください。

NIXL Benchmark (nixlbench) では、クライアントとサーバー間の調整に ETCD が必要です。ETCD と NIXL を併用するには、ETCD サーバーとクライアント、および ETCD CPP API が必要です。

------
#### [ Build from Docker ]

**Docker を使用して NIXL Benchmark をインストールしてテストする方法**

1. 公式の NIXL リポジトリのクローンを作成してインスタンスに投入し、nixlbench ビルドディレクトリに移動します。

   ```
   $ git clone https://github.com/ai-dynamo/nixl.git
   $ cd nixl/benchmark/nixlbench/contrib
   ```

1. コンテナを構築します。

   ```
   $ ./build.sh
   ```

   Docker ビルドオプションの詳細については、[nixlbench リポジトリ](https://github.com/ai-dynamo/nixl/tree/main/benchmark/nixlbench)を参照してください。

1. Docker をインストールします。

   ```
   $ sudo apt install docker.io -y
   ```

1. 調整のために ETCD サーバーを起動します。

   ```
   $ docker run -d --name etcd-server \
       -p 2379:2379 -p 2380:2380 \
       quay.io/coreos/etcd:v3.5.18 \
       /usr/local/bin/etcd \
       --data-dir=/etcd-data \
       --listen-client-urls=http://0.0.0.0:2379 \
       --advertise-client-urls=http://0.0.0.0:2379 \
       --listen-peer-urls=http://0.0.0.0:2380 \
       --initial-advertise-peer-urls=http://0.0.0.0:2380 \
       --initial-cluster=default=http://0.0.0.0:2380
   ```

1. ETCD サーバーが実行されていることを確認します。

   ```
   $ curl -L http://localhost:2379/health
   ```

   正常な出力:

   ```
   {"health":"true"}
   ```

1. インスタンスの 2 つのターミナルを開きます。両方のターミナルで、以下のコマンドを実行してインストールを確認します。コマンドは、同じインスタンス上の ETCD サーバーを使用し、バックエンドとして Libfabric を使用し、GPU メモリを使用して動作します。

   ```
   $ docker run -it --gpus all --network host nixlbench:latest \
       nixlbench --etcd_endpoints http://localhost:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM \
       --target_seg_type VRAM
   ```
**注記**  
GPU 以外のインスタンスには `VRAM` の代わりに `DRAM` 値を使用します。

------
#### [ Build from source ]

**重要**  
ステップ 6 で **[ソースからビルドする]** を選択した場合のみ、このタブに従います。

**NIXL Benchmark をインストールする方法**

1. 必要なシステム依存関係をインストールします。

   ```
   $ sudo apt install libgflags-dev
   ```

1. ETCD サーバーとクライアントをインストールします。

   ```
   $ sudo apt install -y etcd-server etcd-client
   ```

1. ETCD CPP API をインストールします。

   1. ETCD CPP API に必要な依存関係をインストールします。

      ```
      $ sudo apt install libboost-all-dev libssl-dev libgrpc-dev libgrpc++-dev libprotobuf-dev protobuf-compiler-grpc libcpprest-dev
      ```

   1. ETCD CPP API のクローンを作成してインストールします。

      ```
      $ cd $HOME
      $ git clone https://github.com/etcd-cpp-apiv3/etcd-cpp-apiv3.git
      $ cd etcd-cpp-apiv3
      $ mkdir build && cd build
      $ cmake ..
      $ sudo make -j$(nproc) && sudo make install
      ```

1. nixlbench をビルドしてインストールします。

   ```
   $ sudo meson setup . $HOME/nixl/benchmark/nixlbench -Dnixl_path=/usr/local/nixl/
   $ sudo ninja && sudo ninja install
   ```

**EFA と NIXL 設定をテストする方法**

1. インスタンスで ETCD サーバーを起動します。

   ```
   $ etcd --listen-client-urls "http://0.0.0.0:2379" \
       --advertise-client-urls "http://localhost:2379" &
   ```

1. ETCD サーバーが実行されていることを確認します。

   ```
   $ curl -L http://localhost:2379/health
   ```

   正常な出力:

   ```
   {"health":"true"}
   ```

1. インスタンスの 2 つのターミナルを開きます。両方のターミナルで、以下の手順に従って nixlbench を実行します。

   1. nixlbench がインストールされているディレクトリに移動します。

      ```
      $ cd /usr/local/nixlbench/bin/
      ```

   1. テストを実行し、バックエンド、ETCD サーバーのアドレス、イニシエータセグメントタイプを指定します。次のコマンドは、同じインスタンス上の ETCD サーバーを使用し、バックエンドとして Libfabric を使用し、GPU メモリを使用して動作します。環境変数により以下が設定されます。
      + `NIXL_LOG_LEVEL=INFO` — 詳細なデバッグ出力を有効にします。エラーメッセージのみを受信するように `WARN` を指定することもできます。
      + `LD_LIBRARY_PATH` — NIXL ライブラリのパスを設定します。

      NIXL Benchmark 引数の詳細については、公式の nixlbench リポジトリの [NIXLbench README](https://github.com/ai-dynamo/nixl/blob/main/benchmark/nixlbench/README.md) を参照してください。

      ```
      $ export NIXL_LOG_LEVEL=INFO
      $ export LD_LIBRARY_PATH=/usr/local/nixl/lib/$(gcc -dumpmachine):$LD_LIBRARY_PATH
      
      $ nixlbench --etcd-endpoints 'http://localhost:2379' \
          --backend 'LIBFABRIC' \
          --initiator_seg_type 'VRAM' \
          --target_seg_type 'VRAM'
      ```
**注記**  
GPU 以外のインスタンスには `VRAM` の代わりに `DRAM` 値を使用します。

------

## ステップ 8: 機械学習アプリケーションをインストールする
<a name="nixl-start-base-app"></a>

機械学習アプリケーションを一時インスタンスにインストールします。インストール手順はそれぞれの機械学習アプリケーションによって異なります。

**注記**  
インストール手順については機械学習アプリケーションのドキュメントを参照してください。

## ステップ 9: EFA および NIXL 対応 AMI を作成する
<a name="nixl-start-base-ami"></a>

必要なソフトウェアコンポーネントのインストール後、EFA 対応のインスタンスの起動に再利用できる AMI を作成します。

**一時インスタンスから AMI を作成するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. 作成した一時インスタンスを選択し、[**アクション**]、[**イメージ**]、[**イメージの作成**] の順に選択してください。

1. [**イメージの作成**] で、次を行います。

   1. [**イメージ名**] に、の分かりやすい AMI 名を入力してください。

   1. (オプション) [**イメージの説明**] に、AMI の簡単な説明を入力してください。

   1. [**イメージを作成**] を選択してください。

1. ナビゲーションペインで **[AMI]** を選択してください。

1. リストで作成した AMI を探します。ステータスが `pending` から `available` に変わるまで待ってから、次のステップに進みます。

## ステップ 10: 一時インスタンスを終了する
<a name="nixl-start-base-terminate"></a>

この時点で、起動した一時インスタンスは不要になります。インスタンスを終了して、料金の発生を停止できます。

**一時インスタンスを終了するには**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、[**インスタンス**] を選択してください。

1. 作成した一時インスタンスを選択し、[**アクション**]、[**インスタンスの状態**]、[**インスタンスの終了**] の順に選択してください。

1. 確認を求めるメッセージが表示されたら、[**終了**] を選択してください。

## ステップ 11: EFA および NIXL 対応インスタンスを起動する
<a name="nixl-start-base-cluster"></a>

**ステップ 9** で作成した EFA 対応の AMI と、**ステップ 1** で作成した EFA 対応のセキュリティグループを使用して、EFA および NIXL 対応インスタンスを起動します。

**EFA および NIXL 対応インスタンスを起動する方法**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで、**[Instances]** (インスタンス) を選択し、**[Launch Instances]** (インスタンスの起動) を選択して、新しいインスタンス起動ウィザードを開きます。

1. (*オプション*) **[Name and tags]** (名前とタグ) セクションで、`EFA-instance` などのインスタンス名を指定します。指定した名前はリソースタグとしてインスタンスに割り当てられます (`Name=EFA-instance`)。

1. **[Application and OS Images]** (アプリケーションと OS イメージ) セクションで、**[My AMI]** (マイ AMI) をクリックし、前のステップで作成した AMI を選択してください。

1. **[インスタンスタイプ]** セクションで、サポートされているインスタンスタイプを選択してください。

1. **[Key pair]** (キーペア) セクションで、インスタンスに使用するキーペアを選択してください。

1. **[Network settings]** (ネットワーク設定) セクションで、**[Edit]** (編集) を選択し、次の操作を行います。

   1. [**サブネット**] で、インスタンスを起動するサブネットを選択してください。サブネットを選択しない場合、EFA のインスタンスを有効にすることはできません。

   1. **[ファイアウォール (セキュリティグループ)]** の場合、**[既存のセキュリティグループを選択]** を選択し、**ステップ 1**で作成したセキュリティグループを選択してください。

   1. **[高度な設定]** セクションを展開します。

      **ネットワークインターフェイス 1** では**[ネットワークカードインデックス = 0]**、**[デバイスインデックス = 0]**、**[インターフェイスタイプ = EFA と ENA の組み合わせ]** を選択してください。

      (*オプション*) `p4d.24xlarge` または `p5.48xlarge` などのマルチカードインスタンスタイプを、必要な追加のネットワークインターフェイスごとに使用する場合は**[ネットワークインターフェイスの追加]** を選択し、**ネットワークカードインデックス**の場合は次の未使用インデックスを選択してから、**[デバイスインデックス = 1]**、**[インターフェイスタイプ = EFA と ENA の組み合わせ]** または **[EFA のみ]** を選択してください。

1. (*オプション*) **[Storage]** (ストレージ) セクションで、必要に応じてボリュームを設定します。

1. 右側の **[合計mary]** (サマリー) パネルで、**[Number of instances]** (インスタンス数) に、起動する EFA 対応のインスタンスの数を入力し、**[Launch Instance]** (インスタンスの起動) を選択してください。

## ステップ 12: パスワードレス SSH を有効にする
<a name="nixl-start-base-passwordless"></a>

クラスター内のすべてのインスタンスでアプリケーションを実行できるようにするにはリーダーノードからメンバーノードへのパスワードなしの SSH アクセスを有効にする必要があります。リーダーノードはアプリケーションを実行するインスタンスです。クラスター内の残りのインスタンスはメンバーノードです。

**クラスター内のインスタンス間でパスワードなしの SSH を有効にするには**

1. クラスター内の 1 つのインスタンスをリーダーノードとして選択し、それに接続します。

1. リーダーノード上で `strictHostKeyChecking` を無効にし `ForwardAgent` を有効にします。任意のテキストエディタを使用して `~/.ssh/config` ファイルを開き、以下を追加します。

   ```
   Host *
       ForwardAgent yes
   Host *
       StrictHostKeyChecking no
   ```

1. RSA キーペアを生成します。

   ```
   $ ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
   ```

   キーペアは`$HOME/.ssh/` ディレクトリで作成されます。

1. リーダーノードのプライベートキーの許可を変更します。

   ```
   $ chmod 600 ~/.ssh/id_rsa
   chmod 600 ~/.ssh/config
   ```

1. 任意のテキストエディタで `~/.ssh/id_rsa.pub` を開き、キーをコピーします。

1. クラスター内の各メンバーノードについて、次の操作を行います。

   1. インスタンスに接続します。

   1. 任意のテキストエディタで `~/.ssh/authorized_keys` を開き、前にコピーしたパブリックキーを追加します。

1. パスワードレス SSH が正常に機能していることをテストするにはリーダーノードに接続して、次のコマンドを実行します。

   ```
   $ ssh member_node_private_ip
   ```

   キーまたはパスワードの入力を求められずに、メンバーノードに接続できるはずです。

**重要**  
ステップ 7 に従った場合にのみ、ステップ 13 に従ってください。

## ステップ 13: インスタンス間で EFA と NIXL の設定をテストする
<a name="nixl-start-base-test-multi"></a>

テストを実行し、EFA と NIXL に対して一時インスタンスが適切に設定されていることを確認します。

------
#### [ Build from Docker ]

**Docker を使用してインスタンス間で EFA と NIXL の設定をテストする方法**

1. nixlbench ベンチマークを実行するためにホストを 2 つ選択します。最初のホストの IP アドレスをメタデータ交換用の ETCD サーバー IP として使用します。

1. ホスト 1 で ETCD サーバーを起動します。

   ```
   $ docker run -d --name etcd-server \
       -p 2379:2379 -p 2380:2380 \
       quay.io/coreos/etcd:v3.5.18 \
       /usr/local/bin/etcd \
       --data-dir=/etcd-data \
       --listen-client-urls=http://0.0.0.0:2379 \
       --advertise-client-urls=http://0.0.0.0:2379 \
       --listen-peer-urls=http://0.0.0.0:2380 \
       --initial-advertise-peer-urls=http://0.0.0.0:2380 \
       --initial-cluster=default=http://0.0.0.0:2380
   ```

1. ETCD サーバーが実行されていることを確認します。

   ```
   $ curl -L http://localhost:2379/health
   ```

   ```
   {"health":"true"}
   ```

1. ホスト 1 で nixlbench ベンチマークを実行します。

   ```
   $ docker run -it --gpus all --network host nixlbench:latest \
       nixlbench --etcd_endpoints http://localhost:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM
   ```

1. ホスト 2 で nixlbench ベンチマークを実行します。

   ```
   $ docker run -it --gpus all --network host nixlbench:latest \
       nixlbench --etcd_endpoints http://ETCD_SERVER_IP:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM
   ```

------
#### [ Build from source ]

**重要**  
ステップ 6 で **[ソースからビルドする]** を選択した場合のみ、このタブに従います。

**インスタンス間で EFA と NIXL の設定をテストする方法**

1. nixlbench ベンチマークを実行するためにホストを 2 つ選択します。最初のホストの IP アドレスをメタデータ交換用の ETCD サーバー IP として使用します。

1. ホスト 1 で ETCD サーバーを起動します。

   ```
   $ etcd --listen-client-urls "http://0.0.0.0:2379" \
       --advertise-client-urls "http://localhost:2379" &
   ```

1. ETCD サーバーが実行されていることを確認します。

   ```
   $ curl -L http://localhost:2379/health
   ```

   ```
   {"health":"true"}
   ```

1. ホスト 1 で nixlbench ベンチマークを実行します。

   ```
   $ export NIXL_LOG_LEVEL=INFO
   $ export LD_LIBRARY_PATH=$HOME/nixl/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
   
   $ nixlbench \
       --etcd-endpoints http://localhost:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM
   ```

1. ホスト 2 で nixlbench ベンチマークを実行します。

   ```
   $ export NIXL_LOG_LEVEL=INFO
   $ export LD_LIBRARY_PATH=$HOME/nixl/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
   
   $ nixlbench \
       --etcd-endpoints http://ETCD_SERVER_IP:2379 \
       --backend LIBFABRIC \
       --initiator_seg_type VRAM
   ```

------

## ステップ 14: vLLM で提供される分散推論をテストする (*オプション*)
<a name="nixl-start-base-serve"></a>

NIXL をインストールしたら、LLM 推論を通じて NIXL を使用すると、vLLM、SGLang、TensorRT-LLM などのフレームワークを提供できます。

**vLLM を使用して推論ワークロードを提供する方法**

1. vLLM をインストールします。

   ```
   $ pip install vllm
   ```

1. NIXL を使用して vLLM サーバーを起動します。次のサンプルコマンドにより、NIXL ハンドシェイク接続、KV コネクタ、KV ロール、トランスポートバックエンド用として、プリフィル (プロデューサー) インスタンスが 1 つとデコード (コンシューマー) インスタンスが 1 つ作成されます。詳細な例とスクリプトについては、「[NIXLConnector 使用ガイド](https://github.com/vllm-project/vllm/blob/2d977a7a9ead3179fde9ed55d69393ef7b6cec47/docs/features/nixl_connector_usage.md)」を参照してください。

   NIXL を EFA とともに使用するには、セットアップとユースケースに基づいて環境変数を設定します。
   + プロデューサー (プリフィラー) の設定

     ```
     $ vllm serve your-application \
         --port 8200 \
         --enforce-eager \
         --kv-transfer-config '{"kv_connector":"NixlConnector","kv_role":"kv_both","kv_buffer_device":"cuda","kv_connector_extra_config":{"backends":["LIBFABRIC"]}}'
     ```
   + コンシューマー (デコーダー) の設定

     ```
     $ vllm serve your-application \
         --port 8200 \
         --enforce-eager \
         --kv-transfer-config '{"kv_connector":"NixlConnector","kv_role":"kv_both","kv_buffer_device":"cuda","kv_connector_extra_config":{"backends":["LIBFABRIC"]}}'
     ```

   前述のサンプル設定では、以下を設定します。
   + `kv_role` を `kv_both` に設定すると、コネクタがプロデューサーとコンシューマーの両方として機能する対称機能が有効になります。これにより、実験的なセットアップや、ロールの区別が事前に決定されていないシナリオに柔軟性が生まれます。
   + `kv_buffer_device` を `cuda` に設定すると、GPU メモリの使用が可能になります。
   + NIXL バックエンドを `LIBFABRIC` に設定すると、NIXL トラフィックが EFA を通過できるようになります。

# 複数のネットワークカードを使用して Amazon EC2 インスタンスのネットワーク帯域幅を最大化する
<a name="efa-acc-inst-types"></a>

EFA をサポートする多くのインスタンスタイプには複数のネットワークカードもあります。詳細については「[ネットワークカード](using-eni.md#network-cards)」を参照してください。これらのインスタンスタイプのいずれかで EFA を使用する予定がある場合は次の基本設定をお勧めします。
+ プライマリネットワークインターフェイス (ネットワークカードインデックス `0`、デバイスインデックス `0`) には、EFA インターフェイスを作成します。EFA のみのネットワークインターフェイスをプライマリネットワークインターフェイスとして使用することはできません。
+ ネットワークカードインデックス 0 が EFA をサポートする場合は、ネットワークカードインデックス `0`、デバイスインデックス `1` に EFA 専用ネットワークインターフェイスを作成します。
+ 追加される各ネットワークインターフェイスについては、ユースケース (ENA 帯域幅要件や IP アドレス空間など) に基づいて、EFA 専用ネットワークインターフェイスに次の未使用のネットワークカードインデックス、デバイスインデックス `0`、および/または EFA ネットワークインターフェイスにデバイスインデックス `1` を使用します。ユースケース例については「[P5 および P5e インスタンスの EFA 設定](#efa-for-p5)」を参照してください。

**注記**  
P5 インスタンスでは最大ネットワーク帯域幅を有効にするために、特定の方法でネットワークインターフェイスを設定する必要があります。詳細については「[P5 および P5e インスタンスの EFA 設定](#efa-for-p5)」を参照してください。

次の例はこれらの推奨事項に基づいてインスタンスを起動する方法を示しています。

------
#### [ Instance launch ]

**インスタンス起動ウィザードを使用したインスタンスの起動時に EFA を指定するには**

1. **[ネットワーク設定]** セクションで、**[編集]** をクリックしてください。

1. **高度なネットワーク設定**の拡張。

1. プライマリネットワークインターフェイス (ネットワークカードインデックス `0`、デバイスインデックス `0`) には、EFA インターフェイスを作成します。EFA のみのネットワークインターフェイスをプライマリネットワークインターフェイスとして使用することはできません。

1. ネットワークカードインデックス 0 が EFA をサポートする場合は、ネットワークカードインデックス `0`、デバイスインデックス `1` に EFA 専用ネットワークインターフェイスを作成します。

1. 追加される各ネットワークインターフェイスについては、ユースケース (ENA 帯域幅要件や IP アドレス空間など) に基づいて、EFA 専用ネットワークインターフェイスに次の未使用のネットワークカードインデックス、デバイスインデックス `0`、および/または EFA ネットワークインターフェイスにデバイスインデックス `1` を使用します。ユースケース例については「[P5 および P5e インスタンスの EFA 設定](#efa-for-p5)」を参照してください。

**[[run-instances]](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) コマンドを使用してインスタンスの起動中に EFA を指定するには**  
`--network-interfaces` では必要な数のネットワークインターフェイスを指定します。プライマリネットワークインターフェイスに `NetworkCardIndex=0`、`DeviceIndex=0`、`InterfaceType=interface` を指定します。ネットワークカードインデックス 0 が EFA をサポートする場合は、`NetworkCardIndex=0`、`DeviceIndex=1`、および `InterfaceType=efa-only` を指定します。追加のネットワークインターフェイスについては、`NetworkCardIndex` に次の未使用インデックス、`InterfaceType=efa-only` に `DeviceIndex=0`、および/または `InterfaceType=interface` に `DeviceIndex=1` を指定してください。

次のコマンドスニペットの例は32 の EFA デバイスおよび 1 つの ENA デバイスによるリクエストを示しています。

```
$ aws ec2 run-instances \
 --instance-type p5.48xlarge \
 --count 1 \
 --key-name key_pair_name \
 --image-id ami-0abcdef1234567890 \
 --network-interfaces "NetworkCardIndex=0,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=0,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=1,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=2,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=3,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=4,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=5,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=6,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=7,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=8,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=9,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=10,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=11,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=12,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=13,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=14,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=15,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=16,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=17,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=18,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=19,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=20,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=21,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=22,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=23,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=24,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=25,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=26,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=27,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=28,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=29,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=30,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=31,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only"
...
```

------
#### [ Launch templates ]

**Amazon EC2 コンソールを使用して起動テンプレートに EFA を追加するには**

1. **[ネットワーク設定]** セクションで **[高度なネットワーク設定]** を展開します。

1. プライマリネットワークインターフェイス (ネットワークカードインデックス `0`、デバイスインデックス `0`) には、EFA インターフェイスを作成します。EFA のみのネットワークインターフェイスをプライマリネットワークインターフェイスとして使用することはできません。

1. ネットワークカードインデックス 0 が EFA をサポートする場合は、ネットワークカードインデックス `0`、デバイスインデックス `1` に EFA 専用ネットワークインターフェイスを作成します。

1. 追加される各ネットワークインターフェイスについては、ユースケース (ENA 帯域幅要件や IP アドレス空間など) に基づいて、EFA 専用ネットワークインターフェイスに次の未使用のネットワークカードインデックス、デバイスインデックス `0`、および/または EFA ネットワークインターフェイスにデバイスインデックス `1` を使用します。ユースケース例については「[P5 および P5e インスタンスの EFA 設定](#efa-for-p5)」を参照してください。

**[[create-launch-template]](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-launch-template.html) コマンドを使用して起動テンプレートに EFA を追加するには**  
`NetworkInterfaces` では必要な数のネットワークインターフェイスを指定します。プライマリネットワークインターフェイスに `NetworkCardIndex=0`、`DeviceIndex=0`、`InterfaceType=interface` を指定します。ネットワークカードインデックス 0 が EFA をサポートする場合は、`NetworkCardIndex=0`、`DeviceIndex=1`、および `InterfaceType=efa-only` を指定します。追加のネットワークインターフェイスについては、`NetworkCardIndex` に次の未使用インデックス、`InterfaceType=efa-only` に `DeviceIndex=0`、および/または `InterfaceType=interface` に `DeviceIndex=1` を指定してください。

次のスニペットは設定可能な 32 のネットワークインターフェイスのうち 3 つのネットワークインターフェイスを使用した例を示しています。

```
"NetworkInterfaces":[
{
  "NetworkCardIndex":0,
  "DeviceIndex":0,
  "InterfaceType": "interface",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
},
{
  "NetworkCardIndex": 0,
  "DeviceIndex": 1,
  "InterfaceType": "efa-only",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
},
{
  "NetworkCardIndex": 1,
  "DeviceIndex": 0,
  "InterfaceType": "efa-only",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
},
{
  "NetworkCardIndex": 2,
  "DeviceIndex": 0,
  "InterfaceType": "efa-only",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
},
{
  "NetworkCardIndex": 3,
  "DeviceIndex": 0,
  "InterfaceType": "efa-only",
  "AssociatePublicIpAddress":false,
  "Groups":[
    "security_group_id"
  ],
  "DeleteOnTermination":true
}
...
```

------

## P5 および P5e インスタンスの EFA 設定
<a name="efa-for-p5"></a>

`p5.48xlarge` および `p5e.48xlarge` インスタンスは 32 個のネットワークカードをサポートします。ネットワーク帯域幅の合計キャパシティは 3,200 Gbps で、そのうち最大 800 Gbps を IP ネットワークトラフィックに使用できます。EFA ネットワークトラフィックと IP ネットワークトラフィックは同じ基盤となるリソースを共有するため、一方が使用する帯域幅は他方が利用できる帯域幅を減らします。つまり、総帯域幅が 3,200 Gbps を超えず、IP 帯域幅が 800 Gbps を超えない限り、EFA トラフィックと IP トラフィックの間でネットワーク帯域幅を任意の組み合わせで分散できます。例えば、IP 帯域幅で 400 Gbps を使用する場合、同時に最大 2,800 Gbps の EFA 帯域幅を実現できます。

**ユースケース 1: IP アドレスを保存し、潜在的な Linux IP の問題を回避する**

この設定では最大 3200 Gbps の EFA ネットワーク帯域幅と最大 100 Gbps の IP ネットワーク帯域幅を 1 つのプライベート IP アドレスで提供します。また、この設定はパブリック IP アドレスの自動割り当ての禁止や、インスタンスに複数のネットワークインターフェイスがある場合に発生する可能性のある IP ルーティングの課題 (ホスト名から IP アドレスへのマッピングの問題や送信元 IP アドレスの不一致) など、Linux IP の潜在的な問題を回避するのに役立ちます。
+ プライマリネットワークインターフェイス (ネットワークカードインデックス 0、デバイスインデックス 0) には、ENA インターフェイスを使用します。
+ ネットワークカードインデックス 0、デバイスインデックス 1 には、EFA 専用ネットワークインターフェイスを作成します。
+ 残りのネットワークインターフェイス (ネットワークカードインデックス 1～31、デバイスインデックス 0) には、EFA 専用ネットワークインターフェイスを使用します。

**ユースケース 2: 最大 EFA と IP ネットワーク帯域幅**

この設定では最大 3200 Gbps の EFA ネットワーク帯域幅と最大 800 Gbps の IP ネットワーク帯域幅を 8 つのプライベート IP アドレスで提供します。この設定ではパブリック IP アドレスを自動割り当てすることはできません。ただし、インターネット接続の起動後に、Elastic IP アドレスをプライマリネットワークインターフェイス (ネットワークカードインデックス 0、デバイスインデックス 0) にアタッチすることはできます。
+ プライマリネットワークインターフェイス (ネットワークカードインデックス 0、デバイスインデックス 0) には ENA ネットワークインターフェイスを使用します。
+ 残りのインターフェイスについては次の手順を実行します。
  + ネットワークカードインデックス 0、デバイスインデックス 1 に EFA 専用ネットワークインターフェイスを指定し、デバイスインデックス 1、2、3 にはデバイスインデックス 0 を使用します。
  + 次のネットワークカードインデックスサブセット**それぞれに** 1 つの ENA ネットワークインターフェイスと 4 つの EFA 専用ネットワークインターフェイスを指定し、ENA ネットワークインターフェイスにはデバイスインデックス 1、EFA 専用ネットワークインターフェイスにはデバイスインデックス 0 を使用します。
    + [4,5,6,7]
    + [8,9,10,11]
    + [12,13,14,15]
    + [16,17,18,19]
    + [20,21,22,23]
    + [24,25,26,27]
    + [28,29,30,31]

次の例ではこの設定を示します。

```
$ aws --region $REGION ec2 run-instances \
 --instance-type p5.48xlarge \
 --count 1 \
 --key-name key_pair_name \
 --image-id ami_id \
 --network-interfaces "NetworkCardIndex=0,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=0,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=1,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=2,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=3,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=4,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=4,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=5,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=6,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=7,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=8,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=8,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=9,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=10,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=11,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=12,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=12,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=13,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=14,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=15,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=16,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=16,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=17,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=18,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=19,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=20,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=20,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=21,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=22,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=23,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=24,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=24,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=25,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=26,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=27,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=28,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=28,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=29,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=30,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=31,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only"
...
```

## P6-B200 インスタンスの EFA 設定
<a name="efa-for-p6-b200"></a>

P6-B200 インスタンスのネットワーク帯域幅の総量は 3,200 Gbps であり、そのうち最大 1600 Gbps を ENA に使用できます。8 つの GPU と 8 つのネットワークカードがあり、各ネットワークカードは最大 400 Gbps の EFA 帯域幅と 200 Gbp の ENA 帯域幅をサポートします。EFA ネットワークトラフィックと ENA トラフィックは同じ基盤となるリソースを共有するため、一方で帯域幅を使用していれば、もう一方で使用できる帯域幅が減少します。

**ユースケース 1: IP アドレスを保存する**

この設定では、インスタンスごとに 1 個以上のプライベート IP アドレスを使用し、最大 3200 Gbp の EFA 帯域幅と 200 Gbp の ENA 帯域幅をサポートします。
+ プライマリネットワークインターフェイス (ネットワークカードインデックス 0、デバイスインデックス 0) には、ENA インターフェイスを使用します。
+ ネットワークカードインデックス 0、デバイスインデックス 1 には、EFA 専用ネットワークインターフェイスを作成します。
+ 残りの 7 個のネットワークカード (ネットワークカードインデックス 1～7、デバイスインデックス 0) には、EFA 専用のネットワークインターフェイスを使用します。

**ユースケース 2: 最大 EFA と EFA 帯域幅**

この設定では、インスタンスごとに 8 個以上のプライベート IP アドレスを使用し、最大 3200 Gbp の EFA 帯域幅と 1600 Gbp の ENA 帯域幅をサポートします。
+ プライマリネットワークインターフェイス (ネットワークカードインデックス 0、デバイスインデックス 0) には、ENA インターフェイスを使用します。
+ ネットワークカードインデックス 0、デバイスインデックス 1 には、EFA 専用ネットワークインターフェイスを作成します。
+ 残りの 7 個のネットワークカード (ネットワークカードインデックス 1～7) については、デバイスインデックス 0 で EFA 専用インターフェイスを作成し、デバイスインデックス 1 で ENA ネットワークインターフェイスを作成します。

## P6e-GB200 インスタンスの EFA 設定
<a name="efa-for-p6e"></a>

P6e-GB200 インスタンスは、最大 17 個のネットワークカードで設定できます。次の図は、P6e-GB200 インスタンスの物理ネットワークインターフェイスカード (NIC) のレイアウトと、ネットワークカードインデックス (NCI) のマッピングを示しています。

![\[P6e-GB200 インスタンスの物理ネットワークインターフェイスカード (NIC) とネットワークカードインデックス (NCI) のマッピング。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/p6e.png)


プライマリ NCI (インデックス 0) は、最大 100 Gbps の ENA 帯域幅をサポートします。次のインデックスを持つ NCI は、EFA 専用ネットワークインターフェイスと 400 Gbps の EFA 帯域幅をサポートします: [1、3、5、7、9、11、13、15]。次のインデックスを持つ NCI は、最大 200 Gbps の ENA または EFA 帯域幅をサポートします: [2、4、6、8、10、12、14、16]。

次のグループの NCI は、ホスト上の基盤となる物理 NIC を共有します:
+ [1 および 2]
+ [3 および 4]
+ [5 および 6]
+ [7 および 8]
+ [9 および 10]
+ [11 および 12]
+ [13 および 14]
+ [15 および 16]

各物理 NIC は、最大 400 Gbps の帯域幅をサポートします。これらのグループの NCI は基盤となる同じ物理 NIC を共有するため、1 つが帯域幅を使用すると、他が利用できる帯域幅が減少します。例えば、NCI 2 が 200 Gbps の ENA 帯域幅を使用する場合、NCI 1 は同時に最大 200 Gbps の EFA 帯域幅を使用できます。

ホスト上の基盤となる各 GPU は、次の NCI ペアを介して直接トラフィックを送信できます。
+ [1 および 3]
+ [5 および 7]
+ [9 および 11]
+ [13 および 15]

各 GPU は、最大 400 Gbps の EFA 帯域幅をサポートします。これらのグループのネットワークカードは同じ GPU を共有するため、1 つが帯域幅を使用すると、他が利用できる帯域幅が減少します。例えば、NCI 1 が 200 Gbps の EFA 帯域幅を使用する場合、NCI 3 は同時に最大 200 Gbps の EFA 帯域幅を使用できます。したがって、EFA の最大パフォーマンスを実現するには、**次のいずれか**を実行して合計 1,600 Gbps の EFA 帯域幅を達成することをお勧めします。
+ EFA 専用ネットワークインターフェイスを各グループの 1 つの NCI のみに追加して、ネットワークインターフェイスあたり 400 Gbps (*4 つの EFA ネットワークインターフェイス x 400 Gbps*) を実現します。
+ EFA 専用ネットワークインターフェイスを各グループの各 NCI に追加して、ネットワークインターフェイスあたり 200 Gbps (*8 つの EFA ネットワークインターフェイス x 200 Gbps*) を実現します。

例えば、次の設定では、各 NCI グループで単一の EFA 専用ネットワークインターフェイスを使用して最大 1,600 Gbps の EFA 帯域幅を提供し、プライマリ NCI (インデックス 0) のみを使用して最大 100 Gbps の ENA ネットワーク帯域幅を提供します。
+ プライマリ NCI (ネットワークカードインデックス 0、デバイスインデックス 0) には ENA ネットワークインターフェイスを使用します。
+ EFA 専用ネットワークインターフェイスを以下に追加します。
  + NCI 1、デバイスインデックス 0
  + NCI 5、デバイスインデックス 0
  + NCI 9、デバイスインデックス 0
  + NCI 13、デバイスインデックス 0

## P6-B300 インスタンスの EFA 設定
<a name="efa-for-p6-b300"></a>

P6-B300 インスタンスの合計ネットワーク帯域幅キャパシティは、EFA トラフィックでは最大 6,400 Gbps、ENA トラフィックでは最大 3,870 Gbps です。これらのインスタンスには 8 の GPUと 17 のネットワークカードがあり、プライマリネットワークカードは最大 350 Gbps の帯域幅を持つ ENA ネットワークインターフェイスのみをサポートします。セカンダリネットワークカードは、最大 400 Gbps の EFA と最大 220 Gbps の ENA 帯域幅をサポートします。EFA ネットワークトラフィックと ENA トラフィックは同じ基盤となるリソースを共有するため、一方で帯域幅を使用していれば、もう一方で使用できる帯域幅が減少します。

![\[P6-B300 インスタンスの物理ネットワークインターフェイスカード (NIC) とネットワークカードインデックス (NCI) のマッピング。\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/images/p6-b300.png)


**ユースケース 1: IP アドレスを保存する**

この設定では、インスタンスごとに 1 つ以上のプライベート IP アドレスを使用し、最大 6,400 Gbp の EFA 帯域幅と最大 350 Gbp の ENA 帯域幅をサポートします。
+ プライマリネットワークインターフェイス (ネットワークカードインデックス 0、デバイスインデックス 0) には ENA ネットワークインターフェイスを使用します。
+ 残りのネットワークカード (ネットワークカードインデックス 1～16、デバイスインデックス 0) には、EFA 専用ネットワークインターフェイスを使用します。

```
--network-interfaces \
"NetworkCardIndex=0,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=1,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=2,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=3,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=4,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=5,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=6,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=7,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=8,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=9,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=10,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=11,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=12,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=13,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=14,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=15,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=16,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only"
```

**ユースケース 2: 最大 EFA と EFA 帯域幅**

この設定では、インスタンスごとに 17 以上のプライベート IP アドレスを使用し、最大 6,400 Gbp の EFA 帯域幅と最大 3,870 Gbp の ENA 帯域幅をサポートします。
+ プライマリネットワークインターフェイス (ネットワークカードインデックス 0、デバイスインデックス 0) では、ENA ネットワークインターフェイスを使用します。
+ 残りのネットワークカードについては、EFA 専用インターフェイス (ネットワークカードインデックス 1～16、デバイスインデックス 0) と ENA インターフェイス (ネットワークカードインデックス 1～16、デバイスインデックス 1) を作成します。

```
--network-interfaces \
"NetworkCardIndex=0,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=1,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=2,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=3,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=4,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=5,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=6,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=7,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=8,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=9,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=10,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=11,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=12,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=13,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=14,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=15,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=16,DeviceIndex=0,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=efa-only" \
"NetworkCardIndex=1,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=2,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=3,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=4,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=5,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=6,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=7,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=8,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=9,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=10,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=11,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=12,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=13,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=14,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=15,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface" \
"NetworkCardIndex=16,DeviceIndex=1,Groups=security_group_id,SubnetId=subnet_id,InterfaceType=interface"
```

# Elastic Fabric Adapter を作成して Amazon EC2 インスタンスにアタッチする
<a name="create-efa"></a>

Amazon EC2 の他の Elastic Network Interface と同様に、EFA を作成して Amazon EC2 インスタンスにアタッチすることができます。ただし、Elastic Network Interface とは異なり、`running` 状態のインスタンスに対して EFA をアタッチまたはデタッチすることはできません。

**考慮事項**
+  EFA に関連付けられているセキュリティグループは変更することができます。OS バイパス機能を有効にするにはEFA が、セキュリティグループ自体との間のインバウンドおよびアウトバウンドのトラフィックをすべて許可するセキュリティグループのメンバーである必要があります。詳細については「[ステップ 1: EFA 対応のセキュリティグループを準備する](efa-start.md#efa-start-security)」を参照してください。

  Elastic Network Interface に関連付けられているセキュリティグループを変更するのと同じ方法で、EFA に関連付けられているセキュリティグループを変更します。詳細については「[ネットワークインターフェイス属性の変更](modify-network-interface-attributes.md)」を参照してください。
+ IP アドレスを Elastic Network Interface に割り当てるのと同じ方法で、Elastic IP (IPv4) および IPv6 アドレスを EFA (EFA と ENA の組み合わせ) ネットワークインターフェイスに割り当てます。詳細については「[IP アドレスの管理](managing-network-interface-ip-addresses.md)」を参照してください。

  EFA のみのネットワークインターフェイスに IP アドレスを割り当てることはできません。

**Topics**
+ [EFA の作成](#efa-create)
+ [停止したインスタンスへの EFA のアタッチ](#efa-attach)
+ [インスタンス起動時の EFA のアタッチ](#efa-launch)
+ [起動テンプレートへの EFA 追加](#efa-launch-template)

## EFA の作成
<a name="efa-create"></a>

EFA はVPC のサブネットに作成することができます。作成後に EFA を別のサブネットに移動することはできません。また、アタッチできるのは同じアベイラビリティーゾーンの停止したインスタンスに限ります。

------
#### [ Console ]

**EFA (EFA と ENA の組み合わせまたは ENA のみ) ネットワークインターフェイスを作成する方法**

1. Amazon EC2 コンソールの [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) を開いてください。

1. ナビゲーションペインで [**ネットワークインターフェース**] 選択し、それから[**ネットワークインターフェイス**]を選択します。

1. [**説明**] に、EFA の分かりやすい名前を入力してください。

1. [**サブネット**] で、EFA を作成するサブネットを選択してください。

1. **[インターフェイスタイプ]** で、次のオプションのいずれかを選択します。
   + **[EFA と ENA の組み合わせ]** – ENA デバイスおよび EFA デバイスの両方をサポートするネットワークインターフェイスを作成します。
   + **[EFA のみ]** – EFA デバイスのみを使用してネットワークインターフェイスを作成します。

1. (EFA と ENA の組み合わせのみ) ネットワークインターフェイスの IP アドレスおよびプレフィックスの割り当てを設定します。割り当てることができる IP アドレスおよびプレフィックスのタイプは、選択したサブネットによって異なります。IPv4 のみのサブネットの場合、IPv4 IP アドレスおよびプレフィックスのみを割り当てることができます。IPv6 のみのサブネットの場合、IPv6 IP アドレスおよびプレフィックスのみを割り当てることができます。デュアルスタックサブネットの場合、IPv4 および IPv6 の両方の IP アドレス、ならびにプレフィックスを割り当てることができます。
**注記**  
EFA のみのネットワークインターフェイスに IP アドレスを割り当てることはできません。

   1. **[プライベート IPv4 アドレス]** や **[IPv6 アドレス]** の場合、**[自動割り当て]** を選択し、Amazon EC2 が選択したサブネットから IP アドレスを自動的に割り当てるようにするか、**[カスタム]** を選択して割り当てる IP アドレスを手動で指定します。

   1. IPv6 アドレスを割り当てる場合、必要に応じて **[プライマリ IPv6 IP の割り当て]** を有効にできます。これにより、プライマリ IPv6 グローバルユニキャストアドレス (GUA) がネットワークインターフェイスに割り当てられます。プライマリ IPv6 アドレスを割り当てると、インスタンスまたは ENI へのトラフィックの中断を回避できます。詳細については、「[IPv6 アドレス](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#vpc-ipv6-addresses)」を参照してください。

   1. **[IPv4 プレフィックス委任]** や **[IPv6 プレフィックス委任]** の場合、**[自動割り当て]** を選択し、Amazon EC2 がサブネットの CIDR ブロックからプレフィックスを自動的に割り当てるようにするか、**[カスタム]** を選択してサブネットの CIDR ブロックからプレフィックスを手動で指定します。プレフィックスを指定した場合、AWS は別のリソースにまだ割り当てられていないことを確認します。詳細については「[Amazon EC2 ネットワークインターフェイスのプレフィックス委任](ec2-prefix-eni.md)」を参照してください。

   1. (オプション) **アイドル接続の追跡タイムアウト**設定を構成します。詳細については「[アイドル接続追跡タイムアウト](security-group-connection-tracking.md#connection-tracking-timeouts)」を参照してください。
      + **[TCP 確立タイムアウト]** – 確立された状態のアイドル TCP 接続のタイムアウト時間 (秒単位)。最小: 60 秒。最大: 432000 秒 (5 日間)。デフォルト: 432000 秒。推奨: 432000 秒未満。
      + **[UDP タイムアウト]** – 1 つの方向または 1 つのリクエストレスポンストランザクションのみでトラフィックが発生した、アイドル UDP フローのタイムアウト時間 (秒単位)。最小: 30 秒。最大: 60 秒。デフォルト: 30 秒。
      + **[UDP ストリームタイムアウト]** – 複数のリクエストレスポンストランザクションが発生したストリームとして分類される、アイドル UDP フローのタイムアウト時間 (秒単位)。最小: 60 秒。最大: 180 秒 (3 分)。デフォルト: 180 秒。

1. [**Security groups**] で、1 つまたは複数のセキュリティグループを選択してください。

1. [**ネットワークインターフェイスの作成**] をクリックしてください。

------
#### [ AWS CLI ]

**EFA を作成するには**  
[create-network-interface](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-network-interface.html) コマンドを使用します。`--interface-type` では EFA ネットワークインターフェイス用の `efa` または EFA のみのネットワークインターフェイス用の `efa-only` を指定します。

```
aws ec2 create-network-interface \
    --subnet-id subnet-0abcdef1234567890 \
    --interface-type efa \
    --description "my efa"
```

------
#### [ PowerShell ]

**EFA を作成するには**  
[New-EC2NetworkInterface](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2NetworkInterface.html) コマンドレットを使用します。`-InterfaceType` では EFA ネットワークインターフェイス用の `efa` または EFA のみのネットワークインターフェイス用の `efa-only` を指定します。

```
New-EC2NetworkInterface `
    -SubnetId subnet-0abcdef1234567890 `
    -InterfaceType efa `
    -Description "my efa"
```

------

## 停止したインスタンスへの EFA のアタッチ
<a name="efa-attach"></a>

EFA はサポート対象の `stopped` 状態のインスタンスにアタッチすることができます。`running` 状態のインスタンスに EFA をアタッチすることはできません。サポートされるインスタンスタイプの詳細については[サポートされるインスタンスタイプ](efa.md#efa-instance-types)を参照してください。

ネットワークインターフェイスをインスタンスにアタッチするのと同じ方法で、EFA をインスタンスにアタッチできます。詳細については[ネットワークインターフェイスのアタッチ](network-interface-attachments.md#attach_eni)を参照してください。

## インスタンス起動時の EFA のアタッチ
<a name="efa-launch"></a>

------
#### [ AWS CLI ]

**インスタンス起動時に既存の EFA をアタッチするには**  
`--network-interfaces` オプションで [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) コマンドを使用します。プライマリネットワークインターフェイスにはEFA ネットワークインターフェイス、`NetworkCardIndex=0`、`DeviceIndex=0` を指定します。複数の EFA ネットワークインターフェイスをアタッチするには、「[ネットワーク帯域幅の最大化](efa-acc-inst-types.md)」を参照してください。

```
--network-interfaces "NetworkCardIndex=0, \
    DeviceIndex=0, \
    NetworkInterfaceId=eni-1234567890abcdef0, \
    Groups=sg-1234567890abcdef0, \
    SubnetId=subnet-0abcdef1234567890"
```

**インスタンス起動時に新しい EFA をアタッチするには**  
`--network-interfaces` オプションで [run-instances](https://docs.aws.amazon.com/cli/latest/reference/ec2/run-instances.html) コマンドを使用します。プライマリネットワークインターフェイスには`NetworkCardIndex=0`、`DeviceIndex=0`、`InterfaceType=efa` を使用します。複数の EFA ネットワークインターフェイスをアタッチする場合は「[ネットワーク帯域幅の最大化](efa-acc-inst-types.md)」を参照してください。

```
--network-interfaces "NetworkCardIndex=0, \
    DeviceIndex=0, \
    InterfaceType=efa, \
    Groups=sg-1234567890abcdef0, \
    SubnetId=subnet-0abcdef1234567890"
```

------
#### [ PowerShell ]

**インスタンス起動時に既存の EFA をアタッチするには**  
`-NetworkInterfaces` パラメータで [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) コマンドレットを使用します。

```
-NetworkInterface $networkInterface
```

ネットワークインターフェイスを次のように定義します。

```
$networkInterface = New-Object Amazon.EC2.Model.InstanceNetworkInterfaceSpecification
$networkInterface.DeviceIndex = 0
$networkInterface.NetworkInterfaceId = "eni-1234567890abcdef0"
$networkInterface.Groups = @("sg-1234567890abcdef0")
$networkInterface.SubnetId = "subnet-0abcdef1234567890"
```

**インスタンス起動時に新しい EFA をアタッチするには**  
`-NetworkInterfaces` パラメータで [New-EC2Instance](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2Instance.html) コマンドレットを使用します。

```
-NetworkInterface $networkInterface
```

ネットワークインターフェイスを次のように定義します。

```
$networkInterface = New-Object Amazon.EC2.Model.InstanceNetworkInterfaceSpecification
$networkInterface.DeviceIndex = 0
$networkInterface.InterfaceType = "efa"
$networkInterface.Groups = @("sg-1234567890abcdef0")
$networkInterface.SubnetId = "subnet-0abcdef1234567890"
```

------

## 起動テンプレートへの EFA 追加
<a name="efa-launch-template"></a>

EFA 対応のインスタンスの起動に必要な設定情報を含む起動テンプレートを作成できます。起動テンプレートではEFA と EFA のみのネットワークインターフェイスの両方を指定できます。EFA 対応の起動テンプレートを作成するには新しい起動テンプレートを作成し、サポート対象のインスタンスタイプ、EFA 対応の AMI、および EFA 対応のセキュリティグループを指定します。`NetworkInterfaces` にはアタッチする EFA ネットワークインターフェイスを指定します。プライマリネットワークインターフェイスには`NetworkCardIndex=0`、`DeviceIndex=0`、`InterfaceType=efa` を使用します。複数の EFA ネットワークインターフェイスをアタッチする場合は「[複数のネットワークカードを使用して Amazon EC2 インスタンスのネットワーク帯域幅を最大化する](efa-acc-inst-types.md)」を参照してください。

起動テンプレートを利用すると、[AWS](https://docs.aws.amazon.com/batch/latest/userguide/what-is-batch.html) や [AWS Batch](https://docs.aws.amazon.com/parallelcluster/latest/ug/what-is-aws-parallelcluster.html) など他の AWS ParallelCluster サービスで EFA 対応のインスタンスを起動できます。

起動テンプレートの作成の詳細については[Amazon EC2 起動テンプレートを作成する](create-launch-template.md)を参照してください。

# Amazon EC2 インスタンスから EFA をデタッチおよび削除する
<a name="detach-efa"></a>

Amazon EC2 インスタンスから EFA をデタッチしたり、Amazon EC2 の他の Elastic Network Interface と同じ方法で削除したりできます。

## EFA のデタッチ
<a name="efa-detach"></a>

EFA をインスタンスからデタッチするにはまずインスタンスを停止する必要があります。実行中状態のインスタンスから EFA をデタッチすることはできません。

インスタンスから Elastic Network Interface をデタッチするのと同じ方法で、EFA をインスタンスからデタッチします。詳細については「[ネットワークインターフェイスをデタッチする](network-interface-attachments.md#detach_eni)」を参照してください。

## EFA の削除
<a name="efa-delete"></a>

EFA を削除するにはまずインスタンスから削除する必要があります。インスタンスにアタッチされている場合はEFA を削除する必要があります。

Elastic Network Interface を削除するのと同じ方法で EFAs を削除します。詳細については「[ネットワークインターフェイスの削除](delete_eni.md)」を参照してください。

# Amazon EC2 で Elastic Fabric Adapter をモニタリングする
<a name="efa-working-monitor"></a>

Elastic Fabric Adapter のパフォーマンスをモニタリングするには次の機能を使用できます。

**Topics**
+ [Amazon EC2 インスタンスの EFA ドライバーメトリクス](#efa-driver-metrics)
+ [Amazon VPC フローログ](#efa-flowlog)
+ [Amazon CloudWatch](#efa-cloudwatch)

## Amazon EC2 インスタンスの EFA ドライバーメトリクス
<a name="efa-driver-metrics"></a>

Elastic Fabric Adapter (EFA) ドライバーは、EFA インターフェイスがアタッチされているインスタンスからリアルタイムで複数のメトリクスを発行します。このようなメトリクスを使用して、アプリケーションパフォーマンスとネットワーキングの問題のトラブルシューティング、ワークロードに適したクラスターサイズの選択、スケーリングアクティビティの事前計画、およびアプリケーションのベンチマークを実施して、メトリクスがインスタンスで利用できる EFA パフォーマンスを最大化するかどうかを判断できます。

**Topics**
+ [使用可能な EFA ドライバーメトリクス](#available-efa-metrics)
+ [インスタンスの EFA ドライバーメトリクスを取得する](#view-efa-driver-metrics)

### 使用可能な EFA ドライバーメトリクス
<a name="available-efa-metrics"></a>

EFA ドライバーは次のメトリクスをリアルタイムでインスタンスに発行します。これらは、インスタンスの起動以降または最後のドライバーのリセット以降に、アタッチされた EFA デバイスから送信、受信、再送信、またはドロップされた、エラー、接続イベント、パケットまたはバイトの累積数を提供します。


| メトリクス | 説明 | サポートされるインスタンスタイプ | 
| --- | --- | --- | 
| tx\$1bytes |  送信されたバイト数。 単位: バイト  | EFA をサポートしているすべてのインスタンスタイプ | 
| rx\$1bytes |  受信バイトの数。 単位: バイト  | EFA をサポートしているすべてのインスタンスタイプ | 
| tx\$1pkts |  送信されたパケットの数。 単位: 個  | EFA をサポートしているすべてのインスタンスタイプ | 
| rx\$1pkts |  受信されたパケットの数。 単位: 個  | EFA をサポートしているすべてのインスタンスタイプ | 
| rx\$1drops |  受信後にドロップされたパケットの数。 単位: 個  | EFA をサポートしているすべてのインスタンスタイプ | 
| send\$1bytes |  送信オペレーションを使用して送信されたバイト数。 単位: バイト  | EFA をサポートしているすべてのインスタンスタイプ | 
| recv\$1bytes |  送信オペレーションによって受信されたバイト数。 単位: バイト  | EFA をサポートしているすべてのインスタンスタイプ | 
| send\$1wrs |  送信オペレーションを使用して送信されたパケットの数。 単位: 個  | EFA をサポートしているすべてのインスタンスタイプ | 
| recv\$1wrs |  送信オペレーションによって受信されたパケットの数。 単位: 個  | EFA をサポートしているすべてのインスタンスタイプ | 
| rdma\$1write\$1wrs |  完了した rdma 書き込みオペレーションの数。 単位: 個  | EFA をサポートしているすべてのインスタンスタイプ | 
| rdma\$1read\$1wrs |  完了した rdma 読み取りオペレーションの数。 単位: 個  | EFA をサポートしているすべてのインスタンスタイプ | 
| rdma\$1write\$1bytes |  rdma 書き込みオペレーションを使用して他のインスタンスによって書き込まれたバイト数。 単位: バイト  | EFA をサポートしているすべてのインスタンスタイプ | 
| rdma\$1read\$1bytes |  rdma 読み取りオペレーションを使用して受信したバイト数。 単位: バイト  | EFA をサポートしているすべてのインスタンスタイプ | 
| rdma\$1write\$1wr\$1err |  ローカルエラーまたはリモートエラーが発生した rdma 書き込みオペレーションの数。 単位: 個  | EFA をサポートしているすべてのインスタンスタイプ | 
| rdma\$1read\$1wr\$1err |  ローカルエラーまたはリモートエラーが発生した rdma 読み取りオペレーションの数。 単位: 個  | EFA をサポートしているすべてのインスタンスタイプ | 
| rdma\$1read\$1resp\$1bytes |  rdma 読み取りオペレーションに応答して送信されたバイト数。 単位: バイト  | EFA をサポートしているすべてのインスタンスタイプ | 
| rdma\$1write\$1recv\$1bytes |  rdma 書き込みオペレーションによって受信されたバイト数。 単位: バイト  | EFA をサポートしているすべてのインスタンスタイプ | 
| retrans\$1bytes |  再送信された EFA SRD バイトの数。 単位: 個  | EFA をサポートする Nitro v4 以降のインスタンスタイプ | 
| retrans\$1pkts |  再送信された EFA SRD パケットの数。 単位: バイト  | EFA をサポートする Nitro v4 以降のインスタンスタイプ | 
| retrans\$1timeout\$1events |  EFA SRD トラフィックがタイムアウトしてネットワークパスが変更された回数。 単位: 個  | EFA をサポートする Nitro v4 以降のインスタンスタイプ | 
| impaired\$1remote\$1conn\$1events |  EFA SRD 接続が障害状態になり、スループットレートの制限が低減した回数。 単位: 個  | EFA をサポートする Nitro v4 以降のインスタンスタイプ | 
| unresponsive\$1remote\$1events |  EFA SRD リモート接続が応答しなかった回数。 単位: 個  | EFA をサポートする Nitro v4 以降のインスタンスタイプ | 

EFA をサポートするインスタンスタイプの詳細については、「[サポートされるインスタンスタイプ](efa.md#efa-instance-types)」を参照してください。

### インスタンスの EFA ドライバーメトリクスを取得する
<a name="view-efa-driver-metrics"></a>

[rdma-tool](https://man7.org/linux/man-pages/man8/rdma.8.html) コマンドラインツールを使用して、次のようにインスタンスにアタッチされたすべての EFA インターフェイスのメトリクスを取得できます。

```
$ rdma -p statistic show
link rdmap0s31/1 
    tx_bytes 0 
    tx_pkts 0 
    rx_bytes 0 
    rx_pkts 0 
    rx_drops 0 
    send_bytes 0 
    send_wrs 0 
    recv_bytes 0 
    recv_wrs 0 
    rdma_read_wrs 0 
    rdma_read_bytes 0 
    rdma_read_wr_err 0 
    rdma_read_resp_bytes 0 
    rdma_write_wrs 0 
    rdma_write_bytes 0 
    rdma_write_wr_err 0
    retrans_bytes 0
    retrans_pkts 0
    retrans_timeout_events 0
    unresponsive_remote_events 0
    impaired_remote_conn_events 0
```

または次のコマンドを使用して、インスタンスにアタッチされた各 EFA インターフェイスのメトリクスを sys ファイルから取得することもできます。

```
$ more /sys/class/infiniband/device_number/ports/port_number/hw_counters/* | cat
```

例

```
$ more /sys/class/infiniband/rdmap0s31/ports/1/hw_counters/* | cat
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/lifespan
::::::::::::::
12
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_read_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_read_resp_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_read_wr_err
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_read_wrs
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_write_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_write_recv_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_write_wr_err
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rdma_write_wrs
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/recv_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/recv_wrs
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rx_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rx_drops
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/rx_pkts
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/send_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/send_wrs
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/tx_bytes
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/tx_pkts
::::::::::::::
0
::::::::::::::
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/retrans_bytes
::::::::::::::
0
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/retrans_pkts
::::::::::::::
0
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/retrans_timeout_events
::::::::::::::
0
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/unresponsive_remote_events
::::::::::::::
0
/sys/class/infiniband/rdmap0s31/ports/1/hw_counters/impaired_remote_conn_events
::::::::::::::
0
```

## Amazon VPC フローログ
<a name="efa-flowlog"></a>

Amazon VPC フローログを作成することで、EFA との間で送受信されるトラフィックに関する情報を取得できます。フローログデータは Amazon CloudWatch Logs と Amazon S3 に発行できます。フローログを作成したら、選択した送信先でそのデータを取得して表示できます。詳細については*Amazon VPC ユーザーガイド* の[VPC フローログ](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)を参照してください。

EFA のフローログを作成する方法はElastic Network Interface のフローログを作成する場合と同じです。詳細については、「*Amazon VPC ユーザーガイド*」の「[フローログの作成](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-flow-logs.html#create-flow-log)」を参照してください。

フローログエントリで、EFA エントリは`srcAddress` および `destAddress` で識別されます。次の例に示されているように、これらはいずれも MAC アドレス形式になります。

```
version accountId  eniId        srcAddress        destAddress       sourcePort destPort protocol packets bytes start      end        action log-status
2       3794735123 eni-10000001 01:23:45:67:89:ab 05:23:45:67:89:ab -          -        -        9       5689  1521232534 1524512343 ACCEPT OK
```

## Amazon CloudWatch
<a name="efa-cloudwatch"></a>

Amazon EKS クラスターで EFA を使用している場合は CloudWatch Container Insights を使用して EFA をモニタリングできます。Amazon CloudWatch Container Insights は、`retrans_bytes`、`retrans_pkts`、`retrans_timeout_events`、`unresponsive_remote_events`、`impaired_remote_conn_events` を除くすべての [EFA ドライバーメトリクス](#efa-driver-metrics)をサポートしています。

詳細については「*Amazon CloudWatch ユーザーガイド*」の「[Amazon ECS と Kubernetes のコンテナインサイトメトリクス](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Container-Insights-metrics-enhanced-EKS.html#Container-Insights-metrics-EFA)」を参照してください。

# チェックサムを使用した EFA インストーラの検証
<a name="efa-verify"></a>

オプションで、MD5 または SHA256 チェックサムを使用して EFA tarball (`.tar.gz` ファイル) を検証できます。ソフトウェアパブリッシャーの ID を確認し、発行後にアプリケーションの変更または破損がないことを確認するために、この操作を行うことをお勧めします。

**tarball を検証するには**  
MD5 チェックサムには **md5sum** ユーティリティを使用します。SHA256 チェックサムには **sha256sum** ユーティリティを使用し、tarball のファイル名を指定します。このコマンドはtarball ファイルを保存したディレクトリから実行する必要があります。
+ MD5

  ```
  $  md5sum tarball_filename.tar.gz
  ```
+ SHA256

  ```
  $  sha256sum tarball_filename.tar.gz
  ```

このコマンドは次の形式でチェックサム値を返します。

```
checksum_value tarball_filename.tar.gz
```

コマンドによって返されるチェックサム値を、次の表に示すチェックサム値と比較します。チェックサムが一致する場合はインストールスクリプトを実行しても安全です。チェックサムが一致しない場合はインストールスクリプトを実行せず、サポート にお問い合わせください。

例えば、次のコマンドは SHA256 チェックサムを使用して EFA 1.9.4 tarball を検証します。

```
$  sha256sum aws-efa-installer-1.9.4.tar.gz
```

出力例:

```
1009b5182693490d908ef0ed2c1dd4f813cc310a5d2062ce9619c4c12b5a7f14 aws-efa-installer-1.9.4.tar.gz
```

次の表に、最新バージョンの EFA のチェックサムを示します。


| バージョン | チェックサム | 
| --- | --- | 
| EFA 1.47.0 |  **MD5: **`c81d4caf24dabc04a6e4818590620f5f` **SHA256: **`2df4201e046833c7dc8160907bee7f52b76ff80ed147376a2d0ed8a0dd66b2db`  | 
| EFA 1.46.0 |  **MD5: **a88bbd9b71624d7ca401b54bc2fc0c19`` **SHA256: **`8302bd7849afb95c903a875d7dcb6f85b3d7629e9a8b67d020031cfc6f4d0ee1`  | 
| EFA 1.45.1 |  **MD5: **91c3c87e16bbcaca1513252c38b771bb`` **SHA256: **`9aeb20c645135b6039cc08986d8f14e63280f7839e882a74df5e83627ffeaa17`  | 
| EFA 1.45.0 |  **MD5: **800aeddfa9d9c5f139a7b8f7c4fec627`` **SHA256: **`25ba26a0877fe3317390dc126aad2f23e27fc461cf0b940004f032cb342fa539`  | 
| EFA 1.44.0 |  **MD5: **d024f6bebe080db42745103b84ca7c43`` **SHA256: **`f129a5b44a49d593d247e55a59eb9bcb57121566e1c2e42b832a4e794fa83d8a`  | 
| EFA 1.43.3 |  **MD5: **`4dbc6eeecc516760253c10cbedb6319d` **SHA256: **`6c470ebce254c7165347b5048895ac2996c88567271642297f4c597738300652`  | 
| EFA 1.43.2 |  **MD5: **`7287b25a07c9747c0d4001e8fc5f59b2` **SHA256: **`de15c5bdbc83b952afbde876110830c604ad0796680e5157c05f7c1979a41069`  | 
| EFA 1.43.1 |  **MD5: **`7cfafc8debaea51dd4966fa0b2bba673` **SHA256: **54211eda0c193138ee8ed09b5fb41c41fc76fe0a77935fa4ec8d989466342740``  | 
| EFA 1.43.0 |  **MD5: **`f2b3dd7dc8670b541f7c23fd58e5e503` **SHA256: **`786df3458c499237be33bb8e50ffd4da7c18c20e254380ffc80fb90833d8cc73`  | 
| EFA 1.42.0 |  **MD5: **`94b2b1db09da1dde08ec049db1f24370` **SHA256: **`4114fe612905ee05083ae5cb391a00a012510f3abfecc642d86c9a5ae4be9008`  | 
| EFA 1.41.0 |  **MD5: **`086181c3ee3f8da512fc6e1c795e8936` **SHA256: **`3506354cdfbe31ff552fe75f5d0d9bb7efd29cf79bd99457347d29c751c38f9f`  | 
| EFA 1.40.0 |  **MD5: **`f3ec6f73fbeaccba082327507581157c` **SHA256: **`30491b0fe7c3470d4439594538855c981b05fa69862d74f8c05eb9b97912368a`  | 
| EFA 1.39.0 |  **MD5: **`c223d5954a85a7fbcd248c942b866e43` **SHA256: **`2cbc028c03064633bb990782b47c36156637769e2f48704417a9c700a7a32101`  | 
| EFA 1.38.1 |  **MD5: **`f112569e828ab65187777f794bab542c` **SHA256: **`83923374afd388b1cfcf4b3a21a2b1ba7cf46a01a587f7b519b8386cb95e4f81`  | 
| EFA 1.38.0 |  **MD5: **`43a2a446b33a2506f40853d55059f1ea` **SHA256: **`4f436954f35ad53754b4d005fd8d0be63de3b4184de41a695b504bdce0fecb22`  | 
| EFA 1.37.0 |  **MD5: **`6328070192bae920eca45797ad4c1db1` **SHA256: **`2584fc3c8bb99f29b3285e275747ff09d67c18e162c2a652e36c976b72154bfb`  | 
| EFA 1.36.0 |  **MD5: **`1bec83180fbffb23452ab6469ca21dfa` **SHA256: **`de183f333cfb58aeb7908a67bf9106985ba3ccb7f8638b851d2a0d8dbfacaec4`  | 
| EFA 1.35.0 |  **MD5: **`252f03c978dca5f8e8d9f34e488b256e` **SHA256: **`432b6ad4368ba0cd8b902729d14a908a97be7a3dcc5239422ea994a47f35a5e1`  | 
| EFA 1.34.0 |  **MD5: **`5cd4b28d27a31677c16139b54c9acb45` **SHA256: **`bd68839e741b0afd3ec2e37d50603803cfa7a279c120f0a736cc57c2ff2d7fdc`  | 
| EFA 1.33.0 |  **MD5: **`e2f61fccbcaa11e2ccfddd3660522276` **SHA256: **`0372877b87c6a7337bb7791d255e1053b907d030489fb2c3732ba70069185fce`  | 
| EFA 1.32.0 |  **MD5: **`db8d65cc028d8d08b5a9f2d88881c1b1` **SHA256: **`5f7233760be57f6fee6de8c09acbfbf59238de848e06048dc54d156ef578fc66`  | 
| EFA 1.31.0 |  **MD5: **`856352f12bef2ccbadcd75e35aa52aaf` **SHA256: **`943325bd37902a4300ac9e5715163537d56ecb4e7b87b37827c3e547aa1897bf`  | 
| EFA 1.30.0 |  **MD5: **`31f48e1a47fe93ede8ebd273fb747358` **SHA256: **`876ab9403e07a0c3c91a1a34685a52eced890ae052df94857f6081c5f6c78a0a`  | 
| EFA 1.29.1 |  **MD5: **`e1872ca815d752c1d7c2b5c175e52a16` **SHA256: **`178b263b8c25845b63dc93b25bcdff5870df5204ec509af26f43e8d283488744`  | 
| EFA 1.29.0 |  **MD5: **`39d06a002154d94cd982ed348133f385` **SHA256: **`836655f87015547e733e7d9f7c760e4e24697f8bbc261bb5f3560abd4206bc36`  | 
| EFA 1.28.0 |  **MD5: **`9dc13b7446665822605e66febe074035` **SHA256: **`2e625d2d6d3e073b5178e8e861891273d896b66d03cb1a32244fd56789f1c435`  | 
| EFA 1.27.0 |  **MD5: **`98bfb515ea3e8d93f554020f3837fa15` **SHA256: **`1d49a97b0bf8d964d91652a79ac851f2550e33a5bf9d0cf86ec9357ff6579aa3`  | 
| EFA 1.26.1 |  **MD5: **`884e74671fdef4725501f7cd2d451d0c` **SHA256: **`c616994c924f54ebfabfab32b7fe8ac56947fae00a0ff453d975e298d174fc96`  | 
| EFA 1.26.0 |  **MD5: **`f8839f12ff2e3b9ba09ae8a82b30e663` **SHA256: **`bc1abc1f76e97d204d3755d2a9ca307fc423e51c63141f798c2f15be3715aa11`  | 
| EFA 1.25.1 |  **MD5: **`6d876b894547847a45bb8854d4431f18` **SHA256: **`d2abc553d22b89a4ce92882052c1fa6de450d3a801fe005da718b7d4b9602b06`  | 
| EFA 1.25.0 |  **MD5: **`1993836ca749596051da04694ea0d00c` **SHA256: **`98b7b26ce031a2d6a93de2297cc71b03af647194866369ca53b60d82d45ad342`  | 
| EFA 1.24.1 |  **MD5: **`211b249f39d53086f3cb0c07665f4e6f` **SHA256: **`120cfeec233af0955623ac7133b674143329f9561a9a8193e473060f596aec62`  | 
| EFA 1.24.0 |  **MD5: **`7afe0187951e2dd2c9cc4b572e62f924` **SHA256: **`878623f819a0d9099d76ecd41cf4f569d4c3aac0c9bb7ba9536347c50b6bf88e`  | 
| EFA 1.23.1 |  **MD5: **`22491e114b6ee7160a8290145dca0c28` **SHA256: **`5ca848d8e0ff4d1571cd443c36f8d27c8cdf2a0c97e9068ebf000c303fc40797`  | 
| EFA 1.23.0 |  **MD5: **`38a6d7c1861f5038dba4e441ca7683ca` **SHA256: **`555d497a60f22e3857fdeb3dfc53aa86d05926023c68c916d15d2dc3df6525bd`  | 
| EFA 1.22.1 |  **MD5: **`600c0ad7cdbc06e8e846cb763f92901b` **SHA256: **`f90f3d5f59c031b9a964466b5401e86fd0429272408f6c207c3f9048254e9665`  | 
| EFA 1.22.0 |  **MD5: **`8f100c93dc8ab519c2aeb5dab89e98f8` **SHA256: **`f329e7d54a86a03ea51da6ea9a5b68fb354fbae4a57a02f9592e21fce431dc3a`  | 
| EFA 1.21.0 |  **MD5: **`959ccc3a4347461909ec02ed3ba7c372` **SHA256: **`c64e6ca34ccfc3ebe8e82d08899ae8442b3ef552541cf5429c43d11a04333050`  | 
| EFA 1.20.0 |  **MD5: **`7ebfbb8e85f1b94709df4ab3db47913b` **SHA256: **`aeefd2681ffd5c4c631d1502867db5b831621d6eb85b61fe3ec80df983d1dcf0`  | 
| EFA 1.19.0 |  **MD5: **`2fd45324953347ec5518da7e3fefa0ec` **SHA256: **`99b77821b9e72c8dea015cc92c96193e8db307deee05b91a58094cc331f16709`  | 
| EFA 1.18.0 |  **MD5: **`fc2571a72f5d3c7b7b576ce2de38d91e` **SHA256: **`acb18a0808aedb9a5e485f1469225b9ac97f21db9af78e4cd6939700debe1cb6`  | 
| EFA 1.17.3 |  **MD5: **`0517df4a190356ab559235147174cafd` **SHA256: **`5130998b0d2883bbae189b21ab215ecbc1b01ae0231659a9b4a17b0a33ebc6ca`  | 
| EFA 1.17.2 |  **MD5: **`a329dedab53c4832df218a24449f4c9a` **SHA256: **`bca1fdde8b32b00346e175e597ffab32a09a08ee9ab136875fb38283cc4cd099`  | 
| EFA 1.17.1 |  **MD5: **`733ae2cfc9d14b52017eaf0a2ab6b0ff` **SHA256: **`f29322640a88ae9279805993cb836276ea240623820848463ca686c8ce02136f`  | 
| EFA 1.17.0 |  **MD5: **`d430fc841563c11c3805c5f82a4746b1` **SHA256: **`75ab0cee4fb6bd38889dce313183f5d3a83bd233e0a6ef6205d8352821ea901d`  | 
| EFA 1.16.0 |  **MD5: **`399548d3b0d2e812d74dd67937b696b4` **SHA256: **`cecec36495a1bc6fdc82f97761a541e4fb6c9a3cbf3cfcb145acf25ea5dbd45b`  | 
| EFA 1.15.2 |  **MD5: **`955fea580d5170b05823d51acde7ca21` **SHA256: **`84df4fbc1b3741b6c073176287789a601a589313accc8e6653434e8d4c20bd49`  | 
| EFA 1.15.1 |  **MD5: **`c4610267039f72bbe4e35d7bf53519bc` **SHA256: **`be871781a1b9a15fca342a9d169219260069942a8bda7a8ad06d4baeb5e2efd7`  | 
| EFA 1.15.0 |  **MD5: **`9861694e1cc00d884fadac07d22898be` **SHA256: **`b329862dd5729d2d098d0507fb486bf859d7c70ce18b61c302982234a3a5c88f`  | 
| EFA 1.14.1 |  **MD5: **`50ba56397d359e57872fde1f74d4168a` **SHA256: **`c7b1b48e86fe4b3eaa4299d3600930919c4fe6d88cc6e2c7e4a408a3f16452c7`  | 
| EFA 1.14.0 |  **MD5: **`40805e7fd842c36ececb9fd7f921b1ae` **SHA256: **`662d62c12de85116df33780d40e0533ef7dad92709f4f613907475a7a1b60a97`  | 
| EFA 1.13.0 |  **MD5: **`c91d16556f4fd53becadbb345828221e` **SHA256: **`ad6705eb23a3fce44af3afc0f7643091595653a723ad0374084f4f2b715192e1`  | 
| EFA 1.12.3 |  **MD5: **`818aee81f097918cfaebd724eddea678` **SHA256: **`2c225321824788b8ca3fbc118207b944cdb096b847e1e0d1d853ef2f0d727172`  | 
| EFA 1.12.2 |  **MD5: **`956bb1fc5ae0d6f0f87d2e481d49fccf` **SHA256: **`083a868a2c212a5a4fcf3e4d732b685ce39cceb3ca7e5d50d0b74e7788d06259`  | 
| EFA 1.12.1 |  **MD5: **`f5bfe52779df435188b0a2874d0633ea` **SHA256: **`5665795c2b4f09d5f3f767506d4d4c429695b36d4a17e5758b27f033aee58900`  | 
| EFA 1.12.0 |  **MD5: **`d6c6b49fafb39b770297e1cc44fe68a6` **SHA256: **`28256c57e9ecc0b0778b41c1f777a9982b4e8eae782343dfe1246079933dca59`  | 
| EFA 1.11.2 |  **MD5: **`2376cf18d1353a4551e35c33d269c404` **SHA256: **`a25786f98a3628f7f54f7f74ee2b39bc6734ea9374720507d37d3e8bf8ee1371`  | 
| EFA 1.11.1 |  **MD5: **`026b0d9a0a48780cc7406bd51997b1c0` **SHA256: **`6cb04baf5ffc58ddf319e956b5461289199c8dd805fe216f8f9ab8d102f6d02a`  | 
| EFA 1.11.0 |  **MD5: **`7d9058e010ad65bf2e14259214a36949` **SHA256: **`7891f6d45ae33e822189511c4ea1d14c9d54d000f6696f97be54e915ce2c9dfa`  | 
| EFA 1.10.1 |  **MD5: **`78521d3d668be22976f46c6fecc7b730` **SHA256: **`61564582de7320b21de319f532c3a677d26cc46785378eb3b95c636506b9bcb4`  | 
| EFA 1.10.0 |  **MD5: **`46f73f5a7afe41b4bb918c81888fefa9` **SHA256: **`136612f96f2a085a7d98296da0afb6fa807b38142e2fc0c548fa986c41186282`  | 
| EFA 1.9.5 |  **MD5: **`95edb8a209c18ba8d250409846eb6ef4` **SHA256: **`a4343308d7ea4dc943ccc21bcebed913e8868e59bfb2ac93599c61a7c87d7d25`  | 
| EFA 1.9.4 |  **MD5: **`f26dd5c350422c1a985e35947fa5aa28` **SHA256: **`1009b5182693490d908ef0ed2c1dd4f813cc310a5d2062ce9619c4c12b5a7f14`  | 
| EFA 1.9.3 |  **MD5: **`95755765a097802d3e6d5018d1a5d3d6` **SHA256: **`46ce732d6f3fcc9edf6a6e9f9df0ad136054328e24675567f7029edab90c68f1`  | 
| EFA 1.8.4 |  **MD5: **`85d594c41e831afc6c9305263140457e` **SHA256: **`0d974655a09b213d7859e658965e56dc4f23a0eee2dc44bb41b6d039cc5bab45`  | 

# Elastic Fabric Adapter リリースノート
<a name="efa-changelog"></a>

以下の表には、Elastic Fabric Adapter ソフトウェアのバージョン履歴と変更ログが記載されています。


| バージョン | 変更 | リリース日 | 
| --- | --- | --- | 
| 1.47.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2026 年 1 月 29 日 | 
| 1.46.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 12 月 12 日 | 
| 1.45.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 11 月 26 日 | 
| 1.45.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 11 月 17 日 | 
| 1.44.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 10 月 29 日 | 
| 1.43.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 10 月 1 日 | 
| 1.43.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 8 月 15 日 | 
| 1.43.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 7 月 31 日 | 
| 1.43.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 7 月 25 日 | 
| 1.42.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 6 月 6 日 | 
| 1.41.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 5 月 16 日 | 
| 1.40.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 5 月 2 日 | 
| 1.39.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 4 月 16 日 | 
| 1.38.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 3 月 3 日 | 
| 1.38.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2025 年 1 月 8 日 | 
| 1.37.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 11 月 18 日 | 
| 1.36.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 11 月 7 日 | 
| 1.35.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 10 月 14 日 | 
| 1.34.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 8 月 6 日 | 
| 1.33.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 6 月 20 日 | 
| 1.32.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 4 月 18 日 | 
| 1.31.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2024 年 3 月 7 日 | 
| 1.30.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 12 月 | 
| 1.29.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 12 月 | 
| 1.29.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 11 月 | 
| 1.28.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 10 月 | 
| 1.27.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 9 月 | 
| 1.26.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 9 月 | 
| 1.26.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 9 月 | 
| 1.25.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 9 月 | 
| 1.25.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 7 月 | 
| 1.24.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 7 月 | 
| 1.24.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 6 月 | 
| 1.23.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 6 月 | 
| 1.23.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 5 月 | 
| 1.22.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 3 月 | 
| 1.22.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2023 年 2 月 | 
| 1.21.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 12 月 | 
| 1.20.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 11 月 | 
| 1.19.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 10 月 | 
| 1.18.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 8 月 | 
| 1.17.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 8 月 | 
| 1.17.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 7 月 | 
| 1.17.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 7 月 | 
| 1.17.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 7 月 | 
| 1.16.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 6 月 | 
| 1.15.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 5 月 | 
| 1.15.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 3 月 | 
| 1.15.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2022 年 2 月 | 
| 1.14.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 10 月 | 
| 1.14.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 10 月 | 
| 1.13.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 8 月 | 
| 1.12.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 7 月 | 
| 1.12.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 6 月 | 
| 1.12.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 5 月 | 
| 1.12.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 5 月 | 
| 1.11.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2021 年 2 月 | 
| 1.11.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 12 月 | 
| 1.11.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 12 月 | 
| 1.10.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 11 月 | 
| 1.10.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 10 月 | 
| 1.9.5 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 9 月 | 
| 1.9.4 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 7 月 | 
| 1.9.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 6 月 | 
| 1.8.4 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 4 月 | 
| 1.8.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 2 月 | 
| 1.8.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 1 月 | 
| 1.8.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2020 年 1 月 | 
| 1.8.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 12 月 | 
| 1.7.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 12 月 | 
| 1.7.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 11 月 | 
| 1.6.2 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 10 月 | 
| 1.6.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 10 月 | 
| 1.5.4 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 9 月 | 
| 1.5.3 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 9 月 | 
| 1.5.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 8 月 | 
| 1.5.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 8 月 | 
| 1.4.1 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 7 月 | 
| 1.4.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/efa-changelog.html)  | 2019 年 7 月 | 