本頁面可協助您決定何時使用 NVIDIA GPU 運算子,並說明如何在 GKE 上啟用 NVIDIA GPU 運算子。
總覽
運算子是 Kubernetes 軟體擴充功能,可讓使用者建立自訂資源,管理應用程式及其元件。除了 Kubernetes 本身提供的功能,您還可以使用運算子自動執行複雜工作,例如部署及升級應用程式。
NVIDIA GPU 運算子是 Kubernetes 運算子,可提供常見的基礎架構和 API,用於部署、設定及管理軟體元件,以便在 Kubernetes 叢集中佈建 NVIDIA GPU。NVIDIA GPU 運算子可提供一致的體驗、簡化 GPU 資源管理,並簡化 GPU 加速工作負載整合至 Kubernetes 的程序。
為何要使用 NVIDIA GPU 運算子?
建議您為 GPU 節點使用 GKE GPU 管理功能,因為 GKE 會全面管理 GPU 節點生命週期。如要開始使用 GKE 管理 GPU 節點,請選擇下列其中一個選項:
或者,如果您想在多個雲端服務供應商之間獲得一致的體驗、已使用 NVIDIA GPU 運算子,或使用依賴 NVIDIA GPU 運算子的軟體,則 NVIDIA GPU 運算子可能適合您。
如要進一步瞭解如何在這兩個選項之間做出選擇,請參閱「透過 GKE 或 GKE 上的 NVIDIA GPU 運算子管理 GPU 堆疊」。
限制
NVIDIA GPU 運算子支援 Container-Optimized OS (COS) 和 Ubuntu 節點映像檔,但有下列限制:
- GKE 支援 NVIDIA GPU 運算子,但須使用 GPU 運算子 24.6.0 以上版本。
- Autopilot 叢集不支援 NVIDIA GPU 運算子。
- Windows 節點映像檔不支援 NVIDIA GPU 運算子。
- NVIDIA GPU 運算子並非由 GKE 管理。如要升級 NVIDIA GPU 運算子,請參閱 NVIDIA 說明文件。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
- 請確認您符合「在標準節點集區中執行 GPU」一文中的需求。
確認您已在開發環境中安裝 Helm。Cloud Shell 已預先安裝 Helm。
雖然沒有特定的 Helm 版本需求,但您可以使用下列指令確認是否已安裝 Helm。
helm version
如果輸出內容類似
Command helm not found
,請執行下列指令來安裝 Helm CLI:curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \ && chmod 700 get_helm.sh \ && ./get_helm.sh
建立及設定 GPU 節點集區
如要建立及設定 GPU 節點集區,請按照下列步驟操作:
按照「建立 GPU 節點集區」一文的說明建立 GPU 節點集區,並進行下列修改:
- 設定
gpu-driver-version=disabled
,略過自動安裝 GPU 驅動程式,因為使用 NVIDIA GPU 運算子時不支援這項功能。 - 將
--node-labels="gke-no-default-nvidia-gpu-device-plugin=true"
設為停用 GKE 代管的 GPU 裝置外掛程式 DaemonSet。
執行下列指令,並視需要附加其他旗標,建立 GPU 節點集區:
gcloud container node-pools create POOL_NAME \ --accelerator type=GPU_TYPE,count=AMOUNT,gpu-driver-version=disabled \ --node-labels="gke-no-default-nvidia-gpu-device-plugin=true"
更改下列內容:
- POOL_NAME 您為節點集區選擇的名稱。
- GPU_TYPE:您要使用的 GPU 加速器 類型。例如:
nvidia-h100-80gb
。 - AMOUNT:要附加至節點集區中節點的 GPU 數量。
舉例來說,下列指令會在可用區叢集
a3-cluster
中,建立具有 H100 GPU 的 GKE 節點集區a3nodepool
。在本範例中,GKE GPU 裝置外掛程式 Daemonset 和自動安裝驅動程式功能已停用。gcloud container node-pools create a3nodepool \ --cluster=a3-cluster \ --location=us-central1 \ --node-locations=us-central1-a \ --accelerator=type=nvidia-h100-80gb,count=8,gpu-driver-version=disabled \ --machine-type=a3-highgpu-8g \ --node-labels="gke-no-default-nvidia-gpu-device-plugin=true" \ --num-nodes=1
- 設定
執行下列指令,取得叢集的驗證憑證:
USE_GKE_GCLOUD_AUTH_PLUGIN=True \ gcloud container clusters get-credentials CLUSTER_NAME \ --location CONTROL_PLANE_LOCATION
更改下列內容:
- CLUSTER_NAME:包含節點集區的叢集名稱。
- CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。為地區叢集提供地區,或為區域叢集提供區域。
輸出結果會與下列內容相似:
Fetching cluster endpoint and auth data. kubeconfig entry generated for CLUSTER_NAME.
(選用) 確認您可以連線至叢集。
kubectl get nodes -o wide
畫面上應該會顯示在這個叢集內執行的所有節點清單。
執行下列指令,為 NVIDIA GPU 運算子建立命名空間
gpu-operator
:kubectl create ns gpu-operator
輸出結果會與下列內容相似:
namespace/gpu-operator created
執行下列指令,在
gpu-operator
命名空間中建立資源配額:kubectl apply -n gpu-operator -f - << EOF apiVersion: v1 kind: ResourceQuota metadata: name: gpu-operator-quota spec: hard: pods: 100 scopeSelector: matchExpressions: - operator: In scopeName: PriorityClass values: - system-node-critical - system-cluster-critical EOF
輸出結果會與下列內容相似:
resourcequota/gpu-operator-quota created
查看
gpu-operator
命名空間的資源配額:kubectl get -n gpu-operator resourcequota gpu-operator-quota
輸出結果會與下列內容相似:
NAME AGE REQUEST LIMIT gpu-operator-quota 2m27s pods: 0/100
在 Container-Optimized OS 或 Ubuntu 節點上,手動安裝驅動程式。如需詳細操作說明,請參閱「手動安裝 NVIDIA GPU 驅動程式」。
如果使用 COS,請執行下列指令來部署安裝 DaemonSet,並安裝預設的 GPU 驅動程式版本:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
如果使用 Ubuntu,您部署的安裝 DaemonSet 會依據 GPU 類型和 GKE 節點版本而異,詳情請參閱操作說明的 Ubuntu 專區。
執行下列指令,確認 GPU 驅動程式版本:
kubectl logs -l k8s-app=nvidia-driver-installer \ -c "nvidia-driver-installer" --tail=-1 -n kube-system
如果 GPU 驅動程式安裝成功,輸出結果會與下列內容相似:
I0716 03:17:38.863927 6293 cache.go:66] DRIVER_VERSION=535.183.01 … I0716 03:17:38.863955 6293 installer.go:58] Verifying GPU driver installation I0716 03:17:41.534387 6293 install.go:543] Finished installing the drivers.
安裝 NVIDIA GPU 運算子
本節說明如何使用 Helm 安裝 NVIDIA GPU 運算子。如要瞭解詳情,請參閱 NVIDIA 說明文件,瞭解如何安裝 NVIDIA GPU 運算子。
新增 NVIDIA Helm 存放區:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo update
使用 Helm 安裝 NVIDIA GPU 運算子,並採用下列設定選項:
- 確認 GPU 運算子版本為 24.6.0 以上。
- 使用
hostPaths.driverInstallDir=/home/kubernetes/bin/nvidia
在 GPU Operator 中設定驅動程式安裝路徑。 - 請為 COS 和 Ubuntu 設定工具包安裝路徑
toolkit.installDir=/home/kubernetes/bin/nvidia
。在 COS 中,/home
目錄可供寫入,並做為儲存 NVIDIA 執行階段二進位檔的有狀態位置。詳情請參閱 COS 的「磁碟和檔案系統總覽」。 - 在 GPU 運算子中啟用容器裝置介面 (CDI),方法是使用
cdi.enabled=true
和cdi.default=true
,因為系統不支援舊版模式。在 GKE 上使用 COS 和 Ubuntu 時,都必須使用 CDI。
helm install --wait --generate-name \ -n gpu-operator \ nvidia/gpu-operator \ --set hostPaths.driverInstallDir=/home/kubernetes/bin/nvidia \ --set toolkit.installDir=/home/kubernetes/bin/nvidia \ --set cdi.enabled=true \ --set cdi.default=true \ --set driver.enabled=false
如要進一步瞭解這些設定,請參閱 NVIDIA 說明文件中的「Common Chart Customization Options」和「Common Deployment Scenarios」。
確認 NVIDIA GPU 運算子是否已成功安裝。
如要檢查 GPU 運算元是否正常運作,請執行下列指令。
kubectl get pods -n gpu-operator
輸出看起來類似以下內容:
NAME READY STATUS RESTARTS AGE gpu-operator-5c7cf8b4f6-bx4rg 1/1 Running 0 11m gpu-operator-node-feature-discovery-gc-79d6d968bb-g7gv9 1/1 Running 0 11m gpu-operator-node-feature-discovery-master-6d9f8d497c-thhlz 1/1 Running 0 11m gpu-operator-node-feature-discovery-worker-wn79l 1/1 Running 0 11m gpu-feature-discovery-fs9gw 1/1 Running 0 8m14s gpu-operator-node-feature-discovery-worker-bdqnv 1/1 Running 0 9m5s nvidia-container-toolkit-daemonset-vr8fv 1/1 Running 0 8m15s nvidia-cuda-validator-4nljj 0/1 Completed 0 2m24s nvidia-dcgm-exporter-4mjvh 1/1 Running 0 8m15s nvidia-device-plugin-daemonset-jfbcj 1/1 Running 0 8m15s nvidia-mig-manager-kzncr 1/1 Running 0 2m5s nvidia-operator-validator-fcrr6 1/1 Running 0 8m15s
如要檢查節點的「Allocatable」欄位是否已正確設定 GPU 數量,請執行下列指令:
kubectl describe node GPU_NODE_NAME | grep Allocatable -A7
將 GPU_NODE_NAME 替換為具有 GPU 的節點名稱。
輸出結果會與下列內容相似:
Allocatable: cpu: 11900m ephemeral-storage: 47060071478 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 80403000Ki nvidia.com/gpu: 1 # showing correct count of GPU associated with the nods pods: 110
如要確認 GPU 工作負載是否正常運作,可以使用
cuda-vectoradd
工具:cat << EOF | kubectl create -f - apiVersion: v1 kind: Pod metadata: name: cuda-vectoradd spec: restartPolicy: OnFailure containers: - name: vectoradd image: nvidia/samples:vectoradd-cuda11.2.1 resources: limits: nvidia.com/gpu: 1 EOF
然後執行下列指令:
kubectl logs cuda-vectoradd
輸出結果會與下列內容相似:
[Vector addition of 50000 elements] Copy input data from the host memory to the CUDA device CUDA kernel launch with 196 blocks of 256 threads Copy output data from the CUDA device to the host memory Test PASSED Done