EFAと MPI の開始方法
本チュートリアルは、EFA と HPC ワークロードの MPI 対応インスタンスクラスターの起動に役立ちます。本チュートリアルでは、次の手順を実行します。
コンテンツ
ステップ 1: EFA 対応のセキュリティグループを準備する
EFA には、セキュリティグループ自体とのインバウンドおよびアウトバウンドのトラフィックをすべて許可するセキュリティグループが必要です。次の手順では、テスト目的のためだけに、すべてのインバウンドトラフィックとアウトバウンドトラフィックを許可します。その他のシナリオについては、「さまざまなユースケースのセキュリティグループのルール」を参照してください。
EFA 対応のセキュリティグループを作成するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインで [Security Groups] (セキュリティグループ) を選択して、[Create security group] (セキュリティグループの作成) を選択します。
-
[Create security group] (セキュリティグループの作成) ウィンドウで、以下を行います。
-
[セキュリティグループ名] に、
EFA-enabled security group
のような、分かりやすいセキュリティグループ名を入力します。 -
(オプション) [説明] に、セキュリティグループの簡単な説明を入力します。
-
[VPC] で、EFA 対応のインスタンスを起動する VPC を選択します。
-
[セキュリティグループの作成] を選択します。
-
-
作成したセキュリティグループを選択し、[Details] (詳細) タブで [Security group ID] (セキュリティグループ ID) をコピーします。
-
セキュリティグループが選択された状態で、[Actions] (アクション)、[Edit inbound rules] (インバウンドルールの編集) の順に選択し、次の手順を実行します。
-
[Add rule] を選択します。
-
[Type] で、[All traffic] を選択します。
-
[Source type] (送信元タイプ) で、[Custom] (カスタム) を選択し、コピーしたセキュリティグループ ID をフィールドに貼り付けます。
-
[ルールの追加] を選択します。
-
[Type] (タイプ) で [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 を作成します。
ステップ 3: EFA ソフトウェアをインストールする
一時インスタンスで EFA をサポートするために必要な EFA 対応のカーネル、EFA ドライバー、Libfabric、および Open MPI スタックをインストールします。
このステップは、EFA で Open MPI、Intel MPI、または Open MPI と Intel MPI のどれを使用するかによって異なります。
EFA ソフトウェアをインストールするには
-
起動したインスタンスに接続します。詳細については、Linux インスタンスへの接続 を参照してください。
-
すべてのソフトウェアパッケージが最新の状態であることを確認するため、インスタンスでソフトウェアの更新を実行します。このプロセスには数分かかることがあります。
-
Amazon Linux 2、RHEL 7/8、および CentOS 7
$
sudo yum update -y -
Ubuntu 18.04 と 20.04
$
sudo apt-get update$
sudo apt-get upgrade -y -
SUSE Linux Enterprise
$
sudo zypper update -y
-
-
EFA ソフトウェアのインストールファイルをダウンロードします。ソフトウェアのインストールファイルは、圧縮された tar (
.tar.gz
) ファイルにパッケージ化されています。次のコマンドを使用して、安定している最新バージョンをダウンロードします。$
curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.17.2.tar.gz前述のコマンドのバージョン番号を
latest
に置き換えることで最新バージョンを取得することもできます。 -
(オプション) EFA tar (
.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.17.2.tar.gz.sig && gpg --verify ./aws-efa-installer-1.17.2.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
ファイルからファイルを展開し、展開されたディレクトリに移動します。$
tar -xf aws-efa-installer-1.17.2.tar.gz && cd aws-efa-installer -
EFA ソフトウェアをインストールします。使用するユースケースに応じて、以下のいずれかを実行します。
注記 SUSE Linux オペレーティングシステムを使用している場合は、さらに kmod のインストールを防止する
--skip-kmod
オプションを指定する必要があります。デフォルトでは、SUSE Linux はツリー外のカーネルモジュールを許可しません。そのため、EFA と NVIDIA GPUDirect のサポートは現在 SUSE Linux ではサポートされていません。-
Open MPI と Intel MPI
EFA で Open MPI と Intel MPI を使用する場合は、EFA ソフトウェアと共に Libfabric と Open MPI をインストールする必要があります。また、「ステップ 5: Intel MPI をインストールする」を完了する必要があります。Libfabric および Open MPI と共に EFA ソフトウェアをインストールするには、次のコマンドを実行します。
$
sudo ./efa_installer.sh -yLibfabric は、
/opt/amazon/efa
ディレクトリにインストールされているのに対し、Open MPI は/opt/amazon/openmpi
ディレクトリにインストールされています。 -
Open MPI のみ
EFA で Open MPI のみを使用する場合は、EFA ソフトウェアと共に Libfabric と Open MPI をインストールする必要があります。また、「ステップ 5: Intel MPI をインストールする」はスキップできます。Libfabric および Open MPI と共に EFA ソフトウェアをインストールするには、次のコマンドを実行します。
$
sudo ./efa_installer.sh -yLibfabric は、
/opt/amazon/efa
ディレクトリにインストールされているのに対し、Open MPI は/opt/amazon/openmpi
ディレクトリにインストールされています。 -
Intel MPI のみ
EFA で Intel MPI のみを使用する場合は、Libfabric および Open MPI を使用せずに EFA ソフトウェアをインストールできます。この場合、Intel MPI は埋め込まれている Libfabric を使用します。これを行う場合は、「ステップ 5: (オプション) Intel MPI をインストールする」を完了する必要があります。
Libfabric および Open MPI を使用せずに EFA ソフトウェアをインストールするには、次のコマンドを実行します。
$
sudo ./efa_installer.sh -y --minimal
-
-
EFA インストーラーでインスタンスの再起動を求めるメッセージが表示された場合は、再起動してからインスタンスに再接続します。それ以外の場合は、インスタンスからログアウトし、再度ログインしてインストールを完了します。
-
EFA ソフトウェアコンポーネントが正常にインストールされたことを確認します。
$
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
ステップ 4: 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
に追加してインスタンスを再起動します。
ステップ 5: (オプション) インテル MPI をインストールする
Open MPI のみを使用する場合は、このステップをスキップしてください。このステップは、Intel 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] を選択します。
-
Intel MPI 環境変数がインスタンスの起動ごとに設定されるように、これらの環境変数を対応するシェル起動スクリプトに追加します。使用するシェルに応じて、以下のいずれかを実行します。
-
bash の場合は、次の環境変数を
/home/
およびusername
/.bashrc/home/
に追加します。username
/.bash_profilesource /opt/intel/oneapi/mpi/latest/env/vars.sh
-
csh と tcsh の場合は、次の環境変数を
/home/
に追加します。username
/.cshrcsource /opt/intel/oneapi/mpi/latest/env/vars.csh
-
-
インスタンスからログアウトしてからログインし直します。
-
次のコマンドを実行して、Intel MPI が正しくインストールされていることを確認します。
$
which mpicc返されたパスに
/opt/intel/
サブディレクトリが含まれていることを確認します。
Intel MPI が不要になった場合は、シェル起動スクリプトから環境変数を削除してください。
ステップ 6: HPC アプリケーションをインストールする
HPC アプリケーションを一時インスタンスにインストールします。インストール手順は、特定の HPC アプリケーションによって異なります。詳細については、Amazon Linux インスタンスでのソフトウェアの管理 を参照してください。
インストール手順については、HPC アプリケーションのドキュメントの参照が必要になる場合があります。
ステップ 7: EFA 対応の AMI を作成する
必要なソフトウェアコンポーネントのインストール後、EFA 対応のインスタンスの起動に再利用できる AMI を作成します。
一時インスタンスから AMI を作成するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインで、[インスタンス] を選択します。
-
作成した一時インスタンスを選択し、[アクション]、[イメージ]、[イメージの作成] の順に選択します。
-
[イメージの作成] で、次を行います。
-
[イメージ名] に、AMI の分かりやすい名前を入力します。
-
(オプション) [イメージの説明] に、AMI の簡単な説明を入力します。
-
[イメージを作成] を選択します。
-
-
ナビゲーションペインで [AMIs] を選択します。
-
リストで作成した AMI を探します。ステータスが
pending
からavailable
に変わるまで待ってから、次のステップに進みます。
ステップ 8: クラスタープレイスメントグループで EFA 対応のインスタンスを作成する
ステップ 7 で作成した EFA 対応の AMI と、ステップ 1 で作成した EFA 対応のセキュリティグループを使用して、EFA 対応のインスタンスをクラスタープレイスメントグループ内で起動します。
-
EFA 対応のインスタンスをクラスターのプレイスメントグループに起動することは絶対的な要件ではありません。ただし、EFA 対応のインスタンスは、1 つのアベイラビリティーゾーン内の低レイテンシーグループに起動されるため、クラスタープレイスメントグループで実行することをお勧めします。
-
クラスターのインスタンスをスケールするときにキャパシティを使用できるようにするには、クラスタープレイスメントグループのキャパシティ予約を作成します。詳細については、クラスタープレイスメントグループでのキャパシティ予約 を参照してください。
ステップ 9: 一時インスタンスを終了する
この時点で、起動した一時インスタンスは不要になります。インスタンスを終了して、料金の発生を停止できます。
一時インスタンスを終了するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインで、[インスタンス] を選択します。
-
作成した一時インスタンスを選択し、[アクション]、[インスタンスの状態]、[インスタンスの終了] の順に選択します。
-
確認を求めるメッセージが表示されたら、[終了] を選択します。
ステップ 10: パスワードレス 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
キーまたはパスワードの入力を求められずに、メンバーノードに接続できるはずです。