本文說明如何手動設定 Google Kubernetes Engine (GKE) 基礎架構,以支援動態資源分配 (DRA)。設定步驟包括建立使用 GPU 的節點集區,以及安裝 DRA 驅動程式。
本文適用於平台管理員,協助他們使用專用硬體裝置建立基礎架構,供應用程式運算子在工作負載中聲明。
限制
限制如下:
- GKE 中 DRA 的限制
- 裝置專屬限制 (無論是否使用 DRA 都適用): 標準叢集上的 GPU 工作負載
事前準備
開始之前,請確認您已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
建立具有 GPU 的 GKE 節點集區
本節說明如何建立 GPU 節點集區,並安裝對應的 DRA 驅動程式。本節中的步驟僅適用於手動建立的節點集區。如要建立支援 DRA 的 GPU 節點集區,請執行下列操作:
- 停用自動安裝 GPU 驅動程式:在
--accelerator標記中指定gpu-driver-version=disabled選項。 - 停用 GPU 裝置外掛程式:將
gke-no-default-nvidia-gpu-device-plugin=true節點標籤新增至節點集區。 - 執行 DRA 驅動程式 DaemonSet:將
nvidia.com/gpu.present=true節點標籤新增至節點集區。 - 設定自動調度資源:如要在節點集區中使用叢集自動配置器,請將
cloud.google.com/gke-nvidia-gpu-dra-driver=true節點標籤新增至節點集區。叢集自動配置器會使用這個節點標籤,識別執行 GPU 的 DRA 驅動程式的節點。
如要建立及設定 GPU 節點集區,請按照下列步驟操作:
建立 GPU 節點集區。下列指令範例會建立具有不同設定的節點集區:
建立具有
g2-standard-24執行個體的節點集區,該執行個體有兩個 L4 GPU:gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \ --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。NODE_LOCATION1,NODE_LOCATION2,...:以逗號分隔的區域清單,這些區域與控制層位於相同區域,可用於建立節點。選擇提供 GPU 的區域。
建立自動調度資源的節點集區,每個執行個體都有一個 NVIDIA A100 (80 GB) GPU:
a2-ultragpu-1ggcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --node-locations=NODE_LOCATION1,NODE_LOCATION2,... \ --enable-autoscaling \ --max-nodes=5 \ --machine-type="a2-ultragpu-1g" \ --accelerator="type=nvidia-a100-80gb,count=1,gpu-driver-version=disabled" \ --num-nodes="1" \ --node-labels=gke-no-default-nvidia-gpu-device-plugin=true,nvidia.com/gpu.present=true,cloud.google.com/gke-nvidia-gpu-dra-driver=true
安裝 DRA 驅動程式
提取並更新內含 NVIDIA DRA 驅動程式的 Helm 資訊套件:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo update安裝 NVIDIA DRA GPU 驅動程式,版本須為 25.8.0 以上:
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu \ --version="25.8.0" --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 節點,請在
--set nvidiaDriverRoot旗標中指定"/opt/nvidia"目錄路徑。
確認基礎架構已準備好支援 DRA
確認 DRA 驅動程式 Pod 正在執行:
kubectl get pods -n nvidia-dra-driver-gpu輸出結果會與下列內容相似:
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46s確認 ResourceSlice 列出您新增的硬體裝置:
kubectl get resourceslices -o yaml輸出結果會與下列內容相似:
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: ""