

# 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
   ```

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