このページでは、トレーニング クラスタを作成して管理するための API ドリブン方式について説明します。ログインノード、A4 などの高性能 GPU パーティション、Slurm オーケストレーターの設定など、クラスタの完全な構成を JSON ファイル内で定義する方法について説明します。また、curl と REST API 呼び出しを使用してこの構成をデプロイし、GET、LIST、UPDATE、DELETE オペレーションでクラスタを作成してライフサイクルを管理する方法の説明も含まれています。
クラスタ構成を定義する
トレーニング クラスタの完全な構成を定義する JSON ファイルを作成します。
組織のポリシーでコンピューティング インスタンスのパブリック IP アドレスが禁止されている場合は、enable_public_ips: false パラメータを使用してトレーニング クラスタをデプロイし、インターネットの下り(外向き)に Cloud NAT を使用します。
トレーニング クラスタをプロビジョニングする最初の手順は、JSON ファイルで完全な構成を定義することです。このファイルはクラスタのブループリントとして機能し、クラスタの名前やネットワーク設定からログインノードとワーカーノードのハードウェアまで、すべてを指定します。
次のセクションでは、さまざまな一般的なユースケースの実用的なテンプレートとして機能する、完全な JSON 構成ファイルをいくつか示します。このリストを参照して、ニーズに最も近い例を見つけ、出発点として使用してください。
Filestore のみを使用する GPU: 汎用 GPU トレーニングの標準構成。
Filestore と Managed Lustre を使用した GPU: I/O 負荷の高いジョブ向けの高度な設定。
起動スクリプトを使用した GPU: 起動時にノードでカスタム コマンドを実行する方法を示します。
CPU のみのクラスタ: CPU リソースのみを使用する基本構成。
高度な Slurm 構成を使用した CPU: カスタム Slurm スケジューラ設定を示す例。
各例の後に、その特定の構成で使用される主なパラメータについて詳しく説明します。
Filestore のみを使用した GPU
これが標準の構成です。クラスタの /home ディレクトリとして機能する Filestore インスタンスを提供します。これは、一般的な用途やユーザーデータの保存に適しています。
次の例は、gpu-filestore.json の内容を示しています。この仕様により、GPU パーティションを含むクラスタが作成されます。これをテンプレートとして使用し、ニーズに合わせて machineType や nodeCount などの値を変更できます。
パラメータの一覧については、パラメータ リファレンスをご覧ください。
{ "display_name": "DISPLAY_NAME", "network": { "network": "projects/PROJECT_ID/global/networks/NETWORK", "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK" }, "node_pools": [ { "id": "login", "machine_spec": { "machine_type": "n2-standard-8" }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "enable_public_ips": true, "zone": "ZONE", "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 200 }, }, { "id": "a4", "machine_spec": { "machine_type": "a4-highgpu-8g", "accelerator_type": "NVIDIA_B200", "provisioning_model": "RESERVATION", "accelerator_count": 8, "reservation_affinity": { "reservationAffinityType": "RESERVATION_AFFINITY_TYPE", "key": "compute.googleapis.com/reservation-name", "values": [ "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION" ] } }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "enable_public_ips": true, "zone": "ZONE", "boot_disk": { "boot_disk_type": "hyperdisk-balanced", "boot_disk_size_gb": 200 }, } ], "orchestrator_spec": { "slurm_spec": { "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE", "partitions": [ { "id": "a4", "node_pool_ids": [ "a4" ] } ], "login_node_pool_id": "login" } } } }
Filestore と Managed Lustre を使用した GPU
この高度な構成には、高パフォーマンスの Lustre ファイル システムに加えて、標準の Filestore インスタンスが含まれています。トレーニング ジョブで大規模なデータセットへの高スループット アクセスが必要な場合は、このオプションを選択します。
パラメータの一覧については、パラメータ リファレンスをご覧ください。
{ "display_name": "DISPLAY_NAME", "network": { "network": "projects/PROJECT_ID/global/networks/NETWORK", "subnetwork": "projects/PROJECT_ID/regions/asia-sREGION/subnetworks/SUBNETWORK" }, "node_pools": [ { "id": "login", "machine_spec": { "machine_type": "n2-standard-8" }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "enable_public_ips": true, "zone": "ZONE", "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 200 }, "lustres": [ "projects/PROJECT_ID/locations/ZONE/instances/LUSTRE" ] }, { "id": "a4", "machine_spec": { "machine_type": "a4-highgpu-8g", "accelerator_type": "NVIDIA_B200", "accelerator_count": 8, "reservation_affinity": { "reservation_affinity_type": RESERVATION_AFFINITY_TYPE, "key": "compute.googleapis.com/reservation-name", "values": [ "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME" ] } }, "provisioning_model": "RESERVATION", "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "enable_public_ips": true, "zone": "ZONE", "boot_disk": { "boot_disk_type": "hyperdisk-balanced", "boot_disk_size_gb": 200 }, "lustres": [ "projects/PROJECT_ID/locations/ZONE/instances/LUSTRE" ] } ], "orchestrator_spec": { "slurm_spec": { "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE", "partitions": [ { "id": "a4", "node_pool_ids": [ "a4" ] } ], "login_node_pool_id": "login" } } }
起動スクリプトを使用した GPU
この例では、ノードプールにカスタム スクリプトを追加する方法を示します。このスクリプトは、起動時にそのプール内のすべてのノードで実行されます。これを構成するには、一般的な設定に加えて、ノードプールの定義に関連するフィールドを追加します。パラメータとその説明の一覧については、パラメータ リファレンスをご覧ください。
{ "display_name": "DISPLAY_NAME", "network": { "network": "projects/PROJECT_ID/global/networks/NETWORK" , "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK" }, "node_pools": [ { "id": "login", "machine_spec": { "machine_type": "n2-standard-8" }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "enable_public_ips": true, "zone": "ZONE", "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 200 }, "startup_script" : "#Example script\nsudo mkdir -p /data\necho 'Script Finished'\n", }, { "id": "a4", "machine_spec": { "machine_type": "a4-highgpu-8g", "accelerator_type": "NVIDIA_B200", "provisioning_model": "RESERVATION_NAME", "accelerator_count": 8, "reservation_affinity": { "reservationAffinityType": "RESERVATION_AFFINITY_TYPE", "key": "compute.googleapis.com/reservation-name", "values": [ "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME" ] } }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "enable_public_ips": true, "zone": "ZONE", "boot_disk": { "boot_disk_type": "hyperdisk-balanced", "boot_disk_size_gb": 200 }, "startup_script" : "#Example script\nsudo mkdir -p /data\necho 'Script Finished'\n", } ], "orchestrator_spec": { "slurm_spec": { "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE", "partitions": [ { "id": "a4", "node_pool_ids": [ "a4" ] } ], "login_node_pool_id": "login" } } } }
CPU のみのクラスタ
トレーニング クラスタ環境をプロビジョニングするには、まず JSON ファイルで完全な構成を定義する必要があります。このファイルはクラスタのブループリントとして機能し、クラスタの名前やネットワーク設定からログインノードとワーカーノードのハードウェアまで、すべてを指定します。
パラメータの一覧については、パラメータ リファレンスをご覧ください。
{ "display_name": "DISPLAY_NAME", "network": { "network": "projects/PROJECT_ID/global/networks/NETWORK", "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK" }, "node_pools": [ { "id": "cpu", "machine_spec": { "machine_type": "n2-standard-8" }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "zone": "ZONE", "enable_public_ips": true, "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 120 } }, { "id": "login", "machine_spec": { "machine_type": "n2-standard-8", } "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "zone": "ZONE", "enable_public_ips": true, "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 120 } }, ], "orchestrator_spec": { "slurm_spec": { "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE", "partitions": [ { "id": "cpu", "node_pool_ids": [ "cpu" ] } ], "login_node_pool_id": "login" } } }
高度な Slurm 構成を使用した CPU
この例では、高度なパラメータを使用して Slurm オーケストレーターをカスタマイズする方法を示します。このテンプレートは、多要素の優先度の重みの設定、ジョブのプリエンプションの構成、自動ジョブ設定とクリーンアップ用のプロローグ スクリプトとエピローグ スクリプトの実行など、ジョブ スケジューリングの動作をきめ細かく制御する必要がある場合に使用します。
パラメータの一覧については、パラメータ リファレンスをご覧ください。
{ "display_name": "DISPLAY_NAME", "network": { "network": "projects/PROJECT_ID/global/networks/NETWORK", "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNETWORK" }, "node_pools": [ { "id": "cpu", "machine_spec": { "machine_type": "n2-standard-8" }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "zone": "ZONE", "enable_public_ips": true, "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 120 } }, { "id": "login", "machine_spec": { "machine_type": "n2-standard-8" }, "scaling_spec": { "min_node_count": MIN_NODE_COUNT, "max_node_count": MAX_NODE_COUNT }, "zone": "ZONE", "enable_public_ips": true, "boot_disk": { "boot_disk_type": "pd-standard", "boot_disk_size_gb": 120 } } ], "orchestrator_spec": { "slurm_spec": { "home_directory_storage": "projects/PROJECT_ID/locations/ZONE/instances/FILESTORE", "accounting": { "accounting_storage_enforce": "ACCOUNTING_STORAGE_ENFORCE" }, "scheduling": { "priority_type": "PRIORITY_TYPE", "priority_weight_age": PRIORITY_WEIGHT_AGE, "priority_weight_assoc": PRIORITY_WEIGHT_ASSOC, "priority_weight_fairshare": PRIORITY_WEIGHT_FAIRSHARE, "priority_weight_job_size": PRIORITY_WEIGHT_JOB_SIZE, "priority_weight_partition": PRIORITY_WEIGHT_PARTITION, "priority_weight_qos": PRIORITY_WEIGHT_QOS, "priority_weight_tres": "PRIORITY_WEIGHT_TRES", "preempt_type": "PREEMPT_TYPE", "preempt_mode": "PREEMPT_MODE", "preempt_exempt_time": "PREEMPT_EXEMPT_TIME" }, "prolog_bash_scripts": [ "#!/bin/bash\necho 'First prolog script running'", "#!/bin/bash\necho 'Second prolog script running'" ], "epilog_bash_scripts": [ "#!/bin/bash\necho 'Epilog script running'" ] "partitions": [ { "id": "cpu", "node_pool_ids": [ "cpu" ] } ], "login_node_pool_id": "login" } } }
クラスタが JSON ファイルで定義されたら、次の REST API コマンドを使用してクラスタをデプロイして管理します。この例では、API エンドポイントを操作するための便利な認証済みショートカットである gcurl エイリアスを使用します。これらのコマンドは、クラスタの初回デプロイから、クラスタの更新、ステータスの取得、すべてのクラスタのリスト表示、最終的なクラスタの削除まで、ライフサイクル全体をカバーしています。
認証
alias gcurl='curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json"'
JSON ファイルを作成する
JSON ファイル(例: @cpu-cluster.json)を作成して、モデル トレーニング クラスタの構成を指定します。
クラスタをデプロイする
JSON 構成ファイルを作成したら、REST API を使用してクラスタをデプロイできます。
環境変数を設定する
コマンドを実行する前に、次の環境変数を設定します。これにより、API コマンドがクリーンになり、管理が容易になります。
- PROJECT_ID: クラスタが作成される Google Cloud プロジェクト ID。
- REGION: クラスタとそのリソースの Google Cloud リージョン。
- ZONE: クラスタ リソースがプロビジョニングされる Google Cloud ゾーン。
- CLUSTER_ID: トレーニング クラスタの固有識別子。関連リソースの名前付けの接頭辞としても使用されます。
create コマンドを実行する
次の gcurl コマンドを実行します。この関数は、JSON ファイル(この例では cpu-cluster.json)をリクエスト本文として使用し、設定した環境変数を使用して API エンドポイントとクエリ パラメータを構築します。
gcurl -X POST -d @cpu-cluster.json https://REGION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/modelDevelopmentClusters?model_development_cluster_id=CLUSTER_ID
デプロイが開始されると、オペレーション ID が生成されます。この ID をコピーしてください。次のステップでクラスタを検証するために必要になります。
gcurl -X POST -d @cpu-cluster.json https://us-central1-aiplatform.googleapis.com/v1beta1/projects/managedtraining-project/locations/us-central1/modelDevelopmentClusters?model_development_cluster_id=training { "name": "projects/1059558423163/locations/us-central1/operations/2995239222190800896", "metadata": { "@type": "type.googleapis.com/google.cloud.aiplatform.v1beta1.CreateModelDevelopmentClusterOperationMetadata", "genericMetadata": { "createTime": "2025-10-24T14:16:59.233332Z", "updateTime": "2025-10-24T14:16:59.233332Z" }, "progressMessage": "Create Model Development Cluster request received, provisioning..." }
クラスタのデプロイを検証する
クラスタのデプロイ時に提供されたオペレーション ID を使用して、デプロイの進行状況を追跡します。たとえば、前述の例では 2995239222190800896 がオペレーション ID です。
gcurl https://REGION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/operations/OPERATION_ID
まとめ
gcurl POST コマンドでクラスタ構成を送信すると、クラスタのプロビジョニングが開始されます。これは非同期の長時間実行オペレーションです。API は、Operation ID を含むレスポンスをすぐに返します。この ID は、次の手順でデプロイの進行状況をモニタリングし、クラスタが正常に作成されたことを確認し、ライフサイクルを管理するために使用するため、保存することが重要です。
パラメータ リファレンス
次のリストは、構成例で使用されるすべてのパラメータの説明です。パラメータは、構成するリソースに基づいて論理グループに整理されます。
全般設定とネットワーク設定
- DISPLAY_NAME: トレーニング クラスタの一意の名前。文字列には小文字の英数字のみを使用できます。先頭は英字にする必要があり、10 文字に制限されています。
- PROJECT_ID: 実際の Google Cloud プロジェクト ID。
- REGION: クラスタとそのリソースが配置される Google Cloud リージョン。
- NETWORK: クラスタのリソースに使用する Virtual Private Cloud ネットワーク。
- ZONE: クラスタとそのリソースの Google Cloud ゾーン。
- SUBNETWORK: クラスタのリソースに使用するサブネットワーク。
ノードプールの構成
次のパラメータは、ログインノードとワーカーノードの両方のノードプールを定義するために使用されます。
一般的なノードプールの設定
-
ID: クラスタ内のノードプールの固有識別子(「
login」、「a4」、「cpu」など)。 -
MACHINE_TYPE: ワーカーノードのマシンタイプ。サポートされている値は、
a3-megagpu-8g、a3-ultragpu-8g、a4-highgpu-8gです。 -
MIN_NODE_COUNT:
MIN_NODE_COUNTはMAX_NODE_COUNTと同じである必要があります。 -
MAX_NODE_COUNT: ログイン ノードプールの場合、
MAX_NODE_COUNTはMIN_NODE_COUNTと同じである必要があります。 -
ENABLE_PUBLIC_IPS: ログインノードにパブリック IP アドレスがあるかどうかを判断するブール値(
trueまたはfalse)。 -
BOOT_DISK_TYPE: ログインノードのブートディスク タイプ(
pd-standard、pd-ssdなど)。 - BOOT_DISK_SIZE_GB: ログインノードのブートディスクのサイズ(GB)。
ワーカー固有の設定
-
ACCELERATOR_TYPE: ワーカーノードに接続する対応する GPU アクセラレータ。サポートされている値は次のとおりです。
NVIDIA_H100_MEGA_80GBNVIDIA_H200_141GBNVIDIA_B200
- ACCELERATOR_COUNT: 各ワーカーノードに接続するアクセラレータの数。
-
PROVISIONING_MODEL: ワーカーノードのプロビジョニング モデル(
ON_DEMAND、SPOT、RESERVATION、FLEX_STARTなど)。 -
RESERVATION_AFFINITY_TYPE: ノードプールの予約アフィニティ(
SPECIFIC_RESERVATIONなど)。 - RESERVATION_NAME: ノードプールに使用する予約の名前。
オーケストレーターとストレージの構成
これらのフィールドは、JSON ファイルの orchestrator_spec.slurm_spec ブロック内で定義されます。
コア Slurm とストレージの設定
-
FILESTORE(
home_directory_storageに対応):/homeディレクトリとしてマウントされる Filestore インスタンスの完全なリソース名。 -
LUSTRE(
node_poolsオブジェクト内のlustresに対応): 高パフォーマンスのファイル アクセス用にクラスタノードにマウントする既存の Managed Lustre インスタンスのリスト。 -
LOGIN_NODE_POOL_ID(
login_node_pool_idに対応): ログインノードに使用するノードプールの ID。 -
partitions: パーティション オブジェクトのリスト。各オブジェクトにはidとnode_pool_idsのリストが必要です。
Slurm の詳細設定
-
prolog_bash_scripts: 文字列のリスト。各文字列には、ジョブの開始前に実行される Bash スクリプトの完全な内容が含まれています。 -
epilog_bash_scripts: 文字列のリスト。各文字列には、ジョブの完了後に実行される Bash スクリプトの完全な内容が含まれています。 - ACCOUNTING_STORAGE_ENFORCE: ストレージ使用量のアカウンティング上限を適用します。
-
PRIORITY_TYPE: 使用するスケジューリング優先度アルゴリズム(
priority/multifactorなど)。 priority_weight_*: スケジューリング優先度の計算でさまざまな要素に重みを割り当てる整数値のセット(例:priority_weight_age、priority_weight_fairshare)。- PREEMPT_TYPE: 使用するプリエンプション プラグイン(例: preempt/partition_prio)。
-
PREEMPT_MODE: プリエンプション プラグインのモード(例:
REQUEUE)。 - PREEMPT_EXEMPT_TIME: ジョブの開始後にプリエンプトできない期間。
次のステップ
アクティブな永続トレーニング クラスタを使用して、ML ワークロードを実行します。
- クラスタでジョブを実行する:
CustomJobを送信して、永続クラスタでトレーニング ジョブを実行します。 - Vertex AI Pipelines でトレーニングをオーケストレートする: 再現性のある本番環境レベルのワークフローを実現するには、Vertex AI Pipelines を使用してジョブ送信プロセスを自動化します。
- クラスタの表示と管理: Google Cloud CLI または Google Cloud コンソールを使用して既存のクラスタを一覧表示し、ステータスを確認して構成の詳細を表示します。
- クラスタを削除して費用の発生を停止します。トレーニング クラスタは永続的であり、アクティブな間は費用が発生します。