HPC 対応 VM インスタンスを作成する

密結合のハイ パフォーマンス コンピューティング(HPC)ワークロードは、多くの場合、Message Passing Interface(MPI)を使用してプロセスと仮想マシン(VM)インスタンス間の通信を行います。ただし、MPI パフォーマンスを最適にするために独自の VM イメージをビルドするには、システムに関する専門知識と Google Cloud の知識が必要になり、メンテナンスに費やす時間も多くなります。HPC ワークロード用に最適化された環境をすばやく設定するには、HPC VM イメージを使用します。

HPC VM イメージは、密結合の HPC ワークロード用に最適化された Rocky Linux 8 ベースの VM イメージです。この中には、 Google Cloudで MPI のパフォーマンスを最大化する VM インスタンスの作成に必要な事前構成済みのカーネルとネットワーク調整パラメータが含まれています。

最適な結果を得るには、HPC 最適化マシンシリーズ(H4D シリーズや H3 シリーズなど)またはコンピューティング最適化マシンシリーズ(C2 シリーズや C2D シリーズなど)のマシンタイプに HPC VM イメージをデプロイします。これらのマシンタイプは、密結合 HPC アプリケーション向けに設計されています。H4D で RDMA を使用するには、HPC VM イメージのバージョン 20241125 以降を使用する必要があります。

HPC 対応 VM インスタンスを作成するには、次のオプションを使用します。

利点

HPC VM イメージには、次の利点があります。

  1. すぐに使用できる HPC ワークロード対応の VM インスタンス。密結合の HPC ワークロードの場合、パフォーマンスを手動で調整する必要はありません。VM インスタンスの再起動を管理する必要も、 Google Cloud の最新のアップデートを使用して最新の状態に更新する必要もありません。
  2. 密結合のワークロードのネットワーク最適化。小規模メッセージのレイテンシを低減するように最適化されます。ポイントツーポイント通信とグループ通信に大きく依存するアプリケーションにメリットがあります。H4D マシンシリーズを使用している場合、HPC VM イメージには必要な Cloud RDMA ドライバが含まれています。
  3. HPC ワークロードのコンピューティング最適化。システム ジッターを削減するように最適化されます。これにより、単一ノードの高パフォーマンスの予測可能性が向上します。
  4. 一貫性のある再現可能なパフォーマンス。VM イメージの標準化により、アプリケーション レベルで一貫した再現性が得られます。
  5. アプリケーションの互換性の向上Intel HPC プラットフォーム仕様のノードレベルの要件を満たすことで、システム間で高度な相互運用性を実現します。

HPC VM イメージの機能

HPC VM イメージには、ハイ パフォーマンス コンピューティング(HPC)ワークロードのパフォーマンスを最適化するように設計された機能がいくつか用意されています。

  • 自動アップデートが無効になっている
  • Intel MPI グループ調整
  • プリインストールされている RPM

自動アップデートが無効になっている

自動更新は HPC ワークロードのパフォーマンスに悪影響を与える可能性があります。HPC VM イメージを使用するときに自動更新を無効にするには、VM インスタンスの作成時に google_disable_automatic_updates メタデータ エントリを TRUE に設定します。インスタンスの作成時にこのメタデータ エントリを設定する方法は、インスタンスの作成に使用するツールによって異なります。

たとえば、gcloud compute instances create コマンドを使用して VM インスタンスを作成する場合は、--metadata 引数を指定します。詳細については、VM メタデータについてをご覧ください。

Intel MPI ライブラリ

Google Cloudで MPI ジョブを実行する場合は、Intel MPI 2021 ライブラリを使用することをおすすめします。詳しくは、以下のセクションをご覧ください。

プリインストールされている RPM

HPC VM イメージには、次の RPM パッケージがプリインストールされています。

  • daos-client
  • gcc-gfortran
  • gcc-toolset-12
  • Lmod
  • dkms
  • htop
  • hwloc
  • hwloc-devel
  • infiniband-diags
  • kernel-devel
  • kmod-idpf-irdma
  • libfabric
  • librdmacm-utils
  • libibverbs-utils
  • libXt
  • ltrace
  • nfs-utils
  • numactl
  • numactl-devel
  • papi
  • pciutils
  • pdsh
  • perf
  • perftest
  • rdma-core
  • redhat-lsb-core
  • redhat-lsb-cxx
  • rsh
  • screen
  • strace
  • wget
  • zsh
  • 「デベロッパー ツール」パッケージ グループ

クイックスタート

これらのチュートリアルでは、HPC 最適化 VM インスタンスを設定する手順について説明します。手順では、次の方法について説明します。

  • HPC VM インスタンスを作成する(Cloud RDMA を構成しない)
  • HPC VM インスタンスの作成時にコンパクト プレースメント ポリシーを指定する
  • Cloud RDMA(プレビュー)を使用する HPC VM インスタンスを作成する

既存の HPC VM インスタンスに Cloud RDMA を追加することはできません。インスタンスの作成時に適切な手順に沿って操作してください。

始める前に

  1. このクイックスタートで Google Cloud CLI を使用するには、まず Google Cloud CLI をインストールして初期化する必要があります。
  2. Google Cloud コンソールのプロジェクト セレクタページで、Google Cloud プロジェクトを選択または作成します。

HPC VM インスタンスを作成する

次のマシンシリーズからマシンタイプを選択することを強くおすすめします。

これらの VM は、仮想コアから物理コアへの固定されたマッピングを持ち、NUMA セル アーキテクチャをゲスト OS に公開します。どちらの機能も、密結合な HPC アプリケーションのパフォーマンスのために重要です。

コンソール

  1. Google Cloud コンソールで、HPC VM Cloud Marketplace ページに移動します。HPC VM Cloud Marketplace ページに移動

  2. [開始] をクリックします。

  3. HPC VM のデプロイページで、デプロイ名を入力します。この名前が VM 名のルートになります。Compute Engine は、この名前に -vm-を追加してインスタンス名を設定します。

  4. ゾーンマシンタイプを選択します。このクイックスタートでは、すべての設定をそのまま使用することも、変更することもできます。

  5. ブートディスクの種類ブートディスク サイズネットワーク インターフェースの設定はデフォルトのままにします。

  6. [デプロイ] をクリックします。

VM インスタンスの作成が完了すると、Cloud Deployment Manager が開き、HPC VM とその他のデプロイを管理できます。

gcloud

instances create コマンドを使用して HPC VM を作成します。相互接続された複数の HPC VM インスタンスを作成する場合は、コンパクト プレースメント ポリシーを使用して HPC VM を作成し、ネットワーク レイテンシを短縮します。

プレースメント ポリシーなしで HPC VM インスタンスを作成するには、次のようなコマンドを使用します。

gcloud compute instances create INSTANCE_NAME \
        --zone=ZONE \
        --image-family=IMAGE_FAMILY \
        --image-project=cloud-hpc-image-public \
        --maintenance-policy=TERMINATE \
        --machine-type=MACHINE_TYPE

次のように置き換えます。

  • INSTANCE_NAME: HPC VM インスタンスの名前。
  • ZONE: インスタンスを作成するゾーン
  • IMAGE_FAMILY: VM インスタンスの作成時に使用するイメージのイメージ ファミリー。最新の Rocky Linux 8 ベースのイメージには hpc-rocky-linux-8 を使用します。
  • MACHINE_TYPE: VM インスタンスを作成するときに使用するマシンタイプ。

しばらくすると VM インスタンスの作成が完了します。インスタンス構成を確認してステータスを確認するには、次のコマンドを実行します。

gcloud compute instances describe INSTANCE_NAME

コンパクト プレースメント ポリシーを使用して HPC VM インスタンスを作成する

コンパクト プレースメント ポリシーを作成すると、VM インスタンス間のレイテンシを短縮できます。コンパクト プレースメント ポリシーにより、同じアベイラビリティ ゾーンのインスタンスが互いに近い位置に配置されます。

1 つのコンパクト プレースメント ポリシーに収まらない VM インスタンスが必要な場合は、インスタンスを複数のプレースメント ポリシーに分割します。すべてのインスタンスに適合する最小数のプレースメント ポリシーを使用します。

コンパクト プレースメント ポリシーを指定する HPC VM インスタンスを作成するには、次の手順に沿って操作します。

  1. コンパクト プレースメント ポリシーを作成する

  2. 次のいずれかを行います。

Cloud RDMA を使用する HPC VM インスタンスを作成する

Cloud RDMA を使用する HPC VM インスタンスを作成するには、まず、少なくとも 1 つの通常の VPC ネットワークと 1 つの Falcon VPC ネットワークを作成する必要があります。Falcon VPC ネットワークは、コンピューティング インスタンス間の RDMA トラフィックを有効にする RDMA ネットワーク プロファイルを使用します。このネットワークは、RDMA 以外のトラフィックを他のGoogle Cloud サービスまたはインターネットに転送する通常の VPC ネットワークとは異なります。

Cloud RDMA を使用する HPC VM インスタンスを作成する手順は次のとおりです。

  1. 少なくとも 2 つの VPC ネットワークを特定または作成します。

    • gVNIC ネットワーク インターフェースを通過するトラフィック用の通常の VPC ネットワーク
    • RDMA トラフィック用の Falcon VPC ネットワーク
  2. HPC VM インスタンスを作成します。

    1. ソースイメージには、HPC VM イメージを使用します。このイメージには、Cloud RDMA に必要なドライバが含まれています。
    2. インスタンスの作成時に、少なくとも 2 つのネットワーク インターフェース(gVNIC ドライバを使用するインターフェースと IRDMA ドライバを使用するインターフェース)を構成します。

      詳細については、Cloud RDMA を使用するインスタンスを作成するをご覧ください。

  3. Cloud RDMA を使用する HPC VM インスタンスで MPI アプリケーションを実行する場合は、Cloud RDMA を使用して H4D VM で MPI アプリケーションを設定してスケーリングするの手順に沿って MPI を構成します。

HPC VM インスタンスにアクセスする

HPC VM インスタンスを作成すると、インスタンスが自動的に起動します。インスタンスにアクセスするには、次のいずれかを行います。

コンソール

  1. Google Cloud コンソールで、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. VM インスタンスの名前をクリックします。

  3. [リモート アクセス] セクションで、最初のプルダウン リストをクリックして、インスタンスへのアクセス方法を選択します。

Compute Engine が SSH 認証鍵を伝播してユーザーを作成します。詳細については、Linux VM への接続をご覧ください。

gcloud

SSH を使用してインスタンスにアクセスするには、gcloud compute ssh コマンドを使用します。

gcloud compute ssh INSTANCE_NAME

Compute Engine が SSH 認証鍵を伝播してユーザーを作成します。詳細については、インスタンスへの接続をご覧ください。

クリーンアップ

これらのクイックスタートで使用したリソースに対して Google Cloud アカウントに課金されないようにするには、作成した HPC VM インスタンスを削除します。

コンソール

  1. Google Cloud コンソールで、[デプロイ] ページに移動します。

    [デプロイメント] に移動

  2. HPC VM のデプロイメントの横にあるチェックボックスをオンにします。

  3. [削除] をクリックします。

gcloud

instances delete コマンドを使用します。

gcloud compute instances delete INSTANCE_NAME

ベスト プラクティスに従って HPC VM インスタンスを構成する

HPC VM インスタンスのパフォーマンスの予測可能性を向上させるには、次のベスト プラクティスを使用することをおすすめします。

同時マルチスレッディングを無効にする

デフォルトでは、HPC VM イメージは同時マルチスレッディング(SMT)(Intel プロセッサではハイパー スレッディング)を有効にします。SMT を無効にすると、パフォーマンスの予測可能性を向上させ、ジョブの時間を短縮できます。

SMT は、次の方法で無効にできます。

  • 新しい HPC VM の作成中に SMT を無効にするには、HPC VM の作成手順に沿って --threads-per-core=1 フラグを指定します。

  • 既存の HPC VM で SMT を無効にするには、VM に接続して、VM から次のコマンドを実行します。

    sudo google_mpi_tuning --nosmt
    

詳細については、コアあたりのスレッド数を設定するをご覧ください。

C2 インスタンスと C2D インスタンスのネットワーク インターフェース タイプとして gVNIC を構成する

HPC VM イメージは、仮想ネットワーク インターフェースとして Virtio-net と Google Virtual NIC(gVNIC)の両方をサポートしています。Virtio-net の代わりに gVNIC を使用すると、通信パフォーマンスが向上し、スループットが向上するため、MPI アプリケーションのスケーラビリティを改善できます。また、gVNIC は、VM ごとの Tier_1 ネットワーキング パフォーマンスの前提条件であり、高帯域幅を提供するため、スループットを向上させることができます。

新しい C2 インスタンスまたは C2D インスタンスを作成すると、デフォルトで Virtio-net が仮想ネットワーク インターフェースに使用されます。gVNIC を使用するには、HPC VM を作成するの手順に沿って、次のいずれかを行います。

コンソール

gVNIC をネットワーク インターフェースとして設定するには、インスタンスの作成時に、ナビゲーション メニューで [ネットワーキング] をクリックします。表示された [ネットワーキング] ペインで、次の操作を行います。

  1. [ネットワーク インターフェース] セクションに移動します。
  2. [ネットワーク インターフェース カード] で gVNIC を選択します。

gcloud

gcloud compute instances create コマンドに --network-interface=nic-type=GVNIC フラグを追加します。

HPC VM イメージには、Dynamic Kernel Module Support(DKMS)として gVNIC ドライバが含まれています。詳細については、Google Virtual NIC の使用をご覧ください。

Meltdown と Spectre の緩和策を無効にする

HPC VM イメージでは、デフォルトで Meltdown と Spectre の緩和策が有効になっています。これらの緩和策により、ワークロード固有のパフォーマンス低下につながる場合があります。これらの緩和策を無効にし、関連するセキュリティ リスクを発生させるには、次の手順を行います。

  1. HPC インスタンスで次のコマンドを実行します。

    sudo google_mpi_tuning --nomitigation
    
  2. インスタンスを再起動します。

ネットワークのパフォーマンスを向上させる

インスタンスのネットワーク パフォーマンスを向上させるには、次の構成を 1 つ以上設定します。

  • より高い帯域幅を構成する。C2 または C2D VM の Tier_1 ネットワーキングを構成するには、gcloud compute instances create コマンドを使用して VM を作成し、--network-performance-configs フラグを指定します。詳細については、高帯域幅の構成で VM を作成するをご覧ください。

  • ジャンボ フレームを使用する。ネットワーク パケットの処理オーバーヘッドを最小限に抑えるには、より大きなパケットサイズを使用することをおすすめします。より大きなパケットサイズは、アプリケーションの仕様に応じて検証する必要があります。ジャンボ フレームとパケットサイズの使用方法については、最大伝送単位のガイドをご覧ください。

  • TCP メモリの上限を引き上げる。帯域幅が高いほど、必要な TCP メモリは大きくなります。このため、tcp_*mem の設定値を増やす手順を行います。

  • ネットワーク レイテンシ プロファイルを使用する。アプリケーションのレイテンシを評価し、ネットワークの受信パスのレイテンシを低減するビジー ポーリングを有効にします。/etc/sysctl.confnet.core.busy_pollnet.core.busy_read の設定を調整するか、tuned-adm を使用します。

Intel MPI 2021 を使用する

Google Cloudで MPI ジョブを実行する場合は、Intel MPI 2021 ライブラリを使用することをおすすめします。

MPI 実装には、通信のパフォーマンスに影響する可能性のある内部構成パラメータが多数あります。これらのパラメータは、MPI グループ通信に特に関連しています。このことによって Google Cloud 環境で大きく異なる動作をする可能性のあるアルゴリズムと構成パラメータの指定が可能です。

HPC VM イメージには、推奨の MPI ライブラリをインストールし、TCP トランスポートで Google Cloud 向けにカスタマイズされた libfabric プロバイダを使用するユーティリティ google-hpc-compute が含まれています。

制限事項

調整のメリットはアプリケーションによって異なります。特定の調整がパフォーマンスに悪影響を与える場合もあります。アプリケーションのベンチマークを行って、最も効率的でコスト効率の高い構成を見つけることをおすすめします。

Intel MPI 2021 サポートに google-hpc-compute ユーティリティを使用する

google_install_intelmpi スクリプトは、Google-hpc-compute ユーティリティの MPI 関連ツールです。Intel MPI のインストールと構成に役立ちます。

google-hpc-compute ユーティリティは HPC VM イメージに含まれています。

Intel MPI 2021 をインストールする

新しい HPC VM の作成中に Intel MPI ライブラリをインストールするには、HPC VM を作成するの手順に沿って、VM インスタンスの作成時に以下を含めます。

--metadata=google_install_intelmpi="--impi_2021"

既存の HPC VM にライブラリをインストールするには、その VM で次のコマンドを実行します。

sudo google_install_intelmpi --impi_2021 --install_dir=PATH_INSTALL_MPI

install_dir のデフォルトの場所は /opt/intel に設定されています。

Intel MPI Library 2018 と MPI グループ調整

HPC VM イメージには、コンパクト プレースメント ポリシーを使用して c2-standard-60c2d-standard-112 インスタンスで実行される Intel MPI のグループ調整機能が含まれています。これらのチューニングは、/usr/share/google-hpc-compute/mpitune-configs/intelmpi-2018 ディレクトリにあります。

インストールされた MPI ライブラリにこれらのチューニング構成を適用するには、mpivars シェル スクリプトをソースして、適切な環境を設定します。次のコマンドを使用して、チューニングを直接インストールできます(ディレクトリに対する root アクセス権が必要な場合は、--sudo オプションを使用します)。google_install_mpitune

mpitune を使用すると、MPI グループ通信のアルゴリズムと構成パラメータを手動で指定し、構成ファイルを生成できます。

たとえば、22 個の VM インスタンスとインスタンスあたり 30 個の vCPU を調整するには、mpivars シェル スクリプトをソースとして適切な環境を設定し、次のコマンドを実行します。ディレクトリへの write アクセス権があるか、root ユーザーとしてコマンドを実行する必要があります。

mpitune -hf hostfile -fl 'shm:tcp' -pr 30:30 -hr 22:22

このコマンドは、後でアプリケーションの実行に使用できる構成ファイルを Intel MPI ディレクトリに生成します。アプリケーションのチューニング構成を使用するには、mpirun コマンドラインに -tune オプションを追加します。次に例を示します。

mpirun -tune -hostfile HOSTFILE -genv I_MPI_FABRICS 'shm:tcp' -np 660 -ppn 30 ./APPLICATION_NAME

次のように置き換えます。

  • HOSTFILE: VM インスタンスのネットワーク名を一覧表示するゲスト OS 内のファイルの名前
  • APPLICATION_NAME: 実行するアプリケーション ファイルの名前

HPC VM イメージを使用してカスタム イメージを作成する

ベスト プラクティスを大規模に実装するには、HPC VM インスタンスで使用するカスタム OS イメージを作成します。HPC VM インスタンスの作成時に使用するカスタム イメージを作成するには、次のタスクを行います。

  1. HPC VM イメージを使用する VM を作成します

  2. MPI 調整を使用して VM をカスタマイズします

  3. HPC VM イメージのブートディスクをソースディスクとして使用して、カスタム イメージを作成します。これは、Google Cloud コンソールまたは Google Cloud CLI を使用して行えます。

コンソール

  1. Google Cloud コンソールで [イメージ] ページに移動します。

    [イメージ] に移動

  2. [イメージを作成] をクリックします。

  3. イメージの名前を指定します。

  4. [ソースディスク] で、HPC VM のブートディスクの名前を選択します。

  5. イメージの残りのプロパティを選択します。

  6. [作成] をクリックします。

gcloud

カスタム イメージを作成するには、images create コマンドを使用します。

gcloud compute images create IMAGE_NAME \
         --source-disk=INSTANCE_NAME \
         --source-disk-zone=VM_ZONE \
         --family=IMAGE_FAMILY \
         --storage-location=LOCATION

次のように置き換えます。

  • IMAGE_NAME: カスタム イメージの名前。
  • INSTANCE_NAME: HPC VM の名前。
  • INSTANCE_ZONE: HPC VM が配置されているゾーン。
  • IMAGE_FAMILY: 省略可。この新しいイメージが属するイメージ ファミリー
  • LOCATION: 省略可。カスタム イメージを保存するリージョン。デフォルトのロケーションは、ソースディスクのロケーションに最も近いマルチリージョンです。

料金

HPC VM イメージは、追加料金なしで利用できます。HPC VM イメージは Compute Engine 上で実行されるため、vCPU、ディスク、メモリなどの Compute Engine リソースに対する課金が発生する場合があります。詳細については、Compute Engine の料金をご覧ください。

次のステップ