H4D インスタンスを使用して RDMA 対応の HPC Slurm クラスタを作成する

このページでは、H4D マシンタイプでリモート ダイレクト メモリ アクセス(RDMA)を使用するハイ パフォーマンス コンピューティング(HPC)Slurm クラスタを作成する方法について説明します。クラスタを構成するには、gcloud CLI と Cluster Toolkit を使用します。

H4D マシンシリーズは、要求の厳しい HPC ワークロードのニーズを満たすように特別に設計されています。H4D は、RDMA 対応の 200 Gbps ネットワーキングにより、ワークロードの拡張性を向上させたインスタンスを提供します。 Google Cloudの H4D コンピューティング最適化マシンタイプの詳細については、H4D マシンシリーズをご覧ください。

チュートリアルの概要

このチュートリアルでは、RDMA を使用して H4D マシンタイプで HPC 最適化 Slurm クラスタを設定する手順について説明します。具体的には、Compute Engine 仮想マシンでクラスタを設定し、必要な Terraform モジュールを保存する Cloud Storage バケットを作成し、Slurm クラスタをプロビジョニングする Filestore インスタンスを設定します。このチュートリアルの手順を完了するには、次のプロセスを行います。

  1. 必要な権限と環境変数を使用して Google Cloud プロジェクトを設定します。
  2. Cloud Storage バケットを設定します。
  3. Cluster Toolkit を設定します。
  4. Cluster Toolkit ディレクトリに切り替えます。
  5. Slurm Deployment YAML ファイルを作成します。
  6. ブループリントを使用して Slurm クラスタをプロビジョニングします。
  7. Slurm クラスタに接続します。

始める前に

  1. それぞれ 192 個の vCPU を備えた 2 つの H4D インスタンスの予約済み容量ブロックをリクエストします。
  2. Slurm クラスタをプロビジョニングするのに十分な Filestore の割り当てがあることを確認します。Filestore サービス階層が Basic SSD の場合、最小 5,120 GiB のゾーン容量が必要です。

    Filestore の割り当てを確認するには、 Google Cloud コンソールの [割り当てとシステム上限] を表示し、表をフィルタリングして Filestore リソースのみを表示します。

  3. Google Cloud プロジェクトに対して課金が有効になっていることを確認します

  4. Compute Engine、Filestore、Cloud Storage、Service Usage、Cloud Resource Manager API を有効にします。

    API を有効にする

費用

このチュートリアルの実行にかかる費用は、チュートリアルの設定やジョブの実行など、完了するセクションによって異なります。料金計算ツールを使用して費用を計算できます。

  • このチュートリアルの設定費用を見積もるには、次の仕様を使用します。

    • リージョンあたりの Filestore(基本 SSD)容量: 5,120 GiB。
    • 標準永続ディスク: Slurm ログインノード用に 50 GB の pd-standard
    • パフォーマンス(SSD)永続ディスク: Slurm コントローラ用に 50 GB の pd-ssd
    • VM インスタンス: h4d-highmem-192h4d-standard-192h4d-highmem-192-lssd マシンタイプで作成された 2 つの H4D インスタンス。
    • Hyperdisk Balanced ボリューム: 各 H4D インスタンスで 50 GiB。

Cloud Shell を起動する

このチュートリアルでは、 Google Cloudでホストされているリソースを管理するためのシェル環境である Cloud Shell を使用します。

Cloud Shell には、Google Cloud CLI がプリインストールされています。gcloud CLI は、 Google Cloudの主要なコマンドライン インターフェースを提供します。Cloud Shell を起動するには:

  1. Google Cloud コンソールに移動します。

    Google Cloud コンソール

  2. Console の右上隅にある [Cloud Shell をアクティブにする] ボタン Cloud Shell アイコン をクリックします。

Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。このシェルで gcloud コマンドと Cluster Toolkit コマンドを実行します。

環境変数を設定する

Cloud Shell で、チュートリアルの残りの部分で使用する次の環境変数を設定します。これらの環境変数は、次のタスクのプレースホルダの値を設定します。

  • 予約済みの H4D インスタンスにアクセスするための関連する値でプロジェクトを構成する。

  • Cluster Toolkit モジュールを保存するための Cloud Storage バケットを設定する。

予約容量の変数

export H4D_RESERVATION_PROJECT_ID=H4D_RESERVATION_PROJECT_ID
export H4D_RESERVATION_NAME=H4D_RESERVATION_NAME
export H4D_DEPLOYMENT_NAME=H4D_DEPLOYMENT_NAME
export H4D_REGION=H4D_REGION
export H4D_ZONE=H4D_ZONE
export H4D_DEPLOYMENT_FILE_NAME=H4D_DEPLOYMENT_FILE_NAME

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

  • H4D_RESERVATION_PROJECT_ID - H4D マシンタイプの予約ブロックが付与された Google Cloudプロジェクト ID。
  • H4D_RESERVATION_NAME - プロジェクトにある VM 予約ブロックの名前。例: h4d-highmem-exr
  • H4D_DEPLOYMENT_NAME - Slurm クラスタ Deployment の一意の名前。例: h4d-hpc-slurm-cluster-deployment
  • H4D_REGION - 予約済みの H4D マシン予約ブロックを実行しているリージョン。例: us-central1
  • H4D_ZONE - 予約済みマシンを含むゾーン。この文字列には、リージョンとゾーンの両方を含める必要があります。例: us-central1-a
  • H4D_DEPLOYMENT_FILE_NAME - Slurm のブループリント YAML ファイルの一意の名前。このチュートリアルを複数回行う場合は、毎回一意の Deployment の名前を選択してください。

ストレージ容量の変数

Cloud Storage バケットの環境変数を作成します。

Cluster Toolkit は、ブループリントを使用して VM のクラスタを定義してデプロイします。ブループリントでは、クラウド インフラストラクチャをプロビジョニングする 1 つ以上の Terraform モジュールを定義します。このバケットは、これらのブループリントの保存に使用されます。

export GOOGLE_CLOUD_BUCKET_NAME=GOOGLE_CLOUD_BUCKET_NAME
export GOOGLE_CLOUD_BUCKET_LOCATION=GOOGLE_CLOUD_BUCKET_LOCATION

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

  • GOOGLE_CLOUD_BUCKET_NAME - バケットの命名要件を満たす、Cloud Storage バケットに使用する名前。
  • GOOGLE_CLOUD_BUCKET_LOCATION - バケットがホストされる任意の Google Cloudリージョン。例: us-central1

予約済みの H4D 容量ブロックがあるプロジェクトに切り替える

次のコマンドを実行して、H4D インスタンスの承認済み予約ブロックがある Google Cloudプロジェクトにいることを確認します。

gcloud config set project ${H4D_RESERVATION_PROJECT_ID}

Cloud Storage バケットを作成する

Terraform モジュールを保存するバケットを作成します。Cloud Shell から、環境変数を使用して次のコマンドを実行します。

Terraform を使用する際のおすすめの方法は、バージョン対応のファイルに状態をリモートに保存することです。 Google Cloudでは、バージョニングが有効になっている Cloud Storage バケットを作成できます。

gcloud storage buckets create gs://${GOOGLE_CLOUD_BUCKET_NAME} \
    --project=${H4D_RESERVATION_PROJECT_ID} \
    --default-storage-class=STANDARD \
    --location=${GOOGLE_CLOUD_BUCKET_LOCATION} \
    --uniform-bucket-level-access

gcloud storage buckets update gs://${GOOGLE_CLOUD_BUCKET_NAME} --versioning

Cluster Toolkit を設定する

Google Cloud プロジェクトに Slurm クラスタを作成するには、Cluster Toolkit を使用してクラスタのデプロイとプロビジョニングを処理します。Cluster Toolkit は、Google Cloudにワークロードをデプロイするプロセスを簡素化するために Google Cloud が提供するオープンソース ソフトウェアです。

Cluster Toolkit を設定する手順は次のとおりです。

Cluster Toolkit GitHub リポジトリのクローンを作成する

  1. Cloud Shell で GitHub リポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.git
  2. メインの作業ディレクトリに移動します。

    cd cluster-toolkit/

Cluster Toolkit バイナリをビルドする

  1. Cloud Shell で、次のコマンドを実行して、ソースから Cluster Toolkit バイナリをビルドします。

    make
  2. ビルドを確認するには、次のコマンドを実行します。

    H4D インスタンスを使用する HPC 最適化 Slurm クラスタをデプロイするには、Cluster Toolkit のバージョン v1.47.0 以降を使用する必要があります。

    ./gcluster --version

    バイナリをビルドしたことで、ジョブまたはワークロードを実行するクラスタをデプロイする準備が整いました。

Deployment ファイルを作成する

  1. Cluster Toolkit ディレクトリに、Slurm Deployment YAML ファイルを作成します。

    nano ${H4D_DEPLOYMENT_FILE_NAME}.yaml
    
  2. 次の内容を YAML ファイルに貼り付けます。

    ---
    terraform_backend_defaults:
      type: gcs
      configuration:
        bucket: GOOGLE_CLOUD_BUCKET_NAME
    
    vars:
      deployment_name: H4D_DEPLOYMENT_FILE_NAME
      project_id: H4D_RESERVATION_PROJECT_ID
      region: H4D_REGION
      zone: H4D_ZONE
      
      
    
  3. ファイルを保存して終了するには、Ctrl+O > Enter > Ctrl+X の順に押します。

Slurm クラスタをプロビジョニングする

Slurm クラスタをプロビジョニングするには、次のデプロイ コマンドを実行します。このコマンドは、H4D Cluster Toolkit ブループリントを使用して Slurm クラスタをプロビジョニングします。

Cloud Shell で、クラスタの作成を開始します。

./gcluster deploy -d ${H4D_DEPLOYMENT_FILE_NAME}.yaml examples/hpc-slurm-h4d.yaml --auto-approve

クラスタに接続する

デプロイ後、 Google Cloud コンソールに接続してクラスタを表示します。

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

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

  2. ログインノードを見つけます。ログインノードの名前は example-deployment-login-123 のようになっている場合があります。

  3. [SSH] をクリックして接続します。

クリーンアップ

このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。

Slurm クラスタの削除

リソースが不要になったら、クリーンアップすることをおすすめします。

削除からの保護を無効にする

インスタンスの更新時に削除保護を無効にするには、次のようなコマンドを使用します。

  gcloud filestore instances update INSTANCE_NAME \
      --no-deletion-protection

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

  • INSTANCE_NAME: 編集するインスタンスの名前。例: my-genomics-instance

INSTANCE_NAME を見つけるには、コマンド gcloud filestore instances list を実行します。このコマンドは、現在の Google Cloud プロジェクト内のすべての Filestore インスタンスを一覧表示します。名前、ロケーション(ゾーン)、階層、容量、ステータスなどが表示されます。

コマンドを実行したら、このチュートリアルで使用した H4D マシンタイプと一致する Filestore インスタンスを見つけます。

Slurm クラスタを破棄する

  1. 破棄のコマンドを実行する前に、Cluster Toolkit ディレクトリのルートに移動します。デフォルトでは、DEPLOYMENT_FOLDER は Cluster Toolkit ディレクトリのルートにあります。

  2. クラスタを破棄するには、次のコマンドを実行します。

    ./gcluster destroy ${H4D_DEPLOYMENT_FILE_NAME} --auto-approve
    

クラスタの破棄が完了すると、次のようなメッセージが表示されます。

Destroy complete! Resources: xx destroyed.

ストレージ バケットの削除

前のコマンドがエラーなしで終了したことを確認してから、Cloud Storage バケットを削除します。

gcloud storage buckets delete gs://${GOOGLE_CLOUD_BUCKET_NAME}

トラブルシューティング

  • エラー: ストレージが残っていないため、Cloud Shell はクラスタをプロビジョニングできません。

    このエラーは、Cloud Shell を頻繁に使用していて、ストレージ容量が不足している場合に表示されることがあります。

    この問題を解決するには、Cloud Shell を無効にするかリセットするをご覧ください。

  • エラー: クラスタ名またはブループリント名がすでに存在します。

    プロジェクトで、このチュートリアルで使用したものとまったく同じファイル名が使用されていた場合に、このエラーが表示されることがあります。たとえば、組織内の別のユーザーがこのチュートリアルをエンドツーエンドで実行した場合などです。

    この問題を解決するには、チュートリアルをもう一度実行し、Deployment ファイルの一意の名前を選択し、新しい Deployment ファイルを使用して Slurm クラスタのプロビジョニング コマンドを再実行します。

次のステップ