本頁說明如何設定 Google Kubernetes Engine (GKE) 基礎架構,以支援動態資源分配 (DRA)。您可以在這個頁面建立叢集,部署 GPU 或 TPU 工作負載,並手動安裝啟用 DRA 所需的驅動程式。
本頁適用於平台管理員,他們希望減少使用專用硬體裝置設定基礎架構的複雜度和額外負擔。
關於 DRA
DRA 是 Kubernetes 內建功能,可讓您在叢集中,彈性地要求、分配及共用 Pod 和容器之間的硬體。詳情請參閱「關於動態資源分配」。
限制
- 不支援節點自動佈建。
- Autopilot 叢集不支援 DRA。
- DRA 不支援自動安裝 GPU 驅動程式。
- 您無法使用下列 GPU 共用功能:
- GPU 分時
- 多執行個體 GPU
- 多程序服務 (MPS)
需求條件
如要使用 DRA,GKE 版本必須為 1.32.1-gke.1489001 以上。
此外,您也應熟悉下列需求和限制,具體視您想使用的硬體類型而定:
事前準備
開始之前,請確認您已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
如果您未使用 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
建立 GKE Standard 叢集
建立 Standard 模式叢集,啟用 DRA 的 Kubernetes Beta 版 API:
gcloud container clusters create CLUSTER_NAME \
--enable-kubernetes-unstable-apis="resource.k8s.io/v1beta1/deviceclasses,resource.k8s.io/v1beta1/resourceclaims,resource.k8s.io/v1beta1/resourceclaimtemplates,resource.k8s.io/v1beta1/resourceslices" \
--cluster-version=GKE_VERSION
更改下列內容:
CLUSTER_NAME
:叢集名稱。GKE_VERSION
:用於叢集和節點的 GKE 版本。必須為 1.32.1-gke.1489001 以上版本。
建立具有 GPU 或 TPU 的 GKE 節點集區
在 GKE 中,您可以將 DRA 與 GPU 和 TPU 搭配使用。節點集區的設定 (例如機器類型、加速器類型、數量、節點作業系統和節點位置) 視您的需求而定。
GPU
如要使用 GPU 的 DRA,請在建立節點集區時執行下列操作:
- 使用
gpu-driver-version=disabled
停用自動安裝 GPU 驅動程式。 - 新增
gke-no-default-nvidia-gpu-device-plugin=true
節點標籤,停用 GPU 裝置外掛程式。 - 新增
nvidia.com/gpu.present=true
節點標籤,讓 DRA 驅動程式 DaemonSet 在節點上執行。
如要為 DRA 建立 GPU 節點集區,請按照下列步驟操作:
使用所需硬體建立節點集區。以下範例會在 Container-Optimized OS 上建立節點集區,其中包含兩個 L4 GPU 的 g2-standard-24 執行個體。
gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --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
:叢集名稱。
在 Container-Optimized OS 或 Ubuntu 節點上,手動安裝驅動程式。如需詳細操作說明,請參閱「手動安裝 NVIDIA GPU 驅動程式」。
TPU
如要為 TPU 使用 DRA,請新增 gke-no-default-tpu-device-plugin=true
節點標籤,停用 TPU 裝置外掛程式。
建立使用 TPU 的節點集區。以下範例會建立 TPU Trillium 節點集區:
gcloud container node-pools create NODEPOOL_NAME \
--cluster CLUSTER_NAME --num-nodes 1 \
--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
:叢集名稱。
安裝 DRA 驅動程式
GPU
提取並更新內含 NVIDIA DRA 驅動程式的 Helm 資訊套件:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo update
安裝 NVIDIA DRA 驅動程式 (版本 25.3.0-rc.4):
helm install nvidia-dra-driver-gpu nvidia/nvidia-dra-driver-gpu --version="25.3.0-rc.4" --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
您可以使用提供的 Helm 資訊套件,為 TPU 安裝 DRA 驅動程式。如要存取 Helm 資訊圖表,請完成下列步驟:
複製
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 46s
TPU
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
如果您使用前一節的範例,根據所用硬體類型,ResourceSlice
會類似下列內容:
GPU
以下範例會建立具有兩個 L4 GPU 的 g2-standard-24 機器。
apiVersion: v1
items:
- apiVersion: resource.k8s.io/v1beta1
kind: ResourceSlice
metadata:
# lines omitted for clarity
spec:
devices:
- basic:
attributes:
architecture:
string: Ada Lovelace
brand:
string: Nvidia
cudaComputeCapability:
version: 8.9.0
cudaDriverVersion:
version: 12.9.0
driverVersion:
version: 575.57.8
index:
int: 0
minor:
int: 0
productName:
string: NVIDIA L4
type:
string: gpu
uuid:
string: GPU-4d403095-4294-6ddd-66fd-cfe5778ef56e
capacity:
memory:
value: 23034Mi
name: gpu-0
- basic:
attributes:
architecture:
string: Ada Lovelace
brand:
string: Nvidia
cudaComputeCapability:
version: 8.9.0
cudaDriverVersion:
version: 12.9.0
driverVersion:
version: 575.57.8
index:
int: 1
minor:
int: 1
productName:
string: NVIDIA L4
type:
string: gpu
uuid:
string: GPU-cc326645-f91d-d013-1c2f-486827c58e50
capacity:
memory:
value: 23034Mi
name: gpu-1
driver: gpu.nvidia.com
nodeName: gke-cluster-gpu-pool-9b10ff37-mf70
pool:
generation: 1
name: gke-cluster-gpu-pool-9b10ff37-mf70
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: ""