使用預設設定建立 AI 最佳化 GKE 叢集

本頁面說明如何建立自己的 AI 最佳化 Google Kubernetes Engine (GKE) 叢集,使用 A4X、A4、A3 Ultra、A3 Mega 和 A3 High (8 個 GPU) 虛擬機器 (VM),支援 AI 和機器學習工作負載。

A4X、A4、A3 Ultra、A3 Mega 和 A3 High (8 個 GPU) 系列機型可讓您執行大規模 AI/ML 叢集,並提供目標工作負載放置、進階叢集維護控制和拓撲感知排程等功能。詳情請參閱叢集管理總覽

GKE 提供單一平台介面,可執行各種工作負載,滿足貴機構的需求。包括高效能分散式預先訓練、模型微調、模型推論、應用程式服務,以及支援服務。GKE 可減輕管理多個平台的作業負擔。

選擇如何建立 AI 最佳化 GKE 叢集

下列叢集建立選項在叢集設定和工作負載排程方面,各有不同程度的便利性和彈性:

事前準備

開始之前,請確認您已完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
  • 確認您具備建立及管理 GKE 叢集和相關聯服務帳戶的必要權限:
    • Kubernetes Engine 管理員 (roles/container.admin)
    • Compute 管理員 (roles/compute.admin)
    • 儲存空間管理員 (roles/storage.admin)
    • 專案 IAM 管理員 (roles/resourcemanager.projectIamAdmin)
    • 服務帳戶管理員 (roles/iam.serviceAccountAdmin)
    • 服務帳戶使用者 (roles/iam.serviceAccountUser)
    • 服務使用情形消費者 (roles/serviceusage.serviceUsageConsumer)
    • 角色管理員 (roles/iam.roleAdmin)
    • Secret Manager 密鑰版本管理員 (roles/secretmanager.secretVersionManager)

選擇用量方案並取得容量

  1. 選擇使用選項。請根據您取得及使用 GPU 資源的方式做出選擇。詳情請參閱「選擇消耗選項」。

    選擇 GKE 的用量選項時,請考慮下列額外資訊:

  2. 取得容量。取得容量的程序因每個用量選項而異。

    如要瞭解所選用量方案的程序,請參閱「容量總覽」。

需求條件

AI 最佳化 GKE 叢集必須符合下列條件:

  • 如果是 A4X,請務必使用 GKE 1.33.4-gke.1036000 以上版本 (適用於 1.33 以上版本)。如果是 1.32,請使用 GKE 1.32.8-gke.1108000 以上版本。這些版本可確保 A4X 使用下列項目:

    • R580,這是 A4X 的最低 GPU 驅動程式版本。
    • 預設啟用的「以驅動程式為基礎的連貫記憶體管理」(CDMM)。NVIDIA 建議 Kubernetes 叢集啟用這個模式,以解決記憶體過度回報的問題。CDMM 可讓驅動程式管理 GPU 記憶體,而非作業系統 (OS)。這種做法可協助您避免 OS 線上化 GPU 記憶體,並將 GPU 記憶體公開為 OS 的非統一記憶體存取 (NUMA) 節點。啟用 CDMM 時,系統不支援多執行個體 GPU。如要進一步瞭解 CDMM,請參閱「硬體和軟體支援」。
    • 建議啟用 GPUDirect RDMA,讓 A4X 節點集區使用 A4X 的網路功能。
  • 請務必使用最低 GPU 驅動程式版本,視機器類型而定:

    • A4X:A4X VM 中的 GB200 GPU 至少須使用 R580 GPU 驅動程式版本。請參閱先前提及的版本需求。
    • A4:A4 VM 中的 B200 GPU 至少須使用 R570 GPU 驅動程式版本。根據預設,GKE 會自動在執行 A4 最低必要版本 (1.32.1-gke.1729000 以上版本) 的所有 A4 節點上,安裝這個驅動程式版本。
    • A3 Ultra:A3 Ultra VM 中的 H200 GPU 至少需要 R550 GPU 驅動程式版本,GKE 1.31 提供 latest 驅動程式版本。如果是 A3 Ultra,您必須使用 GKE 1.31 設定 gpu-driver-version=latest。如果是 GKE 1.31.5-gke.1169000 以上版本,GKE 預設會在 A3 Ultra 節點上自動安裝 R550 GPU 驅動程式版本。
  • 如果是 A3 Ultra 節點集區,您必須將磁碟類型設為 hyperdisk-balanced

  • 如要使用 GPUDirect RDMA,請視機器類型使用下列最低版本:

    • A4X:請參閱上述版本需求。
    • A4:請使用 1.32.2-gke.1475000 以上版本。
    • A3 Ultra:使用 1.31.4-gke.1183000 以上版本。
  • 如要使用 GPUDirect RDMA,GKE 節點必須使用 Container-Optimized OS 節點映像檔。不支援 Ubuntu 和 Windows 節點映像檔。

  • 您必須使用取決於預留項目的佈建模式,才能建立搭載 A4X 的叢集。系統不支援其他佈建模型。

建立叢集

請按照下列操作說明,使用 Cluster ToolkitXPK 建立叢集。

使用 Cluster Toolkit 建立叢集

本節將逐步說明如何建立叢集,確保專案遵循最佳做法,並符合 AI 適用 GKE 叢集的需求

A4X

  1. 啟動 Cloud Shell。您可以使用其他環境,但我們建議使用 Cloud Shell,因為 Cluster Toolkit 的依附元件已預先安裝。如不想使用 Cloud Shell,請按照安裝依附元件的指示操作,準備其他環境。
  2. 從 Git 存放區複製 Cluster Toolkit:

    cd ~
    git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.git
    
  3. 安裝 Cluster Toolkit:

    cd cluster-toolkit && git checkout main && make
    
  4. 建立 Cloud Storage bucket,儲存 Terraform 部署作業的狀態:

    gcloud storage buckets create gs://BUCKET_NAME \
        --default-storage-class=STANDARD \
        --project=PROJECT_ID \
        --location=COMPUTE_REGION_TERRAFORM_STATE \
        --uniform-bucket-level-access
    gcloud storage buckets update gs://BUCKET_NAME --versioning
    

    請替換下列變數:

    • BUCKET_NAME:新 Cloud Storage bucket 的名稱。
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • COMPUTE_REGION_TERRAFORM_STATE:要儲存 Terraform 部署作業狀態的運算區域。
  5. examples/gke-a4x/gke-a4x-deployment.yaml 藍圖中 (位於 GitHub 存放區),填入 terraform_backend_defaultsvars 區段中的下列設定,以符合部署作業的特定值:

    • DEPLOYMENT_NAME:部署作業的專屬名稱,長度必須介於 6 到 30 個字元之間。如果部署作業名稱在專案內重複,叢集建立作業就會失敗。預設值為 gke-a4x
    • BUCKET_NAME:您在上一個步驟中建立的 Cloud Storage bucket 名稱。
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • COMPUTE_REGION:叢集的運算區域。
    • COMPUTE_ZONE:A4X 機器的節點集區運算區域。請注意,這個區域應與預留項目中可用的機器區域相符。
    • NODE_COUNT:叢集節點集區中的 A4X 節點數量,必須為 18 個節點以下。建議使用 18 個節點,透過 NVLink 網域取得一個子區塊的 1x72 GPU 拓撲。
    • IP_ADDRESS/SUFFIX:您要允許連線至叢集的 IP 位址範圍。這個 CIDR 區塊必須包含您要用來呼叫 Terraform 的機器 IP 位址。詳情請參閱「已獲授權的網路運作方式」。
    • 視您是否要在佈建節點集區時,指定保留項目中的特定區塊extended_reservation 欄位可使用下列其中一個值:

      • 如要在預留項目中的任何位置放置節點集區,請提供預留項目的名稱 (RESERVATION_NAME)。
      • 如要指定預訂中的特定區塊,請使用下列格式的預訂和區塊名稱:

        RESERVATION_NAME/reservationBlocks/BLOCK_NAME
        

      如要查看預訂中可用的區塊,請參閱「查看預訂拓撲」。

    • 為系統和 A4X 節點集區的每個節點設定開機磁碟大小。所需磁碟大小取決於用途。舉例來說,如果您使用磁碟做為快取,以減少重複提取映像檔的延遲時間,可以設定較大的磁碟大小,以容納架構、模型或容器映像檔:

      • SYSTEM_NODE_POOL_DISK_SIZE_GB:系統節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 200
      • A4X_NODE_POOL_DISK_SIZE_GB:A4X 節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 100

    如要修改進階設定,請編輯 examples/gke-a4x/gke-a4x.yaml 檔案。

  6. 您也可以選擇在叢集上啟用叢集健康狀態掃描器 (CHS)。CHS 會執行測試,確認叢集是否已準備好執行工作負載,藉此檢查 GPU 叢集的健康狀態。如要啟用 CHS,請在 examples/gke-a4x/gke-a4x-deployment.yaml 檔案中進行下列變更:

    • vars 區塊中,將 enable_periodic_health_checks 欄位設為 true

    • 根據預設,健康檢查會在太平洋標準時間每週日凌晨 12:00 執行。如要變更這項設定,請在 vars 區塊中,以 cron 格式health_check_schedule 欄位設為適當值。
      以 cron 格式排定時間: none * * * * * # | | | | | # | | | | day of the week (0-6) (Sunday to Saturday) # | | | month (1-12) # | | day of the month (1-31) # | hour (0-23) # minute (0-59)

  7. 產生應用程式預設憑證 (ADC),授予 Terraform 存取權。如果您使用 Cloud Shell,可以執行下列指令:

    gcloud auth application-default login
    
  8. 部署藍圖,使用 A4X 機器類型佈建 GKE 基礎架構:

    cd ~/cluster-toolkit
    ./gcluster deploy -d \
    examples/gke-a4x/gke-a4x-deployment.yaml \
    examples/gke-a4x/gke-a4x.yaml
    
  9. 出現提示時,選取「(A)pply」(套用) 部署藍圖。

    • 藍圖會建立虛擬私有雲網路、GPU RDMA 虛擬私有雲網路、服務帳戶、叢集和節點集區。
    • 為支援藍圖中的 fio-bench-job-template 工作範本,系統會建立Google Cloud buckets、網路儲存空間和永久磁碟區資源。

A4

  1. 啟動 Cloud Shell。您可以使用其他環境,但我們建議使用 Cloud Shell,因為 Cluster Toolkit 的依附元件已預先安裝。如不想使用 Cloud Shell,請按照安裝依附元件的指示操作,準備其他環境。
  2. 從 Git 存放區複製 Cluster Toolkit:

    cd ~
    git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.git
    
  3. 安裝 Cluster Toolkit:

    cd cluster-toolkit && git checkout main && make
    
  4. 建立 Cloud Storage bucket,儲存 Terraform 部署作業的狀態:

    gcloud storage buckets create gs://BUCKET_NAME \
        --default-storage-class=STANDARD \
        --project=PROJECT_ID \
        --location=COMPUTE_REGION_TERRAFORM_STATE \
        --uniform-bucket-level-access
    gcloud storage buckets update gs://BUCKET_NAME --versioning
    

    請替換下列變數:

    • BUCKET_NAME:新 Cloud Storage bucket 的名稱。
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • COMPUTE_REGION_TERRAFORM_STATE:要儲存 Terraform 部署作業狀態的運算區域。
  5. 建立叢集時需要編輯的檔案,取決於您用於部署的消耗選項。選取與用量選項的佈建模型對應的分頁。

    取決於預留項目

    examples/gke-a4/gke-a4-deployment.yaml 藍圖中 (位於 GitHub 存放區),填入 terraform_backend_defaultsvars 區段中的下列設定,以符合部署作業的特定值:

    • DEPLOYMENT_NAME:部署作業的專屬名稱,長度必須介於 6 到 30 個字元之間。如果部署作業名稱在專案內重複,叢集建立作業就會失敗。預設值為 gke-a4
    • BUCKET_NAME:您在上一個步驟中建立的 Cloud Storage bucket 名稱。
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • COMPUTE_REGION:叢集的運算區域。
    • COMPUTE_ZONE:A4 機器的節點集區運算區域。請注意,這個區域應與預留項目中可用的機器區域相符。
    • NODE_COUNT:叢集中的 A4 節點數量。
    • IP_ADDRESS/SUFFIX:您要允許連線至叢集的 IP 位址範圍。這個 CIDR 區塊必須包含您要用於呼叫 Terraform 的機器 IP 位址。詳情請參閱「已獲授權的網路運作方式」。
    • 視您是否要在佈建節點集區時,指定保留項目中的特定區塊reservation 欄位可使用下列其中一個值:

      • 如要在預留項目中的任何位置放置節點集區,請提供預留項目的名稱 (RESERVATION_NAME)。
      • 如要指定預訂中的特定區塊,請使用下列格式的預訂和區塊名稱:

        RESERVATION_NAME/reservationBlocks/BLOCK_NAME
        

      如要查看預訂中可用的區塊,請參閱「查看預訂拓撲」。

    • 為系統和 A4 節點集區的每個節點設定開機磁碟大小。所需磁碟大小取決於用途。舉例來說,如果您使用磁碟做為快取,以減少重複提取映像檔的延遲時間,可以設定較大的磁碟大小,以容納架構、模型或容器映像檔:

      • SYSTEM_NODE_POOL_DISK_SIZE_GB:系統節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 100
      • A4_NODE_POOL_DISK_SIZE_GB:A4 節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 100

    如要修改進階設定,請編輯 examples/gke-a4/gke-a4.yaml

    彈性啟動

    1. examples/gke-a4/gke-a4-deployment.yaml 藍圖中 (位於 GitHub 存放區),填入 terraform_backend_defaultsvars 區段中的下列設定,以符合部署作業的特定值:

      • DEPLOYMENT_NAME:部署作業的專屬名稱,長度必須介於 6 至 30 個字元之間。如果部署名稱在專案內重複,叢集建立作業就會失敗。預設值為 gke-a4
      • BUCKET_NAME:您在上一個步驟中建立的 Cloud Storage bucket 名稱。
      • PROJECT_ID:您的 Google Cloud 專案 ID。
      • COMPUTE_REGION:叢集的運算區域。
      • COMPUTE_ZONE:A4 機器的節點集區運算可用區。
      • 移除 static_node_count
      • IP_ADDRESS/SUFFIX:您要允許連線至叢集的 IP 位址範圍。這個 CIDR 區塊必須包含您要用於呼叫 Terraform 的機器 IP 位址。詳情請參閱「授權網路的運作方式」。
      • 移除 reservation 欄位,並將該欄位替換為 enable_flex_start: true。如要使用佇列式佈建,請在下一行新增 enable_queued_provisioning: true。詳情請參閱「使用節點集區搭配彈性啟動和排隊佈建」。
      • 為系統和 A4 節點集區的每個節點設定開機磁碟大小。所需磁碟大小取決於用途。舉例來說,如果您使用磁碟做為快取,以減少重複提取映像檔的延遲時間,可以設定較大的磁碟大小,以容納架構、模型或容器映像檔:

        • SYSTEM_NODE_POOL_DISK_SIZE_GB:系統節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 100
        • A4_NODE_POOL_DISK_SIZE_GB:A4 節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 100
    2. examples/gke-a4/gke-a4.yaml GitHub 存放區中的藍圖,進行下列變更:

      • vars 區塊中,移除 static_node_count
      • vars 區塊中,確認 version_prefix 號碼為 "1.32." 以上。如要在 GKE 中使用彈性啟動功能,叢集必須使用 1.32.2-gke.1652000 以上版本。
      • vars 區塊中,將整個 reservation 區塊 (包括 reservation 行本身) 替換為 enable_flex_start: true,並視需要替換為 enable_queued_provisioning: true
      • vars 區塊中,如果不需要排隊佈建,請移除以下程式碼:kueue_configuration_path: $(ghpc_stage("./kueue-configuration.yaml.tftpl"))
      • id: a4-pool 下方,移除下列程式碼: static_node_count: $(vars.static_node_count)
      • id: a4-pool 下方移除 reservation_affinity 區塊。將這個區塊替換為下列程式碼行:

        • enable_flex_start: $(vars.enable_flex_start)
        • auto_repair: false
        • 如要啟用佇列佈建,請新增下列額外行:
          • enable_queued_provisioning: $(vars.enable_queued_provisioning)
          • autoscaling_total_min_nodes: 0
      • id: workload-manager-install 下方,移除下列程式碼區塊:

         kueue:
            install: true
            config_path: $(vars.kueue_configuration_path)
            config_template_vars:
               num_gpus: $(a3-ultragpu-pool.static_gpu_count)
               accelerator_type: $(vars.accelerator_type)
        
        • 如要使用彈性啟動搭配佈建佇列,請執行下列步驟:

          1. gpu_nominal_quota: NOMINAL_QUOTA 新增至 vars 區塊。gpu_nominal_quota 值用於設定 ClusterQueue 規格中的 GPU nominalQuota (請參閱下方的設定 ClusterQueue 步驟)。在本範例中,只有當 GPU 要求總和小於或等於 NOMINAL_QUOTA 值時,ClusterQueue 才會允許工作負載。如要進一步瞭解 ClusterQueue,請參閱下列 Kueue 叢集佇列文件

          2. kueue 區塊更新為以下內容:

            kueue:
               install: true
               config_path: $(vars.kueue_configuration_path)
               config_template_vars:
                  num_gpus: $(vars.gpu_nominal_quota)
            
          3. kueue-configuration.yaml.tftpl 檔案的內容替換成以下內容:

            apiVersion: kueue.x-k8s.io/v1beta1
            kind: ResourceFlavor
            metadata:
               name: "default-flavor"
            ---
            apiVersion: kueue.x-k8s.io/v1beta1
            kind: AdmissionCheck
            metadata:
               name: dws-prov
            spec:
               controllerName: kueue.x-k8s.io/provisioning-request
               parameters:
                  apiGroup: kueue.x-k8s.io
                  kind: ProvisioningRequestConfig
                  name: dws-config
            ---
            apiVersion: kueue.x-k8s.io/v1beta1
            kind: ProvisioningRequestConfig
            metadata:
               name: dws-config
            spec:
               provisioningClassName: queued-provisioning.gke.io
               managedResources:
               - nvidia.com/gpu
            ---
            apiVersion: kueue.x-k8s.io/v1beta1
            kind: ClusterQueue
            metadata:
               name: "dws-cluster-queue"
            spec:
               namespaceSelector: {}
               resourceGroups:
               - coveredResources: ["nvidia.com/gpu"]
                  flavors:
                  - name: "default-flavor"
                  resources:
                  - name: "nvidia.com/gpu"
                     nominalQuota: ${num_gpus}
               admissionChecks:
               - dws-prov
            ---
            apiVersion: kueue.x-k8s.io/v1beta1
            kind: LocalQueue
            metadata:
               namespace: "default"
               name: "dws-local-queue"
            spec:
               clusterQueue: "dws-cluster-queue"
            ---
            
      • id: job-template 下方,將 node_count 變數替換為 2

    Spot

    1. examples/gke-a4/gke-a4-deployment.yaml 藍圖中 (位於 GitHub 存放區),填入 terraform_backend_defaultsvars 區段中的下列設定,以符合部署作業的特定值:

      • DEPLOYMENT_NAME:部署作業的專屬名稱,長度必須介於 6 至 30 個字元之間。如果部署名稱在專案內重複,叢集建立作業就會失敗。預設值為 gke-a4
      • BUCKET_NAME:您在上一個步驟中建立的 Cloud Storage bucket 名稱。
      • PROJECT_ID:您的 Google Cloud 專案 ID。
      • COMPUTE_REGION:叢集的運算區域。
      • COMPUTE_ZONE:A4 機器的節點集區運算可用區。
      • STATIC_NODE_COUNT:叢集中的 A4 節點數量。
      • IP_ADDRESS/SUFFIX:您要允許連線至叢集的 IP 位址範圍。這個 CIDR 區塊必須包含您要用於呼叫 Terraform 的機器 IP 位址。詳情請參閱「授權網路的運作方式」。
      • 將整個 reservation 區塊 (包括 reservation 行本身) 替換為 spot: true
      • 為系統和 A4 節點集區的每個節點設定開機磁碟大小。所需磁碟大小取決於用途。舉例來說,如果您使用磁碟做為快取,以減少重複提取映像檔的延遲時間,可以設定較大的磁碟大小,以容納架構、模型或容器映像檔:

        • SYSTEM_NODE_POOL_DISK_SIZE_GB:系統節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 100
        • A4_NODE_POOL_DISK_SIZE_GB:A4 節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 100
    2. examples/gke-a4/gke-a4.yaml GitHub 存放區中的藍圖,進行下列變更:

      • vars 區塊中,將整個 reservation 區塊 (包括 reservation 行本身) 替換為 spot: true
      • id: a4-pool 下方移除 reservation_affinity 區塊。將這個區塊替換為下列程式碼行:

        • spot: $(vars.spot)
  6. 您也可以選擇在叢集上啟用叢集健康狀態掃描器 (CHS)。CHS 會執行測試,確認叢集是否已準備好執行工作負載,藉此檢查 GPU 叢集的健康狀態。如要啟用 CHS,請在 examples/gke-a4/gke-a4-deployment.yaml 檔案中進行下列變更:

    • vars 區塊中,將 enable_periodic_health_checks 欄位設為 true

    • 根據預設,健康檢查會在太平洋標準時間每週日凌晨 12:00 執行。如要變更這項設定,請在 vars 區塊中,以 cron 格式health_check_schedule 欄位設為適當值。
      以 cron 格式排定時間: none * * * * * # | | | | | # | | | | day of the week (0-6) (Sunday to Saturday) # | | | month (1-12) # | | day of the month (1-31) # | hour (0-23) # minute (0-59)

  7. 產生應用程式預設憑證 (ADC),授予 Terraform 存取權。如果您使用 Cloud Shell,可以執行下列指令:

    gcloud auth application-default login
    
  8. 部署藍圖,使用 A4 機型佈建 GKE 基礎架構:

    cd ~/cluster-toolkit
    ./gcluster deploy -d \
    examples/gke-a4/gke-a4-deployment.yaml \
    examples/gke-a4/gke-a4.yaml
    
  9. 出現提示時,選取「(A)pply」(套用) 部署藍圖。

    • 藍圖會建立虛擬私有雲網路、GPU RDMA 虛擬私有雲網路、服務帳戶、叢集和節點集區。
    • 為支援藍圖中的 fio-bench-job-template 工作範本,系統會建立Google Cloud buckets、網路儲存空間和永久磁碟區資源。

A3 Ultra

  1. 啟動 Cloud Shell。您可以使用其他環境,但我們建議使用 Cloud Shell,因為 Cluster Toolkit 的依附元件已預先安裝。如不想使用 Cloud Shell,請按照安裝依附元件的指示操作,準備其他環境。
  2. 從 Git 存放區複製 Cluster Toolkit:

    cd ~
    git clone https://github.com/GoogleCloudPlatform/cluster-toolkit.git
    
  3. 安裝 Cluster Toolkit:

    cd cluster-toolkit && git checkout main && make
    
  4. 建立 Cloud Storage bucket,儲存 Terraform 部署作業的狀態:

    gcloud storage buckets create gs://BUCKET_NAME \
        --default-storage-class=STANDARD \
        --project=PROJECT_ID \
        --location=COMPUTE_REGION_TERRAFORM_STATE \
        --uniform-bucket-level-access
    gcloud storage buckets update gs://BUCKET_NAME --versioning
    

    請替換下列變數:

    • BUCKET_NAME:新 Cloud Storage bucket 的名稱。
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • COMPUTE_REGION_TERRAFORM_STATE:要儲存 Terraform 部署作業狀態的運算區域。
  5. 建立叢集時需要編輯的檔案,取決於您用於部署的消耗選項。選取與用量選項的佈建模型對應的分頁。

    取決於預留項目

    examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yamlGitHub 存放區的藍圖中,將 terraform_backend_defaultsvars 區段中的下列變數替換為部署作業的特定值:

    • DEPLOYMENT_NAME:部署作業的專屬名稱,長度必須介於 6 到 30 個字元之間。如果部署作業名稱在專案內有重複使用的情形,叢集建立作業就會失敗。
    • BUCKET_NAME:您在上一個步驟中建立的 Cloud Storage bucket 名稱。
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • COMPUTE_REGION:叢集的運算區域。
    • COMPUTE_ZONE:A3 Ultra 機器的節點集區運算可用區。請注意,這個區域應與預留項目中可用的機器區域相符。
    • NODE_COUNT:叢集中的 A3 Ultra 節點數量。
    • IP_ADDRESS/SUFFIX:您要允許連線至叢集的 IP 位址範圍。這個 CIDR 區塊必須包含您要用於呼叫 Terraform 的機器 IP 位址。詳情請參閱「已獲授權的網路運作方式」。
    • 視您是否要在佈建節點集區時,指定保留項目中的特定區塊reservation 欄位可使用下列其中一個值:

      • 如要在預留項目中的任何位置放置節點集區,請提供預留項目的名稱 (RESERVATION_NAME)。
      • 如要指定預訂中的特定區塊,請使用下列格式的預訂和區塊名稱:

        RESERVATION_NAME/reservationBlocks/BLOCK_NAME
        

      如要查看預訂中可用的區塊,請參閱「查看預訂拓撲」。

    • 為系統和 A3 Ultra 節點集區的每個節點設定開機磁碟大小。所需磁碟大小取決於用途。舉例來說,如果您使用磁碟做為快取,以減少重複提取映像檔的延遲時間,可以設定較大的磁碟大小,以容納架構、模型或容器映像檔:

      • SYSTEM_NODE_POOL_DISK_SIZE_GB:系統節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 100
      • A3ULTRA_NODE_POOL_DISK_SIZE_GB:A3 Ultra 節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 100

    如要修改進階設定,請編輯 examples/gke-a3-ultragpu/gke-a3-ultragpu.yaml

    彈性啟動

    1. examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yamlGitHub 存放區的藍圖中,將 terraform_backend_defaultsvars 區段中的下列變數替換為部署作業的特定值:

      • DEPLOYMENT_NAME:部署作業的專屬名稱,長度必須介於 6 至 30 個字元之間。如果部署名稱在專案內重複,叢集建立作業就會失敗。
      • BUCKET_NAME:您在上一個步驟中建立的 Cloud Storage bucket 名稱。
      • PROJECT_ID:您的 Google Cloud 專案 ID。
      • COMPUTE_REGION:叢集的運算區域。
      • COMPUTE_ZONE:A3 Ultra 機器的節點集區運算可用區。
      • 移除 static_node_count
      • IP_ADDRESS/SUFFIX:您要允許連線至叢集的 IP 位址範圍。這個 CIDR 區塊必須包含您要用於呼叫 Terraform 的機器 IP 位址。 詳情請參閱「已獲授權的網路運作方式」。
      • 移除 reservation 欄位,並將該欄位替換為 enable_flex_start: true。如要使用佇列式佈建,請在下一行新增 enable_queued_provisioning: true。詳情請參閱「使用節點集區搭配彈性啟動和排隊佈建」。
      • 為系統和 A3 Ultra 節點集區的每個節點設定開機磁碟大小。所需磁碟大小取決於用途。舉例來說,如果您使用磁碟做為快取,以減少重複提取映像檔的延遲時間,可以設定較大的磁碟大小,以容納架構、模型或容器映像檔:

        • SYSTEM_NODE_POOL_DISK_SIZE_GB:系統節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 100
        • A3ULTRA_NODE_POOL_DISK_SIZE_GB:A3 Ultra 節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 100
    2. examples/gke-a3-ultragpu/gke-a3-ultragpu.yaml 藍圖中 (位於 GitHub 存放區),進行下列變更:

      • vars 區塊中,移除 static_node_count
      • vars 區塊中,將 version_prefix 數字更新為 "1.32." 以上版本。如要在 GKE 中使用彈性啟動功能,叢集必須使用 1.32.2-gke.1652000 以上版本。
      • vars 區塊中,將整個 reservation 區塊 (包括 reservation 行本身) 替換為 enable_flex_start: true,並視需要替換為 enable_queued_provisioning: true
      • vars 區塊中,移除以下這行程式碼: kueue_configuration_path: $(ghpc_stage("./kueue-configuration.yaml.tftpl"))
      • id: a3-ultragpu-pool 下方,移除下列程式碼: static_node_count: $(vars.static_node_count)
      • id: a3-ultragpu-pool 下方移除 reservation_affinity 區塊。將這個區塊替換為下列程式碼行:

        • enable_flex_start: $(vars.enable_flex_start)
        • auto_repair: false
        • 如要啟用佇列佈建,請新增下列額外行:
          • enable_queued_provisioning: $(vars.enable_queued_provisioning)
          • autoscaling_total_min_nodes: 0
      • id: workload-manager-install 下方,移除下列程式碼區塊:

        config_path: $(vars.kueue_configuration_path)
        config_template_vars:
          num_gpus: $(a4-pool.static_gpu_count)
          accelerator_type: $(vars.accelerator_type)
        
        • 如要使用排隊佈建功能彈性啟動,請按照下列三個步驟操作:

          1. gpu_nominal_quota: NOMINAL_QUOTA 新增至 vars 區塊。gpu_nominal_quota 值用於設定 ClusterQueue 規格中的 GPU nominalQuota。在這個範例中,只有在 GPU 要求總和小於或等於 NOMINAL_QUOTA 值時,ClusterQueue 才會允許工作負載。如要進一步瞭解 ClusterQueue,請參閱下列 Kueue 叢集佇列文件

          2. kueue 區塊更新為以下內容:

            kueue:
               install: true
               config_path: $(vars.kueue_configuration_path)
               config_template_vars:
                  num_gpus: $(vars.gpu_nominal_quota)
            
          3. kueue-configuration.yaml.tftpl 檔案的內容替換成以下內容:

            apiVersion: kueue.x-k8s.io/v1beta1
            kind: ResourceFlavor
            metadata:
               name: "default-flavor"
            ---
            apiVersion: kueue.x-k8s.io/v1beta1
            kind: AdmissionCheck
            metadata:
               name: dws-prov
            spec:
               controllerName: kueue.x-k8s.io/provisioning-request
               parameters:
                  apiGroup: kueue.x-k8s.io
                  kind: ProvisioningRequestConfig
                  name: dws-config
            ---
            apiVersion: kueue.x-k8s.io/v1beta1
            kind: ProvisioningRequestConfig
            metadata:
               name: dws-config
            spec:
               provisioningClassName: queued-provisioning.gke.io
               managedResources:
               - nvidia.com/gpu
            ---
            apiVersion: kueue.x-k8s.io/v1beta1
            kind: ClusterQueue
            metadata:
               name: "dws-cluster-queue"
            spec:
               namespaceSelector: {}
               resourceGroups:
               - coveredResources: ["nvidia.com/gpu"]
                  flavors:
                  - name: "default-flavor"
                  resources:
                  - name: "nvidia.com/gpu"
                     nominalQuota: ${num_gpus}
               admissionChecks:
               - dws-prov
            ---
            apiVersion: kueue.x-k8s.io/v1beta1
            kind: LocalQueue
            metadata:
               namespace: "default"
               name: "dws-local-queue"
            spec:
               clusterQueue: "dws-cluster-queue"
            ---
            
        • id: job-template 欄位中,將 node_count 變數替換為 2

    Spot

    1. GitHub 存放區的藍圖中,填入 terraform_backend_defaultsvars 區段的下列設定,以符合部署作業的特定值:examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml

      • DEPLOYMENT_NAME:部署作業的專屬名稱,長度必須介於 6 至 30 個字元之間。如果部署名稱在專案內重複,叢集建立作業就會失敗。
      • BUCKET_NAME:您在上一個步驟中建立的 Cloud Storage bucket 名稱。
      • PROJECT_ID:您的 Google Cloud 專案 ID。
      • COMPUTE_REGION:叢集的運算區域。
      • COMPUTE_ZONE:A3 Ultra 機器的節點集區運算可用區。
      • STATIC_NODE_COUNT:叢集中的 A3 Ultra 節點數量。
      • IP_ADDRESS/SUFFIX:您要允許連線至叢集的 IP 位址範圍。這個 CIDR 區塊必須包含您要用於呼叫 Terraform 的機器 IP 位址。詳情請參閱「授權網路的運作方式」。
      • 將整個 reservation 區塊 (包括 reservation 行本身) 替換為 spot: true
      • 為系統和 A3 Ultra 節點集區的每個節點設定開機磁碟大小。所需磁碟大小取決於用途。舉例來說,如果您使用磁碟做為快取,以減少重複提取映像檔的延遲時間,可以設定較大的磁碟大小,以容納架構、模型或容器映像檔:

        • SYSTEM_NODE_POOL_DISK_SIZE_GB:系統節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 100
        • A3ULTRA_NODE_POOL_DISK_SIZE_GB:A3 Ultra 節點集區中每個節點的開機磁碟大小。允許的最小磁碟大小為 10。預設值為 100
    2. examples/gke-a3-ultragpu/gke-a3-ultragpu.yaml GitHub 存放區中的藍圖,進行下列變更:

      • vars 區塊中,將整個 reservation 區塊 (包括 reservation 行本身) 替換為 spot: true
      • id: a3-ultragpu-pool 下方移除 reservation_affinity 區塊。將這個區塊替換為下列程式碼行:

        • spot: $(vars.spot)
  6. 您也可以選擇在叢集上啟用叢集健康狀態掃描器 (CHS)。CHS 會執行測試,確認叢集是否已準備好執行工作負載,藉此檢查 GPU 叢集的健康狀態。如要啟用 CHS,請在 examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml 檔案中進行下列變更:

    • vars 區塊中,將 enable_periodic_health_checks 欄位設為 true

    • 根據預設,健康檢查會在太平洋標準時間每週日凌晨 12:00 執行。如要變更這項設定,請在 vars 區塊中,以 cron 格式health_check_schedule 欄位設為適當值。
      以 cron 格式排定時間: none * * * * * # | | | | | # | | | | day of the week (0-6) (Sunday to Saturday) # | | | month (1-12) # | | day of the month (1-31) # | hour (0-23) # minute (0-59)

  7. 產生應用程式預設憑證 (ADC),授予 Terraform 存取權。如果您使用 Cloud Shell,可以執行下列指令:

    gcloud auth application-default login
    
  8. 部署藍圖,使用 A3 Ultra 機型佈建 GKE 基礎架構:

    cd ~/cluster-toolkit
    ./gcluster deploy -d \
    examples/gke-a3-ultragpu/gke-a3-ultragpu-deployment.yaml \
    examples/gke-a3-ultragpu/gke-a3-ultragpu.yaml
    
  9. 出現提示時,選取「(A)pply」(套用) 部署藍圖。

    • 藍圖會建立虛擬私有雲網路、GPU RDMA 虛擬私有雲網路、服務帳戶、叢集和節點集區。
    • 為支援藍圖中的 fio-bench-job-template 工作範本,系統會建立Google Cloud buckets、網路儲存空間和永久磁碟區資源。

使用 XPK 建立叢集並執行工作負載

透過加速處理套件 (XPK),您可以快速佈建及使用叢集。XPK 會產生預先設定且經過訓練最佳化的基礎架構,非常適合以執行工作負載為主要目標的情況。

使用 XPK 建立叢集,並透過 A3 Ultra VM 執行工作負載:

  1. 安裝必要工具,以符合 XPK 先決條件
  2. 複製 XPK 最新標記版本的版本號碼,例如「v0.8.0」。在下列指令中,將 XPK_TAG 替換為最新 XPK 版本號碼。
  3. 在 Linux 電腦上開啟 Shell 視窗,然後輸入下列指令,從 Git 存放區複製 XPK,並安裝必要套件:

      ## Setup virtual environment.
      VENV_DIR=~/venvp3
      python3 -m venv $VENV_DIR
      source $VENV_DIR/bin/activate
      ## Clone the repository.
      git clone --branch XPK_TAG https://github.com/google/xpk.git
      cd xpk
      ## Install required packages
      make install && export PATH=$PATH:$PWD/bin
    
  4. 使用 A3 Ultra VM 建立標準叢集。您可以使用預留容量,佈建叢集的節點:

      python3 xpk.py cluster create \
         --cluster=CLUSTER_NAME \
         --device-type=h200-141gb-8 \
         --zone=COMPUTE_ZONE  \
         --project=PROJECT_ID \
         --num-nodes=NUM_NODES \
         --reservation=RESERVATION_NAME
    

    請替換下列變數:

    • CLUSTER_NAME:叢集名稱。
    • COMPUTE_ZONE:A3 Ultra 機器節點集區的運算區域。如要使用預留容量,請務必使用預留容量的可用區。一般來說,建議選擇靠近使用者的可用區,以盡量縮短延遲時間。
    • PROJECT_ID:您的 Google Cloud 專案 ID
    • NUM_NODES:節點集區中的工作站節點數量。
    • RESERVATION_NAME:預訂名稱。

      XPK 提供叢集建立作業的其他引數,包括建立私人叢集、建立 Vertex AI TensorBoard,以及使用節點自動佈建的引數。詳情請參閱 XPK 的叢集建立指南。

  5. 確認叢集已成功建立:

      python3 xpk.py cluster list --zone=COMPUTE_ZONE --project=PROJECT_ID
    
  6. 選用:執行工作負載來測試叢集環境:

      python3 xpk.py workload create \
         --workload WORKLOAD_NAME --command "echo goodbye" \
         --cluster CLUSTER_NAME \
         --device-type=h200-141gb-8 \
         --num-nodes=WORKLOAD_NUM_NODES \
         --zone=COMPUTE_ZONE \
         --project=PROJECT_ID
    

    請替換下列變數:

    • WORKLOAD_NAME:工作負載名稱。
    • CLUSTER_NAME:叢集名稱。
    • WORKLOAD_NUM_NODES:用於執行工作負載的 worker 節點數量。
    • COMPUTE_ZONE:A3 Ultra 機器的節點集區運算區域
    • PROJECT_ID:您的 Google Cloud 專案 ID

測試網路效能

建議您驗證已佈建叢集的功能。如要執行這項操作,請使用 NCCL/gIB 測試,也就是針對 Google 環境最佳化的 NVIDIA Collective Communications Library (NCCL) 測試

執行可重現的基準測試

您可以在 GKE 的 A4 和 A3 Ultra VM 上,重現大型機器學習開放模型的預先訓練基準。

每份食譜都會提供完成下列工作的指示:

  • 準備環境。
  • 執行基準測試。
  • 分析基準結果。包括基準測試結果和詳細記錄,方便您進一步分析。

如要查看所有可用的做法,請前往 GPU 做法 GitHub 存放區。

模型 架構 方案
Llama-3.1-70B MaxText 32 個節點的工作負載
Llama-3.1-70B NeMo 32 個節點的工作負載
Mixtral-8-7B NeMo 32 個節點的工作負載

清除 Cluster Toolkit 建立的資源

如要避免系統持續收取本頁面所用資源的費用,請清除 Cluster Toolkit 佈建的資源,包括 VPC 網路和 GKE 叢集:

   cd ~/cluster-toolkit
   ./gcluster destroy CLUSTER_NAME/

CLUSTER_NAME 替換為叢集名稱。 如果是使用 Cluster Toolkit 建立的叢集,叢集名稱會以 DEPLOYMENT_NAME 為依據。

後續步驟