建立叢集

如要使用 Gemini Enterprise Agent Platform 訓練叢集,請洽詢業務代表。

本頁面提供直接透過 API 建立及管理訓練叢集的方法。您將瞭解如何在 JSON 檔案中定義叢集的完整設定,包括登入節點、A4 等高效能 GPU 分區,以及 Slurm 協調器設定。此外,您也會瞭解如何使用 curl 和 REST API 呼叫部署這項設定、建立叢集,以及透過 GET、LIST、UPDATE 和 DELETE 作業管理叢集的生命週期。

定義叢集設定

建立 JSON 檔案,定義訓練叢集的完整設定。

如果組織政策禁止在運算執行個體上使用公開 IP 位址,請使用 enable_public_ips: false 參數部署訓練叢集,並透過 Cloud NAT 輸出網際網路。

佈建訓練叢集的第一步,是在 JSON 檔案中定義完整設定。這個檔案是叢集的藍圖,會指定叢集名稱、網路設定,以及登入和 worker 節點的硬體等所有項目。

以下提供幾個完整的 JSON 設定檔,可做為各種常見用途的實用範本。請參閱這份清單,找出最符合您需求的範例,並以此為起點。

每個範例後方都會詳細說明該設定使用的重要參數。

僅限 GPU 搭配 Filestore

這是標準設定。這項設定會提供 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"
    }
  }
}

GPU 搭配 Filestore 和 Managed Lustre

這項進階設定除了標準 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 參數,並執行 prolog 和 epilog 指令碼,自動設定及清理工作,精細控管 Slurm。參數可以設定為整個叢集、單一分區或單一節點集區。

共有三個設定對應,每個 slurm.conf 記錄各有一個:

  • Slurm 規格中的 config,用於叢集層級設定
  • 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 詞彙會顯示複合形式:裸詞彙會開啟標記,且詞彙會以半形逗號分隔。分區對應會限制工作執行階段和預設記憶體,但僅限 cpu 分區,而 node_sets 項目會標示該集區的節點,以便工作使用 --constraint 選取這些節點。

在 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:要建立叢集的 Google Cloud 專案 ID。
  • REGION:叢集及其資源的 Google Cloud 區域。
  • ZONE:要佈建叢集資源的 Google Cloud 可用區。
  • 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:您的 Google Cloud 專案 ID。
  • REGION:叢集及其資源所在的 Google Cloud 區域。
  • NETWORK:用於叢集資源的虛擬私有雲網路。
  • ZONE:叢集及其資源的 Google Cloud 可用區。
  • SUBNETWORK:要用於叢集資源的子網路。

節點集區設定

下列參數用於定義登入節點和 worker 節點的節點集區。

常見節點集區設定

  • ID:叢集內節點集區的專屬 ID (例如「login」、「a4」、「cpu」)。
  • PROVISIONING_MODEL:worker 節點的佈建模式 (例如 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/IMAGE 或 projects/IMAGE_PROJECT/global/images/family/IMAGE_FAMILY )。如果省略,節點集區會使用其機器類型的目前預設映像檔,該映像檔會隨著時間更新。設定後,節點集區就會保留在特定映像檔上。變更節點集區的映像檔會重新建立節點。

額外儲存空間設定

  • FILESTORES (對應 node_pools 物件內的 filestores):預先存在的 Filestore 執行個體清單,用於掛接至節點集區,以便共用檔案存取權。
  • LUSTRES (對應 node_pools 物件內的 lustres):預先存在的 Lustre 執行個體清單,可掛接至節點集區,用於高效能檔案存取。

Worker 專屬設定

  • ACCELERATOR_TYPE:要附加至 worker 節點的對應 GPU 加速器。支援的值如下:
    • NVIDIA_H100_80GB
    • NVIDIA_H100_MEGA_80GB
    • NVIDIA_H200_141GB
    • NVIDIA_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):預先存在的 Filestore 執行個體完整資源名稱,要掛接為 /home 目錄。
  • LOGIN_NODE_POOL_ID (對應至 login_node_pool_id):應做為登入節點的節點集區 ID。
  • partitions:分區物件清單,每個物件都需要 id 和 node_pool_ids 清單。
  • default_partition_id (選用):未明確指定分區時,用於執行 Slurm 工作的分區 id (例如在沒有 --partition 旗標的情況下執行 sbatch)。如未設定,分區清單中的第一個分區會成為預設分區,因此重新排序清單會變更預設分區。

進階 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= 行。每個節點集區最多只能有一個項目,且集區必須是叢集的運算集區,而非登入集區。

在這三種情況下,鍵都是 SchedMD 文件中的 Slurm 參數名稱,不區分大小寫,且會忽略底線,因此 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 服務帳戶。 叢集建立後,即無法更新這個欄位。

後續步驟

使用運作中的永久訓練叢集,執行機器學習工作負載。