EFAと MPI の開始方法
本チュートリアルは、EFA と HPC ワークロードの MPI 対応インスタンスクラスターの起動に役立ちます。本チュートリアルでは、次の手順を実行します。
コンテンツ
- ステップ 1: EFA 対応のセキュリティグループを準備する
- ステップ 2: 一時インスタンスを作成する
- ステップ 3: EFA ソフトウェアをインストールする
- ステップ 4: (オプション) Open MPI 5 を有効にする
- ステップ 5: (オプション) インテル MPI をインストールする
- ステップ 6: ptrace 保護を無効にする
- ステップ 7。インストールを確認する
- ステップ 8: HPC アプリケーションをインストールする
- ステップ 9: EFA 対応の AMI を作成する
- ステップ 10: クラスタープレイスメントグループで EFA 対応のインスタンスを作成する
- ステップ 11: 一時インスタンスを終了する
- ステップ 12: パスワードレス SSH を有効にする
ステップ 1: EFA 対応のセキュリティグループを準備する
EFA には、セキュリティグループ自体とのインバウンドおよびアウトバウンドのトラフィックをすべて許可するセキュリティグループが必要です。以下の手順では、セキュリティグループを作成します。このセキュリティグループでは、セキュリティグループ自体とのすべてのインバウンドおよびアウトバウンドのトラフィックと、SSH 接続用の任意の IPv4 アドレスからのインバウンド SSH トラフィックを許可します。
重要
このセキュリティグループは、テストのみを目的としています。本番環境では、コンピュータの IP アドレスやローカルネットワークの IP アドレスの範囲など、接続元の IP アドレスからのトラフィックのみを許可するインバウンド SSH ルールを作成することをお勧めします。
その他のシナリオについては、さまざまなユースケースのセキュリティグループのルールを参照してください。
EFA 対応のセキュリティグループを作成するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインで [Security Groups] (セキュリティグループ) を選択して、[Create security group] (セキュリティグループの作成) を選択します。
-
[Create security group] (セキュリティグループの作成) ウィンドウで、以下を行います。
-
[セキュリティグループ名] に、
EFA-enabled security group
のような、分かりやすいセキュリティグループ名を入力します。 -
(オプション) [説明] に、セキュリティグループの簡単な説明を入力します。
-
[VPC] で、EFA 対応のインスタンスを起動する VPC を選択します。
-
[Create Security Group] を選択します。
-
-
作成したセキュリティグループを選択し、[Details] (詳細) タブで [Security group ID] (セキュリティグループ ID) をコピーします。
-
セキュリティグループが選択された状態で、[Actions] (アクション)、[Edit inbound rules] (インバウンドルールの編集) の順に選択し、次の手順を実行します。
-
[Add rule] を選択します。
-
[Type] で、[All traffic] を選択します。
-
[Source type] (送信元タイプ) で、[Custom] (カスタム) を選択し、コピーしたセキュリティグループ ID をフィールドに貼り付けます。
-
[ルールを追加] を選択します。
-
[タイプ] で SSH] を選択します。
-
[Source type] (ソースタイプ) で、[Anywhere-IPv4] を選択します。
-
[Save Rules] (ルールの保存) を選択します。
-
-
セキュリティグループが選択された状態で、[Actions] (アクション)、[Edit outbound rules] (アウトバウンドルールの編集) の順に選択し、次の手順を実行します。
-
[Add rule] を選択します。
-
[Type] で、[All traffic] を選択します。
-
[Destination type] (送信先タイプ) で、[Custom] (カスタム) を選択し、コピーしたセキュリティグループ ID をフィールドに貼り付けます。
-
[Save Rules] (ルールの保存) を選択します。
-
ステップ 2: 一時インスタンスを作成する
EFA ソフトウェアコンポーネントのインストールおよび設定に使用する一時インスタンスを起動します。このインスタンスを使用して、EFA 対応のインスタンスを起動する EFA 対応の AMI を作成します。
一時インスタンスを起動するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインで、[Instances] (インスタンス) を選択し、[Launch Instances] (インスタンスの起動) を選択して、新しいインスタンス起動ウィザードを開きます。
-
(オプション) [Name and tags] (名前とタグ) セクションで、
EFA-instance
などのインスタンス名を指定します。指定した名前は、リソースタグとしてインスタンスに割り当てられます (Name=
)。EFA-instance
-
[Application and OS Images] (アプリケーションと OS イメージ) セクションで、サポートされるオペレーティングシステムを選択します。
-
[Instance type] (インスタンスタイプ) セクションで、サポートされているインスタンスタイプを選択します。
-
[Key pair] (キーペア) セクションで、インスタンスに使用するキーペアを選択します。
-
[Network settings] (ネットワーク設定) セクションで、[Edit] (編集) を選択し、次の操作を行います。
-
[サブネット] で、インスタンスを起動するサブネットを選択します。サブネットを選択しない場合、EFA のインスタンスを有効にすることはできません。
-
[Firewall (security groups)] (ファイアウォール (セキュリティグループ)) の場合、[Select existing security group] (既存のセキュリティグループの選択) を選択し、前のステップで作成したセキュリティグループを選択します。
-
[Advanced network configuration] (高度なネットワーク設定) セクションを展開し、[Elastic Fabric Adapter] の [Enable] (有効) を選択します。
-
-
[Storage] (ストレージ) セクションで、必要に応じてボリュームを設定します。
-
右側の [Summary] (サマリー) パネルで、[Launch instance] (インスタンスの起動) を選択します。
注記
既にアカウントのデフォルトとして IMDSv2 を設定していない限り、一時インスタンスとステップ 9 で作成する AMI に IMDSv2 の使用を必須化することを検討してください。IMDSv2 設定ステップの詳細については、「新規インスタンスのインスタンスメタデータオプションの設定」を参照してください。
ステップ 3: EFA ソフトウェアをインストールする
一時インスタンスで EFA をサポートするために必要な EFA 対応のカーネル、EFA ドライバー、Libfabric、および Open MPI スタックをインストールします。
このステップは、EFA で Open MPI、Intel MPI、または Open MPI と Intel MPI のどれを使用するかによって異なります。
EFA ソフトウェアをインストールするには
-
起動したインスタンスに接続します。詳細については、「Linux インスタンスへの接続」を参照してください。
-
すべてのソフトウェアパッケージが最新の状態であることを確認するため、インスタンスでソフトウェアの更新を実行します。このプロセスには数分かかることがあります。
-
Amazon Linux 2023、Amazon Linux 2、RHEL 7/8/9、CentOS 7、Rocky Linux 8/9
$
sudo yum update -y -
Ubuntu と Debia
$
sudo apt-get update && sudo apt-get upgrade -y -
SUSE Linux Enterprise
$
sudo zypper update -y
-
-
インスタンスを再起動して、そのインスタンスに再接続します。
-
EFA ソフトウェアのインストールファイルをダウンロードします。ソフトウェアのインストールファイルは、圧縮された tar (
.tar.gz
) ファイルにパッケージ化されています。次のコマンドを使用して、安定している最新バージョンをダウンロードします。$
C:\>
curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.33.0.tar.gz前述のコマンドのバージョン番号を
latest
に置き換えることで最新バージョンを取得することもできます。 (オプション) EFA tarball (
.tar.gz
) ファイルの認証と完全性を検証します。ソフトウェア発行元の ID を検証し、発行後にファイルの改変や破損がないことを確認するために、これを行うことをお勧めします。tar ファイルを検証しない場合は、この手順をスキップします。
注記
代わりに、MD5 または SHA256 チェックサムを使用して tar ファイルを検証する場合は、チェックサムを使用した EFA インストーラの検証を参照してください。
-
パブリック GPG キーをダウンロードして、キーリングにインポートします。
$
wget https://efa-installer.amazonaws.com/aws-efa-installer.key && gpg --import aws-efa-installer.keyコマンドはキーの値を返します。次の手順で必要になるため、キーの値を書きとめておきます。
-
GPG キーのフィンガープリントを検証します。次のコマンドを実行し、前のステップで作成したキーの値を指定します。
$
gpg --fingerprintkey_value
コマンドは、
4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC
と同じフィンガープリントを返します。フィンガープリントが一致しない場合は、EFA インストールスクリプトを実行せず、AWS Support にお問い合わせください。 -
署名ファイルをダウンロードし、EFA tar ファイルの署名を検証します。
$
wget https://efa-installer.amazonaws.com/aws-efa-installer-1.33.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.33.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 インストールスクリプトを実行せず、AWS Support にお問い合わせください。
-
-
圧縮された
.tar.gz
ファイルからファイルを展開し、展開されたディレクトリに移動します。$
C:\>
tar -xf aws-efa-installer-1.33.0.tar.gz && cd aws-efa-installer -
EFA ソフトウェアをインストールします。使用するユースケースに応じて、以下のいずれかを実行します。
注記
EFA は SUSE Linux での NVIDIA GPUDirect をサポートしていません。SUSE Linux を使用している場合は、さらに kmod のインストールを防止する
--skip-kmod
オプションを指定する必要があります。デフォルトでは、SUSE Linux はツリー外のカーネルモジュールを許可しません。 -
EFA インストーラーでインスタンスの再起動を求めるメッセージが表示された場合は、再起動してからインスタンスに再接続します。それ以外の場合は、インスタンスからログアウトし、再度ログインしてインストールを完了します。
ステップ 4: (オプション) Open MPI 5 を有効にする
注記
このステップは、Open MPI 5 を使用する場合にのみ実行します。
EFA 1.30.0 からは、オープン MPI 4 と Open MPI 5 の両方がデフォルトでインストールされます。あるいは、Open MPI 4 または Open MPI 5 のみをインストールするように選択することもできます。
「ステップ 3: EFA ソフトウェアをインストールする」で Open MPI 5 のインストールを選択し、これを使用する場合は、次の手順を実行して有効にする必要があります。
Open MPI 5 を有効にするには
-
Open MPI 5 を PATH 環境変数に追加します。
$
module load openmpi5 -
Open MPI 5 の使用が有効になっていることを確認します。
$
which mpiccこのコマンドは Open MPI 5 のインストールディレクトリ -
/opt/amazon/openmpi5
を返すはずです。 -
(オプション) インスタンスが起動するたびに Open MPI 5 が PATH 環境変数に追加されるようにするには、次の操作を行います。
Open MPI 5 を PATH 環境変数から削除する必要がある場合は、次のコマンドを実行して、シェルスタートアップスクリプトからそのコマンドを削除します。
$
module unload openmpi5
ステップ 5: (オプション) インテル MPI をインストールする
重要
このステップは、Intel MPI を使用する場合にのみ実行します。Open MPI のみを使用する場合は、このステップをスキップしてください。
Intel MPI を使用するには、追加のインストールと環境変数設定が必要です。
前提条件
以下のステップは、sudo アクセス許可を持つユーザーが実行してください。
Intel MPI をインストールするには
-
インテル MPI のインストールスクリプトをダウンロードするには、次の手順を実行します。
-
インテルのウェブサイト
にアクセスします。 -
ウェブページの「Intel MPI Library」(インテル MPI ライブラリ) セクションで、Intel MPI Library for Linux Offline インストーラのリンクを選択します。
-
-
前のステップでダウンロードしたインストールスクリプトを実行します。
$
sudo bashinstallation_script_name
.sh -
インストーラで、[Accept & install] (承諾してインストール) を選択します。
-
インテル Improvement Program を読み、適切なオプションを選択してから、[Begin Installation] (インストールを開始) を選択します。
-
インストールが完了したら、[Close] を選択します。
-
デフォルトでは、インテル MPI は埋め込まれている (内部) Libfabric を使用します。代わりに、EFA インストーラに同梱されている Libfabric を使用するようにインテル MPI を設定できます。通常、EFA インストーラには、インテル MPI よりも新しいバージョンの Libfabric が同梱されています。場合によっては、EFA インストーラに同梱されている Libfabric は、インテル MPI よりもパフォーマンスが高い場合があります。EFA インストーラに同梱されている Libfabric を使用するようにインテル MPI を設定するには、シェルに応じて次のいずれかを実行します。
-
次のソースコマンドをシェルスクリプトに追加して、インストールディレクトリから
vars.sh
スクリプトを読み込み、インスタンスが開始するたびにコンパイラ環境をセットアップします。使用するシェルに応じて、以下のいずれかを実行します。 -
デフォルトでは、設定ミスにより 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:
使用するシェルに応じて、以下のいずれかを実行します。
-
デフォルトでは、インテル 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
です。デバッグ情報を有効にするには、使用するシェルに応じて、次のいずれかを実行します。
-
デフォルトでは、インテル MPI はノード内通信にオペレーティングシステムの共有メモリ (
shm
) を使用し、ノード間通信にのみ Libfabric (ofi
) を使用します。通常、この設定は、最高のパフォーマンスを提供します。ただし、場合によっては、インテル MPI shm ファブリックによって特定のアプリケーションが無期限にハングすることがあります。この問題を解決するために、インテル MPI がノード内通信とノード間通信の両方に Libfabric を使用するように強制できます。これを実行するには、使用するシェルに応じて、次のいずれかを実行します。
注記
EFA Libfabric プロバイダーは、オペレーティングシステムの共有メモリをノード内通信に使用します。これは、
I_MPI_FABRICS
をofi
に設定すると、デフォルトのshm:ofi
設定と同様のパフォーマンスが得られることを意味します。 -
インスタンスからログアウトしてからログインし直します。
Intel MPI が不要になった場合は、シェル起動スクリプトから環境変数を削除してください。
ステップ 6: ptrace 保護を無効にする
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。インストールを確認する
インストールが正常に完了したことを確認するには
-
MPI が正常にインストールされていることを確認するには、次のコマンドを実行します。
$
which mpicc-
Open MPI の場合、返されるパスには
/opt/amazon/
が含まれている必要があります。 -
Intel MPI の場合、返されるパスには
/opt/intel/
が含まれている必要があります。期待どおりの出力が得られない場合は、Intel MPIvars.sh
スクリプトをソースとしていることを確認してください。
-
-
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 アプリケーションをインストールする
HPC アプリケーションを一時インスタンスにインストールします。インストール手順は、特定の HPC アプリケーションによって異なります。詳細については、「Amazon Linux 2 ユーザーガイド」の「AL2 インスタンスでのソフトウェアの管理」を参照してください。
注記
インストール手順については、HPC アプリケーションのドキュメントを参照してください。
ステップ 9: EFA 対応の AMI を作成する
必要なソフトウェアコンポーネントのインストール後、EFA 対応のインスタンスの起動に再利用できる AMI を作成します。
一時インスタンスから AMI を作成するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインで、[インスタンス] を選択します。
-
作成した一時インスタンスを選択し、[アクション]、[イメージ]、[イメージの作成] の順に選択します。
-
[イメージの作成] で、次を行います。
-
[イメージ名] に、の分かりやすい AMI 名を入力します。
-
(オプション) [イメージの説明] に、AMI の簡単な説明を入力します。
-
[イメージを作成] を選択します。
-
-
ナビゲーションペインで [AMIs] を選択します。
-
リストで作成した AMI を探します。ステータスが
pending
からavailable
に変わるまで待ってから、次のステップに進みます。
ステップ 10: クラスタープレイスメントグループで EFA 対応のインスタンスを作成する
ステップ 7 で作成した EFA 対応の AMI と、ステップ 1 で作成した EFA 対応のセキュリティグループを使用して、EFA 対応のインスタンスをクラスタープレイスメントグループ内で起動します。
注記
-
EFA 対応のインスタンスをクラスターのプレイスメントグループに起動することは絶対的な要件ではありません。ただし、EFA 対応のインスタンスは、1 つのアベイラビリティーゾーン内の低レイテンシーグループに起動されるため、クラスタープレイスメントグループで実行することをお勧めします。
-
クラスターのインスタンスをスケールするときにキャパシティを使用できるようにするには、クラスタープレイスメントグループのキャパシティ予約を作成します。詳細については、「クラスタープレイスメントグループでのキャパシティ予約」を参照してください。
インスタンスを起動するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインで、[Instances] (インスタンス) を選択し、[Launch Instances] (インスタンスの起動) を選択して、新しいインスタンス起動ウィザードを開きます。
-
(オプション) [Name and tags] (名前とタグ) セクションで、
EFA-instance
などのインスタンス名を指定します。指定した名前は、リソースタグとしてインスタンスに割り当てられます (Name=
)。EFA-instance
-
[Application and OS Images] (アプリケーションと OS イメージ) セクションで、[My AMIs] (マイ AMI) をクリックし、前のステップで作成した AMI を選択します。
-
[Instance type] (インスタンスタイプ) セクションで、サポートされているインスタンスタイプを選択します。
-
[Key pair] (キーペア) セクションで、インスタンスに使用するキーペアを選択します。
-
[Network settings] (ネットワーク設定) セクションで、[Edit] (編集) を選択し、次の操作を行います。
-
[サブネット] で、インスタンスを起動するサブネットを選択します。サブネットを選択しない場合、EFA のインスタンスを有効にすることはできません。
-
[Firewall (security groups)] (ファイアウォール (セキュリティグループ)) の場合、[Select existing security group] (既存のセキュリティグループの選択) を選択し、前のステップで作成したセキュリティグループを選択します。
-
[Advanced network configuration] (高度なネットワーク設定) セクションを展開し、[Elastic Fabric Adapter] の [Enable] (有効) を選択します。
-
-
(オプション) [Storage] (ストレージ) セクションで、必要に応じてボリュームを設定します。
-
[Advanced details] (高度な詳細) セクションの [Placement group name] (プレイスメントグループ名) で、インスタンスを起動するクラスタープレイスメントグループを選択します。新しいクラスタープレイスメントグループを作成する必要がある場合は、[Create new placement group] (新しいプレイスメントグループの作成) を選択します。
-
右側の [Summary] (サマリー) パネルで、[Number of instances] (インスタンス数) に、起動する EFA 対応のインスタンスの数を入力し、[Launch Instance] (インスタンスの起動) を選択します。
ステップ 11: 一時インスタンスを終了する
この時点で、ステップ 2 で起動したインスタンスは不要になります。インスタンスを終了して、料金の発生を停止できます。
一時インスタンスを終了するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインで、[インスタンス] を選択します。
-
作成した一時インスタンスを選択し、[アクション]、[インスタンスの状態]、[インスタンスの終了] の順に選択します。
-
確認を求めるメッセージが表示されたら、[終了] を選択します。
ステップ 12: パスワードレス SSH を有効にする
クラスター内のすべてのインスタンスでアプリケーションを実行できるようにするには、リーダーノードからメンバーノードへのパスワードなしの SSH アクセスを有効にする必要があります。リーダーノードは、アプリケーションを実行するインスタンスです。クラスター内の残りのインスタンスはメンバーノードです。
クラスター内のインスタンス間でパスワードなしの SSH を有効にするには
-
クラスター内の 1 つのインスタンスをリーダーノードとして選択し、それに接続します。
-
リーダーノード上で
strictHostKeyChecking
を無効にしForwardAgent
を有効にします。任意のテキストエディタを使用して~/.ssh/config
ファイルを開き、以下を追加します。Host * ForwardAgent yes Host * StrictHostKeyChecking no
-
RSA キーペアを生成します。
$
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsaキーペアは、
$HOME/.ssh/
ディレクトリで作成されます。 -
リーダーノードのプライベートキーの許可を変更します。
$
chmod 600 ~/.ssh/id_rsa chmod 600 ~/.ssh/config -
任意のテキストエディタで
~/.ssh/id_rsa.pub
を開き、キーをコピーします。 -
クラスター内の各メンバーノードについて、次の操作を行います。
-
インスタンスに接続します。
-
任意のテキストエディタで
~/.ssh/authorized_keys
を開き、前にコピーしたパブリックキーを追加します。
-
-
パスワードレス SSH が正常に機能していることをテストするには、リーダーノードに接続して、次のコマンドを実行します。
$
sshmember_node_private_ip
キーまたはパスワードの入力を求められずに、メンバーノードに接続できるはずです。