In diesem Dokument wird beschrieben, wie Sie Ihre Google Kubernetes Engine-Infrastruktur (GKE) für die Unterstützung der dynamischen Ressourcenzuweisung (Dynamic Resource Allocation, DRA) einrichten. Die Einrichtungsschritte umfassen das Erstellen von Knotenpools, die GPUs oder TPUs verwenden, und das Installieren von DRA-Treibern in Ihrem Cluster. Dieses Dokument richtet sich an Plattformadministratoren, die die Komplexität und den Aufwand für die Einrichtung von Infrastruktur mit spezialisierten Hardwaregeräten reduzieren möchten.
Beschränkungen
- Die automatische Knotenbereitstellung wird nicht unterstützt.
- Autopilot-Cluster unterstützen DRA nicht.
- Die automatische Installation von GPU-Treibern wird mit DRA nicht unterstützt.
- Die folgenden GPU-Freigabefunktionen können nicht verwendet werden:
- GPUs mit Zeitfreigabe
- GPUs mit mehreren Instanzen
- Multi-Process Service (MPS)
- Für TPUs müssen Sie die
v1beta1- undv1beta2-Versionen der DRA API-Arten aktivieren. Diese Einschränkung gilt nicht für GPUs, diev1-API-Versionen verwenden können.
Voraussetzungen
Damit Sie DRA verwenden können, muss auf Ihrem GKE-Cluster die Version 1.34 oder höher ausgeführt werden.
Außerdem sollten Sie sich mit den folgenden Anforderungen und Einschränkungen vertraut machen, je nachdem, welche Hardware Sie verwenden möchten:
Hinweise
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diesen Task verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl
gcloud components updateab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
Sie benötigen einen GKE-Standardcluster mit Version 1.34 oder höher. Sie können auch einen regionalen Cluster erstellen.
Wenn Sie Cloud Shell nicht verwenden, installieren Sie die Helm-Befehlszeile:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 chmod 700 get_helm.sh ./get_helm.shWenn Sie DRA für TPUs verwenden möchten, aktivieren Sie die
v1beta1- undv1beta2-Versionen der DRA-API-Arten: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"
GKE-Knotenpool mit GPUs oder TPUs erstellen
In GKE können Sie DRA sowohl mit GPUs als auch mit TPUs verwenden. Die Konfigurationseinstellungen für den Knotenpool, z. B. Maschinentyp, Beschleunigertyp, Anzahl, Knotenbetriebssystem und Knotenstandorte, hängen von Ihren Anforderungen ab. Wählen Sie eine der folgenden Optionen aus, um einen Knotenpool zu erstellen, der DRA unterstützt:
GPU
Wenn Sie DRA für GPUs verwenden möchten, müssen Sie beim Erstellen des Knotenpools Folgendes tun:
- Deaktivieren Sie die automatische Installation von GPU-Treibern, indem Sie die Option
gpu-driver-version=disabledim Flag--acceleratorangeben, wenn Sie GPUs für einen Knotenpool konfigurieren. - Deaktivieren Sie das GPU-Geräte-Plug-in, indem Sie das Knotenlabel
gke-no-default-nvidia-gpu-device-plugin=truehinzufügen. - Lassen Sie das DRA-Treiber-DaemonSet auf den Knoten ausführen, indem Sie das Knotenlabel
nvidia.com/gpu.present=truehinzufügen.
So erstellen Sie einen GPU-Knotenpool für DRA:
Erstellen Sie einen Knotenpool mit der erforderlichen Hardware. Im folgenden Beispiel wird ein Knotenpool mit einer
g2-standard-24-Instanz unter Container-Optimized OS mit zwei L4-GPUs erstellt.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=trueErsetzen Sie Folgendes:
NODEPOOL_NAME: Der Name des Knotenpools.CLUSTER_NAME: Der Name Ihres Clusters.CONTROL_PLANE_LOCATION: Die Region oder Zone der Clustersteuerungsebene, z. B.us-central1oderus-central1-a.
Installieren Sie die Treiber manuell auf Ihren Container-Optimized OS- oder Ubuntu-Knoten. Eine ausführliche Anleitung finden Sie unter NVIDIA-GPU-Treiber manuell installieren.
TPU
Wenn Sie DRA für TPUs verwenden möchten, müssen Sie das TPU-Geräte-Plug-in deaktivieren, indem Sie das Knotenlabel gke-no-default-tpu-device-plugin=true hinzufügen. Im folgenden Beispiel wird ein TPU Trillium-Knotenpool mit DRA-Unterstützung erstellt:
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
Ersetzen Sie Folgendes:
NODEPOOL_NAME: Der Name des Knotenpools.CLUSTER_NAME: Der Name Ihres Clusters.CONTROL_PLANE_LOCATION: Die Region oder Zone der Clustersteuerungsebene, z. B.us-central1oderus-central1-a.
DRA-Treiber installieren
GPU
Rufen Sie das Helm-Diagramm mit dem NVIDIA DRA-Treiber ab und aktualisieren Sie es:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo updateInstallieren Sie den NVIDIA DRA-Treiber mit der Version
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'Verwenden Sie für Ubuntu-Knoten den Verzeichnispfad
nvidiaDriverRoot="/opt/nvidia".
TPU
Klonen Sie das Repository
ai-on-gke, um auf die Helm-Diagramme zuzugreifen, die die DRA-Treiber für GPUs und TPUs enthalten:git clone https://github.com/ai-on-gke/common-infra.gitWechseln Sie in das Verzeichnis, das die Diagramme enthält:
cd common-infra/common/chartsInstallieren Sie den TPU DRA-Treiber:
./tpu-dra-driver/install-tpu-dra-driver.sh
Prüfen, ob Ihre Infrastruktur für DRA bereit ist
Wählen Sie eine der folgenden Optionen aus, um zu prüfen, ob Ihre DRA-Treiber-Pods ausgeführt werden:
GPU
kubectl get pods -n nvidia-dra-driver-gpuDie Ausgabe sieht etwa so aus:
NAME READY STATUS RESTARTS AGE nvidia-dra-driver-gpu-kubelet-plugin-52cdm 1/1 Running 0 46sTPU
kubectl get pods -n tpu-dra-driverDie Ausgabe sieht etwa so aus:
NAME READY STATUS RESTARTS AGE tpu-dra-driver-kubeletplugin-h6m57 1/1 Running 0 30sPrüfen Sie, ob in
ResourceSlicedie Hardwaregeräte aufgeführt sind, die Sie hinzugefügt haben:kubectl get resourceslices -o yamlWenn Sie das Beispiel im vorherigen Abschnitt verwendet haben, sieht die Ausgabe je nach Konfiguration von GPUs oder TPUs in etwa so aus:
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: ""