本文說明如何設定 Google Kubernetes Engine (GKE) 基礎架構,以支援動態資源分配 (DRA)。設定步驟包括建立使用 GPU 或 TPU 的節點集區,以及在叢集中安裝 DRA 驅動程式。本文適用於平台管理員,可協助他們減少設定基礎架構的複雜度和額外負擔,不必使用專用硬體裝置。
限制
- 不支援節點自動佈建功能。
- Autopilot 叢集不支援 DRA。
- DRA 不支援自動安裝 GPU 驅動程式。
- 您無法使用下列 GPU 共用功能:
- GPU 分時
- 多執行個體 GPU
- 多重程序服務 (MPS)
- 如果是 TPU,您必須啟用 DRA API 種類的
v1beta1和v1beta2版本。這項限制不適用於 GPU,GPU 可以使用v1API 版本。
需求條件
如要使用 DRA,GKE 叢集必須執行 1.34 以上版本。
此外,您也應熟悉下列規定和限制,具體視您想使用的硬體類型而定:
事前準備
開始之前,請確認您已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文中的指令。
擁有執行 1.34 以上版本的 GKE Standard 叢集。您也可以建立地區叢集。
如果您未使用 Cloud Shell,請安裝 Helm CLI:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.sh如要使用 TPU 的 DRA,請啟用 DRA API 種類的
v1beta1和v1beta2版本:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --enable-kubernetes-unstable-apis="resource.k8s.io/v1beta1/deviceclasses,resource.k8s.io/v1beta1/resourceclaims,resource.k8s.io/v1beta1/resourceclaimtemplates,resource.k8s.io/v1beta1/resourceslices,resource.k8s.io/v1beta2/deviceclasses,resource.k8s.io/v1beta2/resourceclaims,resource.k8s.io/v1beta2/resourceclaimtemplates,resource.k8s.io/v1beta2/resourceslices"
建立具有 GPU 或 TPU 的 GKE 節點集區
在 GKE 中,您可以將 DRA 與 GPU 和 TPU 搭配使用。節點集區的設定 (例如機器類型、加速器類型、數量、節點作業系統和節點位置) 取決於您的需求。如要建立支援 DRA 的節點集區,請選取下列任一選項:
GPU
如要使用 GPU 的 DRA,請在建立節點集區時執行下列操作:
- 如要停用自動安裝 GPU 驅動程式的功能,請在為節點集區設定 GPU 時,在
--accelerator旗標中指定gpu-driver-version=disabled選項。 - 新增
gke-no-default-nvidia-gpu-device-plugin=true節點標籤,停用 GPU 裝置外掛程式。 - 新增
nvidia.com/gpu.present=true節點標籤,讓 DRA 驅動程式 DaemonSet 在節點上執行。
如要為 DRA 建立 GPU 節點集區,請按照下列步驟操作:
使用所需硬體建立節點集區。以下範例會建立節點集區,其中包含 Container-Optimized OS 上的
g2-standard-24執行個體,以及兩個 L4 GPU。gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --machine-type "g2-standard-24" \ --accelerator "type=nvidia-l4,count=2,gpu-driver-version=disabled" \ --num-nodes "1" \ --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=true更改下列內容:
NODEPOOL_NAME:節點集區的名稱。CLUSTER_NAME:叢集名稱。CONTROL_PLANE_LOCATION:叢集控制層的區域或可用區,例如us-central1或us-central1-a。
在 Container-Optimized OS 或 Ubuntu 節點上,手動安裝驅動程式。如需詳細操作說明,請參閱「手動安裝 NVIDIA GPU 驅動程式」。
TPU
如要對 TPU 使用 DRA,請新增 gke-no-default-tpu-device-plugin=true 節點標籤,停用 TPU 裝置外掛程式。以下範例會建立支援 DRA 的 TPU Trillium 節點集區:
gcloud container node-pools create NODEPOOL_NAME \
--cluster CLUSTER_NAME --num-nodes 1 \
--location=CONTROL_PLANE_LOCATION \
--node-labels "gke-no-default-tpu-device-plugin=true,gke-no-default-tpu-dra-plugin=true" \
--machine-type=ct6e-standard-8t
更改下列內容:
NODEPOOL_NAME:節點集區的名稱。CLUSTER_NAME:叢集名稱。CONTROL_PLANE_LOCATION:叢集控制層的區域或可用區,例如us-central1或us-central1-a。
安裝 DRA 驅動程式
GPU
提取並更新內含 NVIDIA DRA 驅動程式的 Helm 資訊套件:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo update安裝 NVIDIA DRA 驅動程式,版本為
25.3.2:helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --version="25.3.2" --create-namespace --namespace=nvidia-dra-driver-gpu \ --set nvidiaDriverRoot="/home/kubernetes/bin/nvidia/" \ --set gpuResourcesEnabledOverride=true \ --set resources.computeDomains.enabled=false \ --set kubeletPlugin.priorityClassName="" \ --set 'kubeletPlugin.tolerations[0].key=nvidia.com/gpu' \ --set 'kubeletPlugin.tolerations[0].operator=Exists' \ --set 'kubeletPlugin.tolerations[0].effect=NoSchedule'如果是 Ubuntu 節點,請使用
nvidiaDriverRoot="/opt/nvidia"目錄路徑。
TPU
複製
ai-on-gke存放區,存取包含 GPU 和 TPU 的 DRA 驅動程式的 Helm 資訊圖表:git clone https://github.com/ai-on-gke/common-infra.git前往內含圖表的目錄:
cd common-infra/common/charts安裝 TPU DRA 驅動程式:
./tpu-dra-driver/install-tpu-dra-driver.sh
確認基礎架構已準備好支援 DRA
如要確認 DRA 驅動程式 Pod 是否正在執行,請選取下列其中一個選項:
GPU
kubectl get pods -n nvidia-dra-driver-gpu輸出結果會與下列內容相似:
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46sTPU
kubectl get pods -n tpu-dra-driver輸出結果會與下列內容相似:
NAME READY STATUS RESTARTS AGE tpu-dra-driver-kubeletplugin-h6m57 1/1 Running 0 30s確認
ResourceSlice列出您新增的硬體裝置:kubectl get resourceslices -o yaml如果您使用上一節的範例,輸出內容會類似於下列內容,具體取決於您是否設定 GPU 或 TPU:
GPU
apiVersion: v1 items: - apiVersion: resource.k8s.io/v1 kind: ResourceSlice metadata: # Multiple lines are omitted here. spec: devices: - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 0 minor: int: 0 pcieBusID: string: "0000:00:03.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-ccc19e5e-e3cd-f911-65c8-89bcef084e3f capacity: memory: value: 23034Mi name: gpu-0 - attributes: architecture: string: Ada Lovelace brand: string: Nvidia cudaComputeCapability: version: 8.9.0 cudaDriverVersion: version: 13.0.0 driverVersion: version: 580.65.6 index: int: 1 minor: int: 1 pcieBusID: string: "0000:00:04.0" productName: string: NVIDIA L4 resource.kubernetes.io/pcieRoot: string: pci0000:00 type: string: gpu uuid: string: GPU-f783198d-42f9-7cef-9ea1-bb10578df978 capacity: memory: value: 23034Mi name: gpu-1 driver: gpu.nvidia.com nodeName: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm pool: generation: 1 name: gke-cluster-1-dra-gpu-pool-b56c4961-7vnm resourceSliceCount: 1 kind: List metadata: resourceVersion: ""TPU
apiVersion: v1 items: - apiVersion: resource.k8s.io/v1beta1 kind: ResourceSlice metadata: # lines omitted for clarity spec: devices: - basic: attributes: index: int: 0 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "0" - basic: attributes: index: int: 1 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "1" - basic: attributes: index: int: 2 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "2" - basic: attributes: index: int: 3 tpuGen: string: v6e uuid: string: tpu-54de4859-dd8d-f67e-6f91-cf904d965454 name: "3" driver: tpu.google.com nodeName: gke-tpu-b4d4b61b-fwbg pool: generation: 1 name: gke-tpu-b4d4b61b-fwbg resourceSliceCount: 1 kind: List metadata: resourceVersion: ""