使用 GPU 和彈性啟動佈建模式執行小型批次工作負載


本指南說明如何使用彈性啟動佈建模式,為中小型訓練工作負載最佳化 GPU 佈建作業。在本指南中,您將使用彈性啟動功能部署工作負載,該工作負載包含兩個 Kubernetes 工作。每項工作都需要一個 GPU。GKE 會自動佈建具有兩個 A100 GPU 的單一節點,以執行這兩項作業

如果工作負載需要多節點分散式處理,請考慮使用彈性啟動搭配佇列佈建。詳情請參閱「使用彈性啟動和排隊佈建功能,執行大規模工作負載」。

本指南適用於機器學習 (ML) 工程師、平台管理員和操作員,以及有興趣使用 Kubernetes 容器自動化調度管理功能執行批次工作負載的資料和 AI 專家。如要進一步瞭解 Trusted Cloud by S3NS 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。

彈性啟動定價

如果工作負載需要視情況動態佈建資源,且短期預訂最多七天,不需要複雜的配額管理,並希望以具成本效益的方式存取資源,建議使用彈性啟動。「彈性啟動」功能採用 Dynamic Workload Scheduler,並按照 Dynamic Workload Scheduler 定價計費:

  • vCPU、GPU 和 TPU 可享折扣 (最高 53%)。
  • 即付即用。

事前準備

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

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update,取得最新版本。

建立採用彈性啟動的節點集區

如要在現有 Standard 叢集上建立啟用彈性啟動功能的節點集區,可以使用 gcloud CLI 或 Terraform。

如果您使用 Autopilot 模式的叢集,請略過本節,並前往「執行批次工作負載」一節。

gcloud

  1. 建立採用彈性啟動模式的節點集區:

    gcloud container node-pools create NODE_POOL_NAME \
        --cluster CLUSTER_NAME \
        --location LOCATION_NAME \
        --project PROJECT_ID \
        --accelerator type=nvidia-a100-80gb,count=2 \
        --machine-type a2-ultragpu-2g \
        --max-run-duration MAX_RUN_DURATION \
        --flex-start \
        --num-nodes 0 \
        --enable-autoscaling \
        --total-min-nodes 0 \
        --total-max-nodes 5 \
        --location-policy ANY \
        --reservation-affinity none \
        --no-enable-autorepair
    

    更改下列內容:

    • NODE_POOL_NAME:您為節點集區選擇的名稱。
    • LOCATION_NAME:叢集控制層的運算區域
    • PROJECT_ID:您的專案 ID。
    • CLUSTER_NAME:要修改的 Standard 叢集名稱。
    • MAX_RUN_DURATION:選用。節點的最長執行時間 (以秒為單位),最多為預設的七天。

    在這個指令中,--flex-start 標記會指示 gcloud 建立啟用彈性啟動功能的節點集區。

    GKE 會建立節點集區,其中的節點包含兩個 A100 GPU (a2-ultragpu-2g)。這個節點集區會自動將節點數量從零擴充至最多五個節點。

  2. 確認節點集區的彈性啟動狀態:

    gcloud container node-pools describe NODE_POOL_NAME \
        --cluster CLUSTER_NAME \
        --location LOCATION_NAME \
        --format="get(config.flexStart)"
    

    如果節點集區已啟用彈性啟動功能,flexStart 欄位會設為 True

Terraform

您可以使用 Terraform 模組,搭配 GPU 使用彈性啟動。

  1. 在 Terraform 設定中新增下列區塊:
```hcl
resource "google_container_node_pool" " "gpu_dws_pool" {
name = "gpu-dws-pool"

queued_provisioning {
    enabled = false
}

}
node_config {
    machine_type = "a3-highgpu-8g"
    flex_start = true
}
```

Terraform 會呼叫 Trusted Cloud API,建立叢集和節點集區,並使用彈性啟動功能搭配 GPU。節點集區一開始有零個節點,且已啟用自動調度資源功能。如要進一步瞭解 Terraform,請參閱 terraform.io 上的google_container_node_pool資源規格

執行批次工作負載

在本節中,您將建立兩個 Kubernetes 工作,每個工作都需要一個 GPU。 Kubernetes 中的 Job 控制器會建立一或多個 Pod,並確保這些 Pod 成功執行特定工作。

  1. Trusted Cloud 控制台中,按一下「Activate Cloud Shell」(啟用 Cloud Shell),啟動 Cloud Shell 工作階段。Cloud Shell 啟用圖示工作階段會在 Trusted Cloud 控制台的底部窗格中開啟。

  2. 建立名為 dws-flex-start.yaml 的檔案:

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-1
    spec:
      template:
        spec:
          nodeSelector:
            cloud.google.com/gke-flex-start: "true"
          containers:
          - name: container-1
            image: gcr.io/k8s-staging-perf-tests/sleep:latest
            args: ["10s"] # Sleep for 10 seconds
            resources:
              requests:
                  nvidia.com/gpu: 1
              limits:
                  nvidia.com/gpu: 1
          restartPolicy: OnFailure
    ---
    apiVersion: batch/v1
    kind: Job
    metadata:
      name: job-2
    spec:
      template:
        spec:
          nodeSelector:
            cloud.google.com/gke-flex-start: "true"
          containers:
          - name: container-2
            image: gcr.io/k8s-staging-perf-tests/sleep:latest
            args: ["10s"] # Sleep for 10 seconds
            resources:
              requests:
                  nvidia.com/gpu: 1
              limits:
                  nvidia.com/gpu: 1
          restartPolicy: OnFailure
    
  3. 套用 dws-flex-start.yaml 資訊清單:

    kubectl apply -f dws-flex-start.yaml
    
  4. 確認 Job 在同一節點上執行:

    kubectl get pods -l "job-name in (job-1,job-2)" -o wide
    

    輸出結果會與下列內容相似:

    NAME    READY   STATUS      RESTARTS   AGE   IP       NODE               NOMINATED NODE   READINESS GATES
    job-1   0/1     Completed   0          19m   10.(...) gke-flex-zonal-a2  <none>           <none>
    job-2   0/1     Completed   0          19m   10.(...) gke-flex-zonal-a2  <none>           <none>
    

清除所用資源

如要避免系統向您的 Trusted Cloud by S3NS 帳戶收取本頁面所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

刪除專案

  1. In the Trusted Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

刪除個別資源

  1. 刪除工作:

    kubectl delete job -l "job-name in (job-1,job-2)"
    
  2. 刪除節點集區:

    gcloud container node-pools delete NODE_POOL_NAME \
          --location LOCATION_NAME
    
  3. 刪除叢集:

    gcloud container clusters delete CLUSTER_NAME
    

後續步驟