建立叢集

如要使用 Vertex AI 訓練叢集,請與業務代表聯絡以取得存取權。

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

定義叢集設定

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

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

佈建訓練叢集的第一步,就是在 JSON 檔案中定義完整設定。這個檔案是叢集的藍圖,可指定叢集名稱、網路設定,以及登入和工作站節點的硬體。

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

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

僅限搭配 Filestore 使用 GPU

這是標準設定。這個執行個體會提供 Filestore 執行個體,做為叢集的 /home 目錄,適合一般用途和儲存使用者資料。

以下範例顯示 gpu-filestore.json 的內容。這項規格會建立具有 GPU 分區的叢集。您可以將此做為範本,並根據需求修改 machineTypenodeCount 等值。

如需參數清單,請參閱參數參考資料

 {
  "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",
        "accelerator_count": 8,
        "reservation_affinity": {
          "reservationAffinityType": "RESERVATION_AFFINITY_TYPE",
          "key": "compute.googleapis.com/reservation-name",
          "values": [
            "projects/PROJECT_ID/zones/ZONE/reservations/RESERVATION"
          ]
        }
      },
      "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
      }
    }
  ],
  "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/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",
        "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 檔案中定義完整設定。這個檔案是叢集的藍圖,可指定叢集名稱、網路設定,以及登入和工作節點的硬體等所有項目。

如需參數清單,請參閱參數參考資料

{
  "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"
    }
  }
}

CPU (採用進階 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",
      "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 指令部署及管理叢集。範例會使用 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,因為您會在後續步驟中使用這個 ID 監控部署作業進度、確認叢集是否已順利建立,以及管理叢集的生命週期。

參數參照

以下清單說明設定範例中使用的所有參數。 這些參數會根據設定的資源,整理成邏輯群組。

一般和網路設定

  • DISPLAY_NAME:訓練叢集的專屬名稱。 字串只能包含小寫英數字元,開頭須為英文字母,且長度不得超過 10 個字元。
  • PROJECT_ID:您的 Google Cloud 專案 ID。
  • REGION:叢集及其資源所在的 Google Cloud 區域。
  • NETWORK:用於叢集資源的 Virtual Private Cloud 網路。
  • ZONE:叢集及其資源的 Google Cloud 區域。
  • SUBNETWORK:叢集資源使用的子網路。

節點集區設定

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

常見節點集區設定

  • ID:叢集內節點集區的專屬 ID (例如「login」、「a4」、「cpu」)。
  • PROVISIONING_MODEL:工作站節點的佈建模型 (例如 ON_DEMANDSPOTRESERVATIONFLEX_START)。
  • MACHINE_TYPE:工作節點的機器類型。支援的值為 a3-megagpu-8ga3-ultragpu-8ga4-highgpu-8g
  • MIN_NODE_COUNTMIN_NODE_COUNT 必須與 MAX_NODE_COUNT 相同。
  • MAX_NODE_COUNT:登入節點集區的 MAX_NODE_COUNT 必須與 MIN_NODE_COUNT 相同。
  • ENABLE_PUBLIC_IPS:布林值 (truefalse),用於判斷登入節點是否具有公開 IP 位址。
  • BOOT_DISK_TYPE:登入節點的開機磁碟類型 (例如 pd-standardpd-ssd)。
  • BOOT_DISK_SIZE_GB:登入節點的開機磁碟大小 (單位為 GB)。

工作人員專屬設定

  • ACCELERATOR_TYPE:要附加至工作節點的對應 GPU 加速器。 支援的值如下:
    • NVIDIA_H100_MEGA_80GB
    • NVIDIA_H200_141GB
    • NVIDIA_B200
  • ACCELERATOR_COUNT:要附加至每個工作站節點的加速器數量。
  • 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:分區物件清單,每個物件都需要 idnode_pool_ids 清單。

進階 Slurm 設定

  • prolog_bash_scripts:字串清單,每個字串都包含要在工作開始前執行的完整 Bash 指令碼內容。
  • epilog_bash_scripts:字串清單,每個字串都包含工作完成後要執行的完整 Bash 指令碼內容。
  • ACCOUNTING_STORAGE_ENFORCE:強制執行儲存空間用量的會計限制。
  • PRIORITY_TYPE:要使用的排程優先順序演算法 (例如 priority/multifactor)。
  • priority_weight_*:一組整數值,用於在排程優先順序計算中,為不同因素指派權重 (例如 priority_weight_agepriority_weight_fairshare)。
  • PREEMPT_TYPE:要使用的搶占外掛程式 (例如 preempt/partition_prio)。
  • PREEMPT_MODE:先占外掛程式的模式 (例如 REQUEUE)。
  • PREEMPT_EXEMPT_TIME:工作開始後無法搶占的時間。

後續步驟

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