EFA および MPI の開始方法 - Amazon Elastic Compute Cloud

EFA および MPI の開始方法

本チュートリアルは、EFA と HPC ワークロードの MPI 対応インスタンスクラスターの起動に役立ちます。本チュートリアルでは、次の手順を実行します。

ステップ 1: EFA 対応のセキュリティグループを準備する

EFA には、セキュリティグループ自体とのインバウンドおよびアウトバウンドのトラフィックをすべて許可するセキュリティグループが必要です。

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

  1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで [セキュリティグループ] を選択し、[セキュリティグループの作成] を選択します。

  3. [セキュリティグループの作成] ウィンドウで以下を行います。

    1. [セキュリティグループ名] に、セキュリティグループの分かりやすい名前 (例: EFA-enabled security group) を入力します。

    2. (オプション) [説明] に、セキュリティグループの簡単な説明を入力します。

    3. [VPC] で、EFA 対応のインスタンスを起動する VPC を選択します。

    4. [作成] を選択します。

  4. 作成したセキュリティグループを選択し、[説明] タブで [グループ ID] をコピーします。

  5. [インバウンド] タブおよび [アウトバウンド] タブで、次の手順を実行します。

    1. [Edit] を選択します。

    2. [タイプ] で、[すべてのトラフィック] を選択します。

    3. [ソース] で [カスタム] を選択します。

    4. コピーしたセキュリティグループ ID をフィールドに貼り付けます。

    5. [Save] を選択します。

ステップ 2: 一時インスタンスを作成する

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

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

  1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。

  2. [インスタンスの作成] を選択します。

  3. [AMI の選択] ページで、サポートされている AMI (Amazon Linux, Amazon Linux 2, RHEL 7.6, RHEL 7.7, RHEL 7.8, CentOS 7, Ubuntu 16.04, and Ubuntu 18.04) のいずれかを選択します。

  4. [インスタンスタイプの選択] ページで、サポートされているインスタンスタイプ (c5n.18xlargec5n.metalg4dn.metali3en.24xlargei3en.metalm5dn.24xlargem5n.24xlarger5dn.24xlarger5n.24xlarge、および p3dn.24xlarge) のいずれかを選択し、[次の手順: インスタンスの詳細の設定] を選択します。

  5. [Configure Instance Details] ページで以下の操作を実行します。

    1. [Elastic Fabric Adapter] で、[有効化] を選択します。

    2. [ネットワークインターフェイス] セクションの [eth0] で、[新しいネットワークインターフェイス] を選択します。

    3. [次の手順: ストレージの追加] を選択します。

  6. [Add Storage (ストレージの追加)] ページで、AMI で指定されたボリュームに加えてインスタンスにアタッチするボリューム (例: ルートデバイスボリューム) を指定します。次に、[次の手順: タグの追加] を選択します。

  7. [タグの追加] ページで、一時インスタンスの識別に使用するタグを指定し、[Next: Configure Security Group (次へ: セキュリティグループの設定)] を選択します。

  8. [Configure Security Group (セキュリティグループの設定)] ページの [Assign a security group (セキュリティグループの割り当て)] で、[Select an existing security group (既存のセキュリティグループの選択)] を選択し、ステップ 1 で作成したセキュリティグループを選択します。

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

ステップ 3: EFA ソフトウェアをインストールする

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

この手順は、EFA で Open MPI と Intel MPI のどちらを使用するかによって異なります。

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

  1. ステップ 2 で起動したインスタンスに接続します。詳細については、Linux インスタンスへの接続 を参照してください。

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

    • Amazon Linux、Amazon Linux 2、RHEL 7.6/7.7/7.8、CentOS 7

      $ sudo yum update -y
    • Ubuntu 16.04 および Ubuntu 18.04

      $ sudo apt-get update -y
      $ sudo apt-get upgrade -y
  3. EFA ソフトウェアのインストールファイルをダウンロードします。次のコマンドを使用して、安定している最新バージョンをダウンロードします。

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

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

  4. ソフトウェアのインストールファイルは、圧縮された .tar.gz ファイルにパッケージ化されています。圧縮された .tar.gz ファイルからファイルを展開し、展開されたディレクトリに移動します。

    $ tar -xf aws-efa-installer-1.9.3.tar.gz
    $ cd aws-efa-installer
  5. EFA ソフトウェアをインストールします。

    • EFA で Open MPI を使用する場合は、Libfabric および Open MPI と共に EFA ソフトウェアをインストールする必要があります。また、「ステップ 4: Intel MPI のインストール」はスキップする必要があります。

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

      $ sudo ./efa_installer.sh -y

      Libfabric は、/opt/amazon/efa ディレクトリにインストールされているのに対し、Open MPI は /opt/amazon/openmpi ディレクトリにインストールされています。

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

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

      $ sudo ./efa_installer.sh -y --minimal
  6. インスタンスからログアウトしてからログインし直します。

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

    $ fi_info -p efa

    コマンドによって、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 provider: efa fabric: EFA-fe80::94:3dff:fe89:1b70 domain: efa_0-dgrm version: 2.0 type: FI_EP_DGRAM protocol: FI_PROTO_EFA provider: efa;ofi_rxd fabric: EFA-fe80::94:3dff:fe89:1b70 domain: efa_0-dgrm version: 1.0 type: FI_EP_RDM protocol: FI_PROTO_RXD

ステップ 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 をインストールするには

  1. Intel MPI のインストールファイルをダウンロードするには、Intel Developer Zone ウェブサイトを参照してください。

    インストールファイルのダウンロードには登録が必要です。登録を済ませたら以下を行います。

    1. [製品] については [Intel MPI Library for Linux] を選択します。

    2. [Version (バージョン)] で、[2019 Update 7]、[Full Product (フル製品)] の順に選択します。

  2. インストールファイルは、圧縮された.tar.gzファイルにパッケージ化されています。圧縮された .tar.gz ファイルからファイルを展開し、展開されたディレクトリに移動します。

    $ tar -xf file_name.tgz
    $ cd directory_name
  3. お好みのテキストエディタを使用してsilent.cfgを開きます。行 10 において、ACCEPT_EULA=declineACCEPT_EULA=acceptに変更します。変更内容を保存してファイルを閉じます。

  4. インストールスクリプトを実行します。

    $ sudo ./install.sh -s silent.cfg

    Intel MPI は、デフォルトでは/opt/intel/impi/ディレクトリにインストールされます。

  5. Intel MPI 環境変数がインスタンスの起動ごとに設定されるように、これらの環境変数を対応するシェル起動スクリプトに追加します。使用するシェルに応じて、以下のいずれかを実行します。

    • bash の場合は、次の環境変数を /home/username/.bashrc および /home/username/.bash_profile に追加します。

      source /opt/intel/compilers_and_libraries/linux/mpi/intel64/bin/mpivars.sh
    • csh と tcsh の場合は、次の環境変数を /home/username/.cshrc に追加します。

      source /opt/intel/compilers_and_libraries/linux/mpi/intel64/bin/mpivars.csh
  6. インスタンスからログアウトしてからログインし直します。

  7. 次のコマンドを実行して、Intel MPI が正しくインストールされていることを確認します。

    $ which mpicc

    返されたパスに /opt/intel/ サブディレクトリが含まれていることを確認します。

注記

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

ステップ 6: HPC アプリケーションをインストールする

HPC アプリケーションを一時インスタンスにインストールします。インストール手順は、特定の HPC アプリケーションによって異なります。Linux インスタンスへのソフトウェアのインストールの詳細については、「Linux インスタンスでのソフトウェアの管理」を参照してください。

注記

インストール手順については、HPC アプリケーションのドキュメントの参照が必要になる場合があります。

ステップ 7: EFA 対応の AMI を作成する

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

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

  1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[インスタンス] を選択します。

  3. ステップ 1 で作成したインスタンスを作成し、[アクション]、[イメージ]、[イメージの作成] の順に選択します。

  4. [イメージの作成] ウィンドウで、以下の操作を行います。

    1. [イメージ名] に、AMI の分かりやすい名前を入力します。

    2. (オプション) [イメージの説明] に、AMI の簡単な説明を入力します。

    3. [イメージの説明]、[Close (閉じる)] の順に選択します。

  5. ナビゲーションペインで [AMI] を選択します。

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

ステップ 8: クラスタープレイスメントグループで EFA 対応のインスタンスを作成する

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

注記

EFA 対応のインスタンスをクラスターのプレイスメントグループに起動することは絶対的な要件ではありません。ただし、EFA 対応インスタンスは、1 つのアベイラビリティーゾーン内の低レイテンシーグループに起動されるため、クラスタープレイスメントグループで実行することをお勧めします。

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

  1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。

  2. [インスタンスの作成] を選択します。

  3. [AMI の選択] ページで、[マイ AMI] を選択し、ステップ 6 で作成した AMI を探して、[選択] を選択します。

  4. [インスタンスタイプの選択] ページで、サポートされているインスタンスタイプ (c5n.18xlargec5n.metalg4dn.metali3en.24xlargei3en.metalm5dn.24xlargem5n.24xlarger5dn.24xlarger5n.24xlarge、および p3dn.24xlarge) のいずれかを選択し、[次の手順: インスタンスの詳細の設定] を選択します。

  5. [Configure Instance Details] ページで以下の操作を実行します。

    1. [インスタンス数] に、起動する EFA 対応のインスタンスの数を入力します。

    2. [ネットワーク] および [サブネット] で、インスタンスを起動する VPC およびサブネットを選択します。

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

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

    5. [EFA] で、[有効化] を選択します。

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

    7. [次の手順: ストレージの追加] を選択します。

  6. [ストレージの追加] ページで、AMI で指定されたボリュームに加えてインスタンスにアタッチするボリューム (例: ルートデバイスのボリューム) を指定し、[Next: Add Tags (次へ: タグの追加)] を選択します。

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

  8. [Configure Security Group (セキュリティグループの設定)] ページの [Assign a security group (セキュリティグループの割り当て)] で、[Select an existing security group (既存のセキュリティグループの選択)] を選択し、ステップ 1 で作成したセキュリティグループを選択します。

  9. [Review and Launch] を選択します。

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

ステップ 9: 一時インスタンスを終了する

この時点で、ステップ 1 で起動した一時インスタンスは不要になります。このインスタンスに対する料金が請求されないように、インスタンスを終了することができます。

ステップ 7: 一時インスタンスを終了する

  1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインで、[インスタンス] を選択します。

  3. ステップ 1 で作成した一時インスタンスを選択し、[アクション]、[インスタンスの状態]、[終了]、[Yes, Terminate (はい、終了する)] の順に選択します。

ステップ 10: パスワードレス SSH を有効にする

アプリケーションを有効にして、クラスターのすべてのインスタンス間で実行するには、リーダーノードからメンバーノードに対してパスワードレス SSH アクセスを有効にする必要があります。リーダーノードは、アプリケーションの実行元となるインスタンスです。クラスターのその他のインスタンスは、メンバーノードになります。

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

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

  2. リーダーノードで strictHostKeyChecking を無効にし、ForwardAgent を有効にします。適切なテキストエディタを使用して ~/.ssh/config を開き、以下を追加します。

    Host * ForwardAgent yes Host * StrictHostKeyChecking no
  3. RSA キーペアを生成します。

    $ ssh-keygen -t rsa -N "" -f /home/ubuntu/.ssh/id_rsa

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

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

    $ chmod 600 ~/.ssh/id_rsa
  5. 適切なテキストエディタを使用して ~/.ssh/id_rsa.pub を開き、キーをコピーします。

  6. クラスターの各メンバーノードで、以下を実行します。

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

    2. 適切なテキストエディタを使用して ~/.ssh/authorized_keys を開き、前にコピーしたパブリックキーを追加します。

  7. パスワードレス SSH が予期したとおりに機能しているかテストするため、リーダーノードに接続し、次のコマンドを実行します。

    $ ssh member_node_private_ip

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