Auf dieser Seite wird erläutert, wie Sie Ihre Google Kubernetes Engine-Infrastruktur (GKE) für die Unterstützung der dynamischen Ressourcenzuweisung (Dynamic Resource Allocation, DRA) einrichten. Auf dieser Seite erstellen Sie Cluster, in denen GPU- oder TPU-Arbeitslasten bereitgestellt werden können, und installieren manuell die Treiber, die Sie zum Aktivieren von DRA benötigen.
Diese Seite richtet sich an Plattformadministratoren, die die Komplexität und den Aufwand für die Einrichtung von Infrastruktur mit speziellen Hardwaregeräten reduzieren möchten.
Informationen zu DRA
DRA ist eine integrierte Kubernetes-Funktion, mit der Sie Hardware in Ihrem Cluster flexibel für Pods und Container anfordern, zuweisen und freigeben können. Weitere Informationen finden Sie unter Dynamische Ressourcenzuweisung.
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)
Voraussetzungen
Wenn Sie DRA verwenden möchten, muss Ihre GKE-Version mindestens Version 1.32.1-gke.1489001 sein.
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 diese Aufgabe 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
gcloud components update
ab.
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.sh
GKE-Standardcluster erstellen
Erstellen Sie einen Cluster im Standardmodus, in dem die Kubernetes-Beta-APIs für DRA aktiviert sind:
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
Ersetzen Sie Folgendes:
CLUSTER_NAME
: ein Name für Ihren Cluster.GKE_VERSION
: Die GKE-Version, die für den Cluster und die Knoten verwendet werden soll. Muss 1.32.1-gke.1489001 oder höher sein.
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.
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 mit
gpu-driver-version=disabled
. - Deaktivieren Sie das GPU-Geräte-Plug-in, indem Sie das Knotenlabel
gke-no-default-nvidia-gpu-device-plugin=true
hinzufügen. - Lassen Sie das DRA-Treiber-DaemonSet auf den Knoten ausführen, indem Sie das Knotenlabel
nvidia.com/gpu.present=true
hinzufü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 g2-standard-24-Instanzen unter Container-Optimized OS mit zwei L4-GPUs erstellt.
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
Ersetzen Sie Folgendes:
NODEPOOL_NAME
: Der Name des Knotenpools.CLUSTER_NAME
: Der Name Ihres Clusters.
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.
Erstellen Sie einen Knotenpool, der TPUs verwendet. Im folgenden Beispiel wird ein TPU-Trillium-Knotenpool erstellt:
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
Ersetzen Sie Folgendes:
NODEPOOL_NAME
: Der Name des Knotenpools.CLUSTER_NAME
: Der Name Ihres Clusters.
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 update
Installieren Sie den NVIDIA DRA-Treiber mit Version 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
Verwenden Sie für Ubuntu-Knoten den Verzeichnispfad
nvidiaDriverRoot="/opt/nvidia"
.
TPU
Sie können DRA-Treiber für TPUs mit dem bereitgestellten Helm-Diagramm installieren. So erhalten Sie Zugriff auf die Helm-Charts:
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.git
Wechseln Sie in das Verzeichnis, das die Diagramme enthält:
cd common-infra/common/charts
Installieren Sie den TPU DRA-Treiber:
./tpu-dra-driver/install-tpu-dra-driver.sh
Prüfen, ob Ihre Infrastruktur für DRA bereit ist
Prüfen Sie, ob der DRA-Treiber-Pod ausgeführt wird.
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
Prüfen Sie, ob in ResourceSlice
die Hardwaregeräte aufgeführt sind, die Sie hinzugefügt haben:
kubectl get resourceslices -o yaml
Wenn Sie das Beispiel aus dem vorherigen Abschnitt verwendet haben, sieht ResourceSlice
je nach verwendeter Hardware etwa so aus:
GPU
Im folgenden Beispiel wird eine g2-standard-24-Maschine mit zwei L4-GPUs erstellt.
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: ""