本頁面說明如何要求 GPU,以加速 Google Kubernetes Engine (GKE) Autopilot 工作負載中的工作。本頁面也會說明 Autopilot 如何執行 GPU、價格模式如何因 GKE 版本而異、如何設定 Pod 資源要求和限制,以及如何監控 GPU 工作負載。
本頁內容適用於平台管理員和營運人員,以及想為執行機器學習 (ML) 訓練或推論等工作負載要求 GPU 的資料和 AI 專家。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色、責任和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。
繼續操作前,請務必熟悉下列概念:
選取 Pod 中的加速器
Autopilot 會使用專用的 Accelerator 運算類別執行 GPU Pod。使用這項運算類別時,GKE 會將 Pod 放置在 GPU 節點上,讓 Pod 存取虛擬機器 (VM) 的進階功能。如要在 GPU 工作負載中使用這個類別,請視 GKE 版本採取下列其中一項行動:
- 1.29.4-gke.1427000 以上版本:在工作負載資訊清單中要求 GPU。您也可以使用 GPU 共用功能,例如分時功能。GKE 不會修改工作負載資訊清單,為加速器類別新增節點選取器或註解。
- 1.29 版 (不含 1.29.4-gke.142700 版):在 Pod 資訊清單中指定
cloud.google.com/compute-class: Accelerator
節點選取器,並要求使用 GPU。指定這個節點選取器後,您也可以使用 GPU 共用功能,例如分時。 - 1.28.9-gke.1069000 以上版本,但不包括 1.29 版:在 Pod 資訊清單中,一併指定
cloud.google.com/compute-class: Accelerator
節點選取器和 GPU 選取器。如果您指定這個節點選取器,也可以使用 GPU 共用功能,例如分時。
1.28.9-gke.1069000 之前的版本不支援 Accelerator 計算類別。反之,GKE 會將這些版本的 GPU Pod 視為其他 Autopilot Pod,並根據資源要求向您收費。詳情請參閱計費。
加速器與 GKE 功能的相容性
下表列出在 GKE Autopilot 中選取加速器時,各方法適用的 GKE 功能:
已選取 Accelerator 個運算類別 |
與 GKE 功能的相容性 |
---|---|
|
|
|
定價
下表說明 GKE 採用的計費模式取決於叢集的 GKE 版本。如要瞭解 GKE Autopilot 的計費模式,請參閱「Autopilot 定價」。
GKE 版本 | 定價 |
---|---|
1.29.4-gke.1427000 以上版本 | 以節點為基礎的計費模式。所有 GPU Pod 都會使用 Accelerator 運算類別。系統會針對執行 GPU 工作負載的 Compute Engine 硬體向您收費,外加節點管理和可擴充性的 Autopilot 進階版費用。詳情請參閱自動駕駛模式定價。 |
從 1.29 版到 1.29.4-gke.1427000 版 (不含) | 計費模式取決於您指定的節點選取器,如下所示:
如要使用多執行個體 GPU 或分時等功能,您必須明確指定 詳情請參閱 Kubernetes Engine 定價的「具有特定硬體需求的 Pod」一節。 |
從 1.28.6-gke.1095000 版到 1.29 版 (不含 1.29 版) | 以節點為準的計費模式,無論您是否在 Pod 資訊清單中指定 Accelerator 運算類別。 如要使用多執行個體 GPU 或分時等功能,您必須明確指定 詳情請參閱 Kubernetes Engine 定價的「具有特定硬體需求的 Pod」一節。 |
1.28.6-gke.1095000 以下版本 | 以 Pod 為基礎的計費模式。系統會根據 GPU Pod 資源要求向您收費。詳情請參閱 Kubernetes Engine 定價的「具有特定硬體需求的 Pod」一節。 |
請注意,Autopilot GPU 的定價考量事項如下:
所有 A100 (80 GB) GPU 節點都會使用本機 SSD 做為節點開機磁碟,大小則會根據 GPU 數量固定。附加的本機 SSD 費用另計。這項價格不適用於 A100 (40GB) GPU。
GKE Sandbox 的定價與預設 Autopilot 定價相同。 如要進一步瞭解如何將加速器工作負載放入沙箱,請參閱 GKE Sandbox 和GKE Sandbox 快速入門。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
確認您有 GKE Autopilot 叢集,且執行下列其中一個版本:
- 加速器運算類別:1.28 的任何修補程式版本,從 1.28.6-gke.1095000 開始
- NVIDIA B200 (180 GB) GPU:1.32.2-gke.1422000 以上版本
- NVIDIA H200 (141 GB) GPU:1.31.4-gke.1183000 以上版本
- NVIDIA H100 Mega (80GB) GPU:1.28.9-gke.1250000 以上版本,以及 1.29.4-gke.1542000 以上版本
- NVIDIA H100 (80GB) GPU:1.28.6-gke.1369000 以上版本,以及 1.29.1-gke.1575000 以上版本
- 每個 VM 的多個 GPU Pod:1.29.2-gke.1355000 以上版本
未選取運算類別:
- NVIDIA L4 GPU:1.28.3-gke.1203000 以上版本
- NVIDIA A100 (80GB) GPU:1.27 以上版本
- 加速器運算類別:1.28 的任何修補程式版本,從 1.28.6-gke.1095000 開始
確認專案有足夠的 GPU 配額。您必須有足夠的 Compute Engine GPU 配額,才能在各個地區建立 GPU 模型。如果需要更多 GPU 配額,請申請調整配額。
限制
- 分時 GPU 和多例項 GPU 適用於 GKE 1.29.3-gke.1093000 以上版本的 Autopilot。
- GPU 可用性取決於 Autopilot 叢集的 Google Cloud 區域和 GPU 配額。如要依區域或可用區尋找 GPU 型號,請參閱 GPU 區域和可用區。
- 如果是 NVIDIA A100 (80 GB) GPU,系統會針對附加至節點的本機 SSD 收取固定價格,無論 Pod 是否使用該容量。
- 如果是 1.29.2-gke.1355000 之前的 GKE 版本,如果您明確要求 Pod 使用特定現有 GPU 節點,Pod 就必須耗用該節點上的所有 GPU 資源。舉例來說,如果現有節點有 8 個 GPU,而 Pod 的容器要求總共 4 個 GPU,Autopilot 會拒絕該 Pod。
- 如果是 GKE 1.29.2-gke.1355000 以上版本,如要讓多個 GPU Pod 裝入單一節點,這些 Pod 的 GPU 要求總和必須小於或等於該節點所連 GPU 資源的數量。舉例來說,如果節點的
gke-accelerator-count
為 4,最多可容納四個各要求一個 GPU 的 Pod。
在單一 GPU 節點上放置多個 Pod,適用於下列情況:
- 您為大型加速器機器類型預留容量,並執行單一 GPU 工作負載,因此在每個節點部署一個 Pod 會浪費該機器的其他 GPU
- 您有必須在同一部主機上執行的 GPU 工作負載
在這些情況下,建議您確保節點上 Pod GPU 資源要求的總和等於附加至節點的 GPU 數量,藉此使用節點上的所有 GPU。
在容器中要求 GPU
如要為容器要求 GPU 資源,請將下列欄位新增至 Pod 規格。視工作負載需求而定,您可以選擇省略 cloud.google.com/gke-accelerator-count
選取器。
apiVersion: v1
kind: Pod
metadata:
name: my-gpu-pod
spec:
# Optional: Use GKE Sandbox
# runtimeClassName: gvisor
nodeSelector:
cloud.google.com/gke-accelerator: GPU_TYPE
cloud.google.com/gke-accelerator-count: "GPU_COUNT"
containers:
- name: my-gpu-container
image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
command: ["/bin/bash", "-c", "--"]
args: ["while true; do sleep 600; done;"]
resources:
limits:
nvidia.com/gpu: GPU_QUANTITY
更改下列內容:
GPU_TYPE
:GPU 硬體類型。允許的值如下:nvidia-b200
:NVIDIA B200 (180 GB)nvidia-h200-141gb
:NVIDIA H200 (141 GB)nvidia-h100-mega-80gb
:NVIDIA H100 Mega (80 GB)nvidia-h100-80gb
:NVIDIA H100 (80 GB)nvidia-a100-80gb
:NVIDIA A100 (80 GB)nvidia-tesla-a100
:NVIDIA A100 (40GB)nvidia-l4
:NVIDIA L4nvidia-tesla-t4
:NVIDIA T4
GPU_COUNT
:可附加至節點的 GPU 總數。必須大於或等於GPU_QUANTITY
,且是所選 GPU 類型的支援 GPU 數量。如果省略這個 nodeSelector,Autopilot 會在每個 GPU 節點上放置一個 Pod。GPU_QUANTITY
:要分配給容器的 GPU 數量。必須小於或等於GPU_COUNT
,且為所選 GPU 類型支援的 GPU 數量。- 選用
runtimeClassname: gvisor
:這項設定可讓您在 GKE Sandbox 中執行這個 Pod。如要使用,請取消註解這一行。詳情請參閱「GKE Sandbox」。
如要瞭解 Autopilot 模式的加速器用量計費方式,請參閱「定價」一節。
您必須在 Pod 規格中指定 GPU 類型和 GPU 數量。如果省略其中一個值,Autopilot 會拒絕您的 Pod。
部署這個資訊清單時,Autopilot 會自動安裝節點 GKE 版本的預設 NVIDIA 驅動程式。在 1.29.2-gke.1108000 以上版本中,您可以選擇在資訊清單中加入下列節點選取器,為該 GKE 版本安裝最新版驅動程式:
spec:
nodeSelector:
cloud.google.com/gke-gpu-driver-version: "DRIVER_VERSION"
將 DRIVER_VERSION
替換為下列任一值:
default
- 節點 GKE 版本的預設穩定版驅動程式。如果您在資訊清單中省略 nodeSelector,系統會預設使用這個選項。latest
:適用於節點 GKE 版本的最新驅動程式版本。
為 Autopilot GPU Pod 要求 CPU 和記憶體
定義 GPU Pod 時,您也應要求 CPU 和記憶體資源,確保容器正常運作。Autopilot 會根據 GPU 類型和數量,強制執行特定的 CPU 和記憶體下限、上限和預設值。如果您在單一節點上執行多個 GPU Pod,請指定 CPU 和記憶體,否則系統會預設為節點的總容量。詳情請參閱「Autopilot 中的資源要求」。
您的 Pod 規格應與下列範例類似,其中要求四個 T4 GPU:
apiVersion: v1
kind: Pod
metadata:
name: t4-pod
spec:
# Optional: Use GKE Sandbox
# runtimeClassName: gvisor
nodeSelector:
cloud.google.com/gke-accelerator: "nvidia-tesla-t4"
containers:
- name: t4-container-1
image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
command: ["/bin/bash", "-c", "--"]
args: ["while true; do sleep 600; done;"]
resources:
limits:
nvidia.com/gpu: 3
cpu: "54"
memory: "54Gi"
requests:
cpu: "54"
memory: "54Gi"
- name: t4-container-2
image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
command: ["/bin/bash", "-c", "--"]
args: ["while true; do sleep 600; done;"]
resources:
limits:
nvidia.com/gpu: 1
cpu: "18"
memory: "18Gi"
requests:
cpu: "18"
memory: "18Gi"
- 選用
runtimeClassname: gvisor
:這項設定可讓您在 GKE Sandbox 中執行這個 Pod。如要使用,請取消註解這一行。詳情請參閱「GKE Sandbox」。
此資訊清單指定了 CPU 和記憶體資源的 limits
。如果您在 GKE 1.29.2-gke.1060000 以上版本中省略 CPU 或記憶體的 limits
,GKE 會為 Pod 提供 Burstable
QoS 類別,並允許 Pod 爆發性使用節點上資源要求總和的未使用資源。詳情請參閱「在 GKE 中設定 Pod 爆量」一文。
為 Autopilot GPU Pod 要求暫存空間
您也可以在需要短期儲存空間的 Pod 中要求暫存空間。 可用暫時性儲存空間上限和使用的儲存空間硬體類型,取決於 Pod 要求的 GPU 類型和數量。使用 NVIDIA L4 GPU、加速器運算類別,並執行 GKE 修補程式版本 1.28.6-gke.1369000 以上或 1.29.1-gke.1575000 以上版本時,即可將本機 SSD 用於臨時儲存空間。
如要使用本機 SSD 做為臨時儲存空間,請將 cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
nodeSelector 新增至工作負載資訊清單。請參閱「搭配 Autopilot 叢集使用本機 SSD 支援的暫時性儲存空間」中的範例資訊清單。
NVIDIA H100 (80GB) GPU 和 NVIDIA A100 (80GB) GPU 一律會使用本機 SSD 做為暫時性儲存空間,您無法為這些 GPU 指定節點選取器。
確認已部署的 GPU 分配情形
如要確認已部署的 GPU 工作負載是否具有要求的 GPU,請執行下列指令:
kubectl describe node NODE_NAME
將 NODE_NAME
替換為 Pod 排程的節點名稱。
輸出結果會與下列內容相似:
apiVersion: v1
kind: Node
metadata:
...
labels:
...
cloud.google.com/gke-accelerator: nvidia-tesla-t4
cloud.google.com/gke-accelerator-count: "1"
cloud.google.com/machine-family: custom-48
...
...
查看 GPU 驅動程式版本
在 Autopilot 叢集中,GKE 會自動在所有 GPU 節點上安裝 NVIDIA 裝置驅動程式。如要找出 GKE 在叢集中安裝的驅動程式版本,請執行下列指令:
kubectl logs --selector=k8s-app=nvidia-gpu-device-plugin \
--container="nvidia-gpu-device-plugin" \
--tail=-1 \
--namespace=kube-system | grep Driver
輸出結果會與下列內容相似:
I1206 18:37:08.251742 5851 metrics.go:144] nvml initialized successfully. Driver version: 535.104.12
Autopilot 中的 GPU 分配方式
為 Pod 中的容器要求 GPU 類型和數量並部署 Pod 後,會發生下列情況:
- 如果沒有可分配的 GPU 節點,Autopilot 會佈建新的 GPU 節點來排定 Pod。Autopilot 會自動安裝 NVIDIA 驅動程式,以利硬體運作。
- Autopilot 會將節點 taint新增至 GPU 節點,並將對應的容許條件新增至 Pod。這樣可防止 GKE 在 GPU 節點上排程其他 Pod。
Autopilot 會在每個 GPU 節點上放置一個 GPU Pod,以及在所有節點上執行的任何 GKE 管理工作負載,以及您設定為容許所有節點 taint 的任何 DaemonSet。
在每個節點上執行 DaemonSet
您可能想在每個節點上執行 DaemonSet,即使是套用汙點的節點也一樣。舉例來說,部分記錄和監控代理程式必須在叢集中的每個節點上執行。您可以將這些 DaemonSet 設為忽略節點汙點,讓 GKE 將這些工作負載放在每個節點上。
如要在叢集中的每個節點 (包括 GPU 節點) 上執行 DaemonSet,請在規格中加入下列容許度:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: logging-agent
spec:
tolerations:
- key: ""
operator: "Exists"
effect: ""
containers:
- name: logging-agent-v1
image: IMAGE_PATH
將 IMAGE_PATH
替換為容器映像檔的路徑。
如要在叢集中的特定 GPU 節點上執行 DaemonSet,請在規格中加入下列項目:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: logging-agent
spec:
nodeSelector:
cloud.google.com/gke-accelerator: "GPU_TYPE"
tolerations:
- key: ""
operator: "Exists"
effect: ""
containers:
- name: logging-agent-v1
image: IMAGE_PATH
請將 GPU_TYPE
替換為目標節點中的 GPU 類型。可以是下列其中一項:
nvidia-b200
:NVIDIA B200 (180 GB)nvidia-h200-141gb
:NVIDIA H200 (141 GB)nvidia-h100-mega-80gb
:NVIDIA H100 Mega (80 GB)nvidia-h100-80gb
:NVIDIA H100 (80 GB)nvidia-a100-80gb
:NVIDIA A100 (80 GB)nvidia-tesla-a100
:NVIDIA A100 (40GB)nvidia-l4
:NVIDIA L4nvidia-tesla-t4
:NVIDIA T4
Autopilot 中的 GPU 使用案例
您可以將 GPU 分配給 Autopilot Pod 中的容器,以利執行下列工作負載:
- 機器學習 (ML) 推論
- 機器學習訓練
- 算繪
支援的 GPU 數量
在 Pod 規格中要求 GPU 時,必須根據 GPU 類型使用下列數量:
GPU 數量 | |
---|---|
NVIDIA L4nvidia-l4 |
1、2、4、8 |
NVIDIA T4nvidia-tesla-t4 |
1、2、4 |
NVIDIA A100 (40GB)nvidia-tesla-a100 |
1、2、4、8、16 |
NVIDIA A100 (80GB)nvidia-a100-80gb |
1、2、4、8 |
NVIDIA H100 (80GB)nvidia-h100-80gb |
1、2、4、8 |
NVIDIA H100 Mega (80GB)nvidia-h100-mega-80gb |
8 |
NVIDIA H200 (141GB)nvidia-h200-141gb |
8 |
NVIDIA B200 (180GB)nvidia-b200 |
8 |
監控 GPU 節點工作負載效能
如果 GKE 叢集已啟用系統指標,您可以在 Cloud Monitoring 中查看下列指標,監控 GPU 工作負載效能:
- 「Duty Cycle」(任務週期) (
container/accelerator/duty_cycle
): 在加速器主動處理期間,過去取樣期間 (10 秒) 的時間百分比。值介於 1 到 100 之間。 - 「Memory Usage」(記憶體用量) (
container/accelerator/memory_used
): 分配的加速器記憶體量,以位元組為單位。 - 「Memory Capacity」(記憶體容量) (
container/accelerator/memory_total
): 加速器記憶體總量,以位元組為單位。
這些指標適用於容器層級 (container/accelerator
),且不會針對使用 GPU 分時或 NVIDIA MPS 的 GPU 上排定的容器收集。
您可以使用預先定義的資訊主頁,監控含有 GPU 節點的叢集。詳情請參閱「 查看可觀測性指標」。如要瞭解如何監控叢集及叢集資源,請參閱 GKE 可觀測性。
查看工作負載的用量指標
您可以前往 Google Cloud 主控台的「Workloads」(工作負載) 資訊主頁,查看工作負載的 GPU 用量指標。
如要查看工作負載的 GPU 用量,請執行下列步驟:
前往 Google Cloud 控制台的「Workloads」(工作負載) 頁面。
前往「Workloads」(工作負載)- 選取工作負載。
「Workloads」(工作負載) 資訊主頁會顯示 GPU 記憶體用量和容量的圖表,以及 GPU 任務週期。
查看 NVIDIA Data Center GPU Manager (DCGM) 指標
您可以使用 Google Cloud Managed Service for Prometheus 收集及以視覺化方式呈現 NVIDIA DCGM 指標。如果是 Autopilot 叢集,GKE 會安裝驅動程式。如果是標準叢集,您必須安裝 NVIDIA 驅動程式。
如需如何部署 GKE 代管 DCGM 套件的操作說明,請參閱「收集及查看 NVIDIA Data Center GPU Manager (DCGM) 指標」。
後續步驟
- 進一步瞭解 GKE 中的 GPU 支援。
- 瞭解如何針對特定用途最佳化 Autopilot 運算類別。
- 瞭解如何使用 Dynamic Workload Scheduler 部署 GPU,以處理批次工作負載。
- 瞭解如何使用 GKE Sandbox 將 GPU 工作負載放入沙箱