A4 VM を使用してセルフマネージド Slurm クラスタを作成する
このページでは、gcloud CLI と Cluster Toolkit で A4 アクセラレータ最適化マシンタイプを使用し、AI によって最適化された Slurm クラスタを迅速に作成してデプロイする方法について説明します。
A4 アクセラレータ最適化マシンタイプには NVIDIA B200 GPU がアタッチされており、集中的な AI 計算用に特別に設計されています。これにより、Slurm クラスタは大規模なモデルのトレーニングと推論を効率的に処理できます。 Google Cloudの A4 アクセラレータ最適化マシンタイプの詳細については、GPU マシンタイプをご覧ください。
また、Cluster Director を使用して A4 ベースの Slurm クラスタを作成することもできます。Cluster Director は、クラスタのデプロイを簡素化して自動化し、運用上のオーバーヘッドを削減するマネージド サービスです。詳細については、2 つの A4 VM を使用してフルマネージド Slurm クラスタを作成するをご覧ください。
チュートリアルの概要
このチュートリアルでは、A4 アクセラレータ最適化マシンタイプを使用して AI 最適化 Slurm クラスタを設定する手順について説明します。具体的には、Compute Engine 仮想マシンでクラスタを設定して、必要な Terraform モジュールを保存する Cloud Storage バケットを作成し、Slurm クラスタをプロビジョニングする Filestore インスタンスを設定します。このチュートリアルの手順を完了するには、次のプロセスを行います。
- このガイドに必要な権限と、マシンを予約するための環境変数を使用して、 Google Cloud プロジェクトを設定します。
- Cloud Storage バケットを作成する。
- ストレージ環境変数を設定します。
- Cluster Toolkit を設定します。
- Cluster Toolkit ディレクトリに切り替えます。
- Slurm Deployment YAML ファイルを作成します。
- ブループリントを使用して Slurm クラスタをプロビジョニングします。
- Slurm クラスタに接続します。
始める前に
- 1 台の
a4-highgpu-8gマシンの容量ブロックを予約するか、カレンダー モードの予約を作成します。 ブループリント リソースをプロビジョニングするのに十分な Managed Lustre 割り当て(36,000 GiB 以上のストレージ容量割り当てと 18 GBps のスループット割り当て)があることを確認します。
- 割り当てを確認する手順の詳細については、API 固有の割り当てを表示するをご覧ください。
Compute Engine、Managed Lustre、Service Networking、Cloud Storage、Service Usage、Resource Manager API を有効にします。
必要なロール
Slurm クラスタのデプロイに必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
- プロジェクトに対するストレージ管理者(
roles/storage.admin) - プロジェクトに対する Compute インスタンス管理者(v1)(
roles/compute.instanceAdmin.v1) - サービス アカウント自体に対するサービス アカウント ユーザー(
roles/iam.serviceAccountUser) -
単一プロジェクトの予約を使用する: プロジェクトに対する Compute インスタンス管理者(v1)(
roles/compute.instanceAdmin.v1) -
共有予約を使用する: オーナー プロジェクトと、予約を使用するコンシューマ プロジェクトの両方に対する Compute インスタンス管理者(v1)(
roles/compute.instanceAdmin.v1)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
費用
このチュートリアルの実行にかかる費用は、チュートリアルの設定やジョブの実行など、完了するセクションによって異なります。料金計算ツールを使用して費用を計算できます。
このチュートリアルの設定費用を見積もるには、次の仕様を使用します。
- Managed Lustre の容量: 500 MBps/TiB のパフォーマンス ティアで 36,000 GiB。Managed Lustre の料金は、ストレージ容量と構成されたパフォーマンス ティアの両方によって異なります。
- 標準永続ディスク: Slurm ログインノード用に 50 GB の
pd-standard。 - パフォーマンス(SSD)永続ディスク: Slurm コントローラ用に 50 GB の
pd-ssd。 - Compute Engine インスタンス: 1
a4-highgpu-8g。
Cloud Shell を起動する
このチュートリアルでは、 Google Cloudでホストされているリソースを管理するためのシェル環境である Cloud Shell を使用します。
Cloud Shell には、Google Cloud CLI がプリインストールされています。gcloud CLI は、 Google Cloudの主要なコマンドライン インターフェースを提供します。Cloud Shell を起動します。
Google Cloud コンソールに移動します。
コンソールの右上隅にある [Cloud Shell をアクティブにする] ボタン
をクリックします。
Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。このシェルを使用して gcloud コマンドと Cluster Toolkit コマンドを実行します。
マシン予約容量の変数を設定する
Cloud Shell で、次の予約容量環境変数を設定します。これらの環境変数は、予約済みの a4-highgpu-8g マシンにアクセスするようにプロジェクトを構成するためのプレースホルダの値を設定します。
export A4_RESERVATION_PROJECT_ID=A4_RESERVATION_PROJECT_ID export A4_RESERVATION_NAME=A4_RESERVATION_NAME export A4_DEPLOYMENT_NAME=A4_DEPLOYMENT_NAME export A4_REGION=A4_REGION export A4_ZONE=A4_ZONE export A4_DEPLOYMENT_FILE_NAME=A4_DEPLOYMENT_FILE_NAME
次のように置き換えます。
A4_RESERVATION_PROJECT_ID: A4 マシンタイプの予約ブロックが付与された Google Cloudプロジェクト ID。A4_RESERVATION_NAME: プロジェクトで使用されている GPU 予約の名前。例:a4high-exrA4_DEPLOYMENT_NAME: Slurm クラスタ デプロイの一意の名前。例:my-slurm-cluster-deploymentA4_REGION: 予約済みの A4 マシン予約ブロックを実行しているリージョン。例:us-central1A4_ZONE: 予約済みマシンを含むゾーン。この文字列には、リージョンとゾーンの両方を含める必要があります。例:us-central1-aA4_DEPLOYMENT_FILE_NAME: Slurm のブループリント YAML ファイルの一意の名前。このチュートリアルを複数回行う場合は、毎回一意のデプロイ名を選択してください。
A4 承認済みプロジェクトに切り替える
A4 マシンタイプの承認済み予約ブロックがある Google Cloud プロジェクトに切り替えます。
gcloud config set project ${A4_RESERVATION_PROJECT_ID}Cloud Storage バケットを作成する
ブループリントとそのモジュールをデプロイすると、Terraform はブループリントをクラウド内のリソースにマッピングする状態ファイルを作成します。インフラストラクチャの信頼性の高いレコードを維持するには、Terraform 状態ファイルをリモートのバージョン対応の場所(バージョニングが有効になっている Cloud Storage バケットなど)に保存することをおすすめします。
状態ファイルを保存するには、Cloud Shell からバージョニングを有効にして Cloud Storage バケットを作成します。
gcloud storage buckets create gs://${BUCKET_NAME} \
--project=${A4_RESERVATION_PROJECT_ID} \
--default-storage-class=STANDARD \
--location=${BUCKET_LOCATION} \
--uniform-bucket-level-access
gcloud storage buckets update gs://${BUCKET_NAME} --versioning
次のように置き換えます。
BUCKET_NAME: 新しい Cloud Storage バケットの名前。バケットの命名要件を満たす必要があります。A4_RESERVATION_PROJECT_ID: A4 マシンタイプの予約ブロックが付与された Google Cloudプロジェクト ID。BUCKET_LOCATION: Cloud Storage バケットを作成する Google Cloudリージョン(us-central1など)。Terraform は、この場所に状態ファイルを保存します。
ストレージ容量の変数を設定する
Cloud Shell で、前の手順で作成したバケットの環境変数を作成します。
export BUCKET_NAME=BUCKET_NAME export BUCKET_LOCATION=BUCKET_LOCATION
次のように置き換えます。
BUCKET_NAME: バケットの名前。BUCKET_LOCATION: バケットが配置されているリージョン。
Cluster Toolkit を設定する
Google Cloud プロジェクトに Slurm クラスタを作成するには、Cluster Toolkit を使用してクラスタのデプロイとプロビジョニングを処理します。Cluster Toolkit は、 Google Cloudにワークロードをデプロイするプロセスを簡素化するために Google Cloudが提供するオープンソース ソフトウェアです。
Cluster Toolkit を設定する手順は次のとおりです。
Cluster Toolkit をインストールする
Cluster Toolkit をインストールするには、プラットフォーム用にビルド済みのバイナリ バンドルをダウンロードして展開します。 ZIP アーカイブと tar(.tgz)アーカイブの両方を使用できます。
- GitHub の Cluster Toolkit のリリースページに移動します。
- 使用するプラットフォームとアーキテクチャに一致するバンドルをダウンロードします。次のオプションを使用できます。
gcluster_bundle_linux_amd64.zipまたはgcluster_bundle_linux_amd64.tgzgcluster_bundle_linux_arm64.zipまたはgcluster_bundle_linux_arm64.tgzgcluster_bundle_mac_amd64.zipまたはgcluster_bundle_mac_amd64.tgzgcluster_bundle_mac_arm64.zipまたはgcluster_bundle_mac_arm64.tgz
- ターミナルで、バンドル ファイルを新しいディレクトリに抽出します。
-
ZIP バンドルをダウンロードした場合は、
unzipコマンドを使用してファイルを抽出します。unzip BUNDLE_FILENAME -d cluster-toolkit
-
tar バンドルをダウンロードした場合は、
tarコマンドを使用してファイルを抽出します。mkdir -p cluster-toolkit tar -xzf BUNDLE_FILENAME -C cluster-toolkit
BUNDLE_FILENAMEは、ダウンロードしたバンドルの名前に置き換えます。 -
- 新しいディレクトリに移動します。
cd cluster-toolkit
- インストールを確認します。
./gcluster --version
出力には、使用している Cluster Toolkit の現在のバージョンが表示されます。
バイナリをインストールしたことで、ジョブまたはワークロードを実行するクラスタをデプロイする準備が整いました。
デプロイ ファイルを作成する
Cluster Toolkit ディレクトリに、Slurm デプロイ YAML ファイルを作成します。
nano ${A4_DEPLOYMENT_FILE_NAME}.yamlYAML ファイルに次の内容を貼り付けます。
--- terraform_backend_defaults: type: gcs configuration: bucket: BUCKET_NAME vars: deployment_name: A4_DEPLOYMENT_FILE_NAME project_id: A4_RESERVATION_PROJECT_ID region: A4_REGION zone: A4_ZONE a4h_reservation_name: A4_RESERVATION_NAME a4h_cluster_size: 1ファイルを保存して終了するには、Ctrl+O > Enter > Ctrl+X の順に押します。
Slurm クラスタをプロビジョニングする
Slurm クラスタをプロビジョニングするには、次のデプロイ コマンドを実行します。このコマンドは、examples/machine-learning/a4-highgpu-8g/a4high-slurm-blueprint.yaml ブループリント ファイルを使用して Slurm クラスタをプロビジョニングします。デフォルトでは、このブループリントは、ビルド済みの Advanced Compute Images を使用するコンピューティング インスタンス(Compute Engine instances)をデプロイします。デプロイするプリインストールされたドライバと構成ツールの詳細については、Advanced Compute Images の概要をご覧ください。
Cloud Shell で、gcluster deploy コマンドを使用してクラスタの作成を開始します。
./gcluster deploy -d ${A4_DEPLOYMENT_FILE_NAME}.yaml examples/machine-learning/a4-highgpu-8g/a4high-slurm-blueprint.yaml --auto-approve
クラスタに接続する
デプロイ後、 Google Cloud コンソールに接続してクラスタを表示します。
Google Cloud コンソールで、[Compute Engine] > [VM インスタンス] ページに移動します。
ログインノード(
a4high-login-001など)を見つけます。[SSH] をクリックして接続します。
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。
Slurm クラスタを破棄する
リソースが不要になったら、クリーンアップすることをおすすめします。Slurm クラスタを破棄すると、プロビジョニングされたすべてのリソース(Managed Lustre インスタンスと、そこに保存されているすべてのデータを含む)が削除されます。
破棄のコマンドを実行する前に、Cluster Toolkit ディレクトリのルートに移動します。デフォルトでは、
DEPLOYMENT_FOLDERは Cluster Toolkit ディレクトリのルートにあります。gcluster destroyコマンドを使用してクラスタを破棄します。./gcluster destroy DEPLOYMENT_FOLDER --auto-approve
DEPLOYMENT_FOLDERは、デプロイ フォルダの名前に置き換えます。通常はDEPLOYMENT_NAMEと同じです。
破棄が完了すると、次のようなメッセージが表示されます。
Destroy complete! Resources: xx destroyed.
ストレージ バケットの削除
前のコマンドがエラーなしで終了したことを確認してから、Cloud Storage バケットを削除します。
gcloud storage buckets delete gs://${BUCKET_NAME}
トラブルシューティング
エラー: ストレージが残っていないため、Cloud Shell はクラスタをプロビジョニングできません。
このエラーは、Cloud Shell を頻繁に使用していて、ストレージ容量が不足している場合に表示されることがあります。
この問題を解決するには、Cloud Shell を無効にするかリセットするをご覧ください。
エラー: クラスタ名またはブループリント名がすでに存在します。
プロジェクトで、このチュートリアルで使用したものとまったく同じファイル名が使用されていた場合に、このエラーが表示されることがあります。たとえば、組織内の別のユーザーがこのチュートリアルをエンドツーエンドで実行した場合などです。
この問題を解決するには、チュートリアルをもう一度実行して、デプロイ ファイルの一意の名前を選択し、新しいデプロイ ファイルを使用して Slurm クラスタのプロビジョニング コマンドを再実行します。