EFAと MPI の開始方法 - Amazon Elastic Compute Cloud

EFAと MPI の開始方法

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

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

EFA には、セキュリティグループ自体とのインバウンドおよびアウトバウンドのトラフィックをすべて許可するセキュリティグループが必要です。次の手順では、テスト目的のためだけに、すべてのインバウンドトラフィックとアウトバウンドトラフィックを許可します。その他のシナリオについては、「さまざまなユースケースのセキュリティグループのルール」を参照してください。

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

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

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

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

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

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

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

    4. [セキュリティグループの作成] を選択します。

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

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

    1. [Add rule] を選択します。

    2. [Type] で、[All traffic] を選択します。

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

    4. [ルールの追加] を選択します。

    5. [Type] (タイプ) で [SSH] を選択します。

    6. [Source type] (ソースタイプ) で、[Anywhere-IPv4] を選択します。

    7. [Save Rules] (ルールの保存) を選択します。

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

    1. [Add rule] を選択します。

    2. [Type] で、[All traffic] を選択します。

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

    4. [Save Rules] (ルールの保存) を選択します。

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

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

New console

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

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

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

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

  4. [Application and OS Images] (アプリケーションと OS イメージ) セクションで、サポートされる AMI を選択します。

  5. [Instance type] (インスタンスタイプ) セクションで、サポートされているインスタンスタイプを選択します。

  6. [Key pair] (キーペア) セクションで、インスタンスに使用するキーペアを選択します。

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

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

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

    3. [Advanced network configuration] (高度なネットワーク設定) セクションを展開し、[Elastic Fabric Adapter][Enable] (有効) を選択します。

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

  9. 右側の [Summary] (サマリー) パネルで、[Launch instance] (インスタンスの起動) を選択します。

Old console

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

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

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

  3. [AMI の選択] ページで、サポートされている AMIs のいずれかに対して [Select (選択)] を選択します。

  4. [Choose an Instance Type (インスタンスタイプの選択)] ページで、サポートされているインスタンスタイプのいずれかを選択し、[Next: Configure Instance Details (次の手順: インスタンスの詳細の設定)] をクリックします。

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

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

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

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

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

  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、または Open MPI と Intel MPI のどれを使用するかによって異なります。

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

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

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

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

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

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

  4. (オプション) EFA tar (.tar.gz) ファイルの認証と完全性を検証します。ソフトウェア発行元の ID を検証し、発行後にファイルの改変や破損がないことを確認するために、これを行うことをお勧めします。tar ファイルを検証しない場合は、この手順をスキップします。

    注記

    あるいは、MD5 または SHA256 チェックサムを使用して tar ファイルを検証する場合は、「チェックサムを使用した EFA インストーラの検証」を参照してください。

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

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

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

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

      $ gpg --fingerprint key_value

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

    3. 署名ファイルをダウンロードし、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 にお問い合わせください。

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

    $ tar -xf aws-efa-installer-1.17.2.tar.gz && cd aws-efa-installer
  6. 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 -y

      Libfabric は、/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 -y

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

  8. 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 をインストールするには

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

    1. インテルのウェブサイトにアクセスします。

    2. ウェブページの「Intel MPI Library」(インテル MPI ライブラリ) セクションで、Intel MPI Library for Linux Offline インストーラのリンクを選択します。

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

    $ sudo bash installation_script_name.sh
  3. インストーラで、[Accept & install] (承諾してインストール) を選択します。

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

  5. インストールが完了したら、[Close] を選択します。

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

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

      source /opt/intel/oneapi/mpi/latest/env/vars.sh
    • csh と tcsh の場合は、次の環境変数を /home/username/.cshrc に追加します。

      source /opt/intel/oneapi/mpi/latest/env/vars.csh
  7. インスタンスからログアウトしてからログインし直します。

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

    $ which mpicc

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

注記

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

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

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

注記

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

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

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

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

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

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

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

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

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

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

    3. [イメージを作成] を選択します。

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

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

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

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

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

  • クラスターのインスタンスをスケールするときにキャパシティを使用できるようにするには、クラスタープレイスメントグループのキャパシティ予約を作成します。詳細については、クラスタープレイスメントグループでのキャパシティ予約 を参照してください。

New console

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

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

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

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

  4. [Application and OS Images] (アプリケーションと OS イメージ) セクションで、[My AMIs] (マイ AMI) をクリックし、前のステップで作成した AMI を選択します。

  5. [Instance type] (インスタンスタイプ) セクションで、サポートされているインスタンスタイプを選択します。

  6. [Key pair] (キーペア) セクションで、インスタンスに使用するキーペアを選択します。

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

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

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

    3. [Advanced network configuration] (高度なネットワーク設定) セクションを展開し、[Elastic Fabric Adapter][Enable] (有効) を選択します。

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

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

  10. 右側の [Summary] (サマリー) パネルで、[Number of instances] (インスタンス数) に、起動する EFA 対応のインスタンスの数を入力し、[Launch Instance] (インスタンスの起動) を選択します。

Old console

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

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

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

  3. [AMI の選択] ページで、[マイ AMI] を選択し、ステップ 7 で作成した AMI を見つけて、[選択] をクリックします。

  4. [Choose an Instance Type (インスタンスタイプの選択)] ページで、サポートされているインスタンスタイプのいずれかを選択し、[Next: Configure Instance Details (次の手順: インスタンスの詳細の設定)] をクリックします。

  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. Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。

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

  3. 作成した一時インスタンスを選択し、[アクション]、[インスタンスの状態]、[インスタンスの終了] の順に選択します。

  4. 確認を求めるメッセージが表示されたら、[終了] を選択します。

ステップ 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 ~/.ssh/id_rsa

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

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

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

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

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

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

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

    $ ssh member_node_private_ip

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