本頁面提供直接透過 API 建立及管理訓練叢集的方法。您將瞭解如何定義叢集的完整設定,包括登入節點、A4 等高效能 GPU 分區,以及 JSON 檔案中的 Slurm 調度器設定。此外,本文也說明如何使用 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 設定: 示範如何在叢集、分割區或節點集區範圍設定
slurm.conf參數,以及執行序前和序後指令碼。
每個範例後方都會詳細說明該特定設定中使用的重要參數。
僅限搭配 Filestore 使用 GPU
這是標準設定。這個執行個體會提供 Filestore 執行個體,做為叢集的 /home 目錄,適合一般用途和儲存使用者資料。
以下範例顯示 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 }, "labels": { "example-key": "example-value" } }, { "id": "a4", "machine_spec": { "machine_type": "a4-highgpu-8g", "accelerator_type": "NVIDIA_B200", "accelerator_count": 8, "reservation_affinity": { "reservationAffinityType": "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 }, "labels": { "example-key": "example-value" } } ], "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
這個進階設定除了標準 Filestore 執行個體外,還包含高效能 Lustre 檔案系統。如果訓練工作需要以高處理量存取大型資料集,請選擇這個選項。
如需參數清單,請參閱「參數參考資料」。
{ "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 }, "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": { "reservationAffinityType": "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", "accelerator_count": 8, "reservation_affinity": { "reservationAffinityType": "RESERVATION_AFFINITY_TYPE", "key": "compute.googleapis.com/reservation-name", "values": [ "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME" ] } }, "provisioning_model": "PROVISIONING_MODEL", "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 檔案中定義完整設定。這個檔案是叢集的藍圖,可指定所有項目,包括叢集名稱、聯播網設定,以及登入和 worker 節點的硬體。
如需參數清單,請參閱「參數參考資料」。
{ "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 設定
本範例會依名稱設定 slurm.conf 參數,並執行序言和結尾指令碼,自動設定及清除工作,精細控管 Slurm。參數可針對整個叢集、單一分割區或單一節點集區設定。
共有三張設定對應表,每張對應一個 slurm.conf 記錄:
config,在 Slurm 規格中設定叢集範圍設定config在分割區上- 節點集區的
node_sets項目
如要瞭解參數名稱、值和遭拒參數的規則,請參閱「Slurm 設定對應」。
您不必在建立時就設定這些項目,您可以在執行中的叢集上變更這三張對應表,不必重新啟動節點或中斷佇列工作。請參閱「更新 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", "config": { "PriorityType": "priority/multifactor", "PriorityWeightAge": "1000", "PriorityWeightFairshare": "10000", "PreemptType": "preempt/partition_prio", "PreemptMode": "SUSPEND,GANG", "SchedulerParameters": "bf_continue,bf_window=1440,bf_resolution=600", "AccountingStorageEnforce": "limits,qos" }, "prolog_bash_scripts": [ "#!/bin/bash\necho 'Prolog script running'" ], "epilog_bash_scripts": [ "#!/bin/bash\necho 'Epilog script running'" ], "partitions": [ { "id": "cpu", "node_pool_ids": [ "cpu" ], "config": { "MaxTime": "4-00:00:00", "DefMemPerCPU": "4096", "PriorityTier": "20" } } ], "node_sets": [ { "node_pool_id": "cpu", "config": { "Weight": "10", "Features": "cpu,spot" } } ], "login_node_pool_id": "login" } } }
叢集範圍地圖會設定多重因素優先順序、分割區優先順序搶占和 SchedulerParameters,其中的 bf_continue 詞組會顯示複合形式:裸露詞組會開啟標記,詞組則以半形逗號分隔。分割區地圖會限制 分割區的工作執行階段和預設記憶體,並將 node_sets 項目標籤集區的節點,以便工作使用 --constraint 選取這些節點。cpu
在 JSON 檔案中定義叢集後,請使用下列 REST API 指令部署及管理叢集。範例使用 gcurl 別名,這是與 API 端點互動時,方便又經過驗證的捷徑。這些指令涵蓋完整生命週期,從最初部署叢集到更新叢集、取得叢集狀態、列出所有叢集,以及最終刪除叢集,全都包含在內。
驗證
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:要建立叢集的 Cloud de Confiance by S3NS 專案 ID。
- REGION:叢集及其資源的 Cloud de Confiance by S3NS 區域。
- ZONE:叢集資源的佈建 Cloud de Confiance by S3NS 區域。
- CLUSTER_ID:訓練叢集的專屬 ID,也會用來做為相關資源的命名前置字元。
執行建立指令
現在,請執行下列 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:您的 Cloud de Confiance by S3NS 專案 ID。
- REGION:叢集及其資源所在的 Cloud de Confiance by S3NS 區域。
- NETWORK:用於叢集資源的虛擬私有雲網路。
- ZONE:叢集及其資源的 Cloud de Confiance by S3NS 可用區。
- SUBNETWORK:叢集資源要使用的子網路。
節點集區設定
下列參數用於定義登入和工作節點的節點集區。
常見節點集區設定
-
ID:叢集內節點集區的專屬 ID (例如「
login」、「a4」、「cpu」)。 -
PROVISIONING_MODEL:工作節點的佈建模型 (例如
ON_DEMAND、SPOT、RESERVATION、FLEX_START)。 -
MACHINE_TYPE:worker 節點的機型 (例如
a3-highgpu-8g、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:布林值 (
true或false),用於判斷登入節點是否具有公開 IP 位址。 -
BOOT_DISK_TYPE:登入節點的開機磁碟類型 (例如
pd-standard、pd-ssd)。 - BOOT_DISK_SIZE_GB:登入節點的開機磁碟大小 (GB)。
- LABELS:用來標記節點集區的一組鍵/值組合。
-
NODE_IMAGE (對應於
node_pools物件內的node_image):節點集區節點開機時使用的 VM 映像檔,可以是完整映像檔或映像檔系列資源路徑 (例如projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY)。如果省略此項目,節點集區會使用機型目前的預設映像檔,這項設定會隨著時間演進。設定為將節點集區保留在特定映像檔上。變更節點集區的映像檔會重新建立節點。
額外儲存空間設定
-
FILESTORES (對應於
node_pools物件內的filestores):要掛接至節點集區的現有 Filestore 執行個體清單,用於共用檔案存取權。 -
LUSTRES (對應於
node_pools物件內的lustres):要掛接至節點集區的現有 Lustre 執行個體清單,用於存取高效能檔案。
員工專屬設定
-
ACCELERATOR_TYPE:要連結至工作站節點的對應 GPU 加速器。
支援的值如下:
NVIDIA_H100_80GBNVIDIA_H100_MEGA_80GBNVIDIA_H200_141GBNVIDIA_B200
- ACCELERATOR_COUNT:要附加至每個 worker 節點的加速器數量。
-
RESERVATION_AFFINITY_TYPE (對應至
machine_spec.reservation_affinity.reservationAffinityType):節點集區的預留項目相依性。這項參數必須是SPECIFIC_RESERVATION,這是唯一支援的值。使用SPECIFIC_RESERVATION時,您必須在machine_spec.reservation_affinity.values中指定預留項目。 -
RESERVATION_NAME:要用於節點集區的預留項目名稱。這會用於
machine_spec.reservation_affinity.values中提供的完整預留項目資源名稱,例如projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION_NAME。如果 RESERVATION_AFFINITY_TYPE 為SPECIFIC_RESERVATION,則必須提供預留項目。
自動調度管理工具和儲存空間設定
這些欄位定義在 JSON 檔案的 orchestrator_spec.slurm_spec 區塊中。
核心 Slurm 和儲存空間設定
-
HOME_DIRECTORY_STORAGE (對應至
home_directory_storage):要掛接為/home目錄的現有 Filestore 執行個體完整資源名稱。 -
LOGIN_NODE_POOL_ID (對應至
login_node_pool_id):應做為登入節點的節點集區 ID。 -
partitions:分割區物件清單,每個物件都需要id和node_pool_ids清單。 -
default_partition_id(選用):id未明確指定分割區時 (例如執行sbatch時未加上--partition旗標),用於執行 Slurm 工作的分割區。如果不設定這項政策,分區清單中的第一個分區會成為預設分區,因此重新排序清單會變更預設分區。
進階 Slurm 設定
-
prolog_bash_scripts:字串清單,每個字串都包含要在工作開始前執行的完整 Bash 指令碼內容。 -
epilog_bash_scripts:字串清單,每個字串都包含 Bash 指令碼的完整內容,會在工作完成後執行。 -
config、partitions[].config和node_sets:依名稱設定的 Slurm 參數。請參閱「Slurm 設定對應」。 -
scheduling和accounting:已遭取代。這兩個物件會公開一組固定的優先順序、搶占和會計參數,每個參數都可以在叢集範圍的config對映中依名稱設定 (priority_type為"PriorityType"、preempt_mode為"PreemptMode",依此類推)。使用這些函式的叢集仍可正常運作,但新叢集應使用config,因為這個函式支援的slurm.conf參數比這個子集多得多。
Slurm 設定對應
Slurm 參數會依名稱設定在三個對應中,每個對應各有一個 slurm.conf
記錄:
-
config:叢集範圍設定,以全域Key=Value行的形式編寫。 -
partitions[].config:一個分區的設定,以該分區PartitionName=行的額外配對形式撰寫。 -
node_sets:物件清單,每個物件都有node_pool_id和config地圖。這些設定會以額外配對的形式,寫入該節點集區節點的NodeName=行。每個節點集區最多只能有一個項目,且集區必須是叢集的運算集區,而非登入集區。
在這三種情況下,鍵都是 Slurm 參數名稱,如 SchedMD 文件所述,不區分大小寫且會忽略底線,因此 DefMemPerCPU、defmempercpu 和 def_mem_per_cpu 都代表相同的參數。值會以 slurm.conf 寫入的方式寫入,包括以逗號分隔的清單 (例如 "PreemptMode": "SUSPEND,GANG") 和複合值 (例如 "SchedulerParameters": "bf_window=1440,bf_resolution=600")。
每個對應項都支援適用於其記錄的 slurm.conf 參數子集,而非所有參數。如果需要不支援的參數,請與 Gemini Enterprise Agent Platform 訓練叢集聯絡人聯絡。
如果參數在您設定的範圍內不受支援,或是參數值不合法,系統會在您提出要求時拒絕,並在錯誤訊息中指出參數名稱。不會無聲無息地捨棄任何內容。部分參數會因特定原因遭到拒絕:
-
這項服務會管理節點健康狀態檢查和工作重新排隊,因此無法設定
HealthCheckProgram、HealthCheckInterval、HealthCheckNodeState和RequeueExit。 -
Prolog和Epilog是透過prolog_bash_scripts和epilog_bash_scripts設定。 -
slurmdbd.conf參數 (例如StorageHost和PurgeJobAfter) 無法設定:會計資料庫是由服務管理。 -
在分割區範圍內,
Default會遭到拒絕。預設分割區是叢集範圍的選項,使用default_partition_id設定。
執行階段設定
這些欄位定義在 JSON 檔案的 runtime_spec 區塊中。
-
service_account:叢集在執行任何工作負載時使用的預設服務帳戶。如未指定,系統會使用預設的 Compute Engine 服務帳戶。 叢集建立後,這個欄位就無法更新。
後續步驟
使用持續運作的訓練叢集,執行機器學習工作負載。
- 在叢集上執行工作:提交
CustomJob,在持續性叢集上執行訓練工作。 - 使用 Gemini Enterprise Agent Platform Pipelines 自動調度管理訓練作業:如要建立可重複執行的正式版工作流程,請使用 Agent Platform Pipelines 將作業提交程序自動化。
- 查看叢集:使用 Cloud de Confiance 控制台或 Agent Platform API,列出專案中的現有叢集、檢查狀態,以及查看設定詳細資料。
- 變更叢集:更新現有叢集的設定,例如節點數量或 Slurm 分割區。
- 刪除叢集,停止產生費用: 訓練叢集會持續運作,並在運作期間產生費用。