本指南說明如何使用彈性啟動佈建模式,為中小型訓練工作負載最佳化 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
,取得最新版本。
- 確認您有執行 1.33.0-gke.1712000 以上版本的 Autopilot 叢集或Standard 叢集。
- 請確認您已瞭解彈性啟動的限制。
- 使用標準叢集時,請確認您至少維護一個未啟用彈性啟動的節點集區,叢集才能正常運作。
- 確認節點位置有先占 GPU 配額。
建立採用彈性啟動的節點集區
如要在現有 Standard 叢集上建立啟用彈性啟動功能的節點集區,可以使用 gcloud CLI 或 Terraform。
如果您使用 Autopilot 模式的叢集,請略過本節,並前往「執行批次工作負載」一節。
gcloud
建立採用彈性啟動模式的節點集區:
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
)。這個節點集區會自動將節點數量從零擴充至最多五個節點。確認節點集區的彈性啟動狀態:
gcloud container node-pools describe NODE_POOL_NAME \ --cluster CLUSTER_NAME \ --location LOCATION_NAME \ --format="get(config.flexStart)"
如果節點集區已啟用彈性啟動功能,
flexStart
欄位會設為True
。
Terraform
您可以使用 Terraform 模組,搭配 GPU 使用彈性啟動。
- 在 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 成功執行特定工作。在Trusted Cloud 控制台中,按一下「Activate Cloud Shell」(啟用 Cloud Shell),啟動 Cloud Shell 工作階段。
工作階段會在 Trusted Cloud 控制台的底部窗格中開啟。
建立名為
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
套用
dws-flex-start.yaml
資訊清單:kubectl apply -f dws-flex-start.yaml
確認 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 帳戶收取本頁面所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。
刪除專案
- In the Trusted Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
刪除個別資源
刪除工作:
kubectl delete job -l "job-name in (job-1,job-2)"
刪除節點集區:
gcloud container node-pools delete NODE_POOL_NAME \ --location LOCATION_NAME
刪除叢集:
gcloud container clusters delete CLUSTER_NAME
後續步驟
- 進一步瞭解 GKE 中的 GPU。
- 進一步瞭解節點自動佈建。
- 進一步瞭解在 GKE 上執行批次工作負載的最佳做法。