Bei der dynamischen Ressourcenzuweisung plant Kubernetes Pods basierend auf der referenzierten Gerätekonfiguration. Anwendungsoperatoren müssen in ihren Arbeitslasten keine bestimmten Knoten auswählen und nicht dafür sorgen, dass jeder Pod genau die Anzahl von Geräten anfordert, die an diese Knoten angehängt sind. Dieser Vorgang ähnelt der Zuweisung von Volumes für den Speicher.
Mit dieser Funktion können Sie KI-Arbeitslasten ausführen, indem Sie die GPU-Ressourcen in Ihren Bare-Metal-Clustern dynamisch und präzise zuweisen. So verbessern Sie die Ressourcennutzung und Leistung für anspruchsvolle Arbeitslasten.
Diese Seite richtet sich an Administratoren, Architekten und Betreiber, die den Lebenszyklus der zugrunde liegenden technischen Infrastruktur verwalten. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud Inhalten verweisen, finden Sie unter Häufig verwendete GKE-Nutzerrollen und Aufgaben.
Hinweis
Bevor Sie Ihre GPU-Arbeitslasten für die Verwendung der dynamischen Ressourcenzuweisung konfigurieren, prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:
- Ihr Bare-Metal-Cluster hat Version 1.33.0 oder höher.
- Ihr Betriebssystem ist entweder Ubuntu 22.04 oder Red Hat Enterprise Linux (RHEL) 9.4.
- Sie haben Ihren Cluster aktualisiert, um die dynamische Ressourcenzuweisung zu aktivieren, wie unter Dynamische Ressourcenzuweisung aktivieren beschrieben.
- Sie haben mindestens einen Knoten mit einer angehängten GPU und dem installierten NVIDIA-GPU-Treiber. Weitere Informationen finden Sie unter Gebündelten NVIDIA-GPU-Operator installieren oder deinstallieren.
- Wenn Sie den gebündelten NVIDIA-GPU-Operator verwenden, wird die Container Device Interface (CDI) in Version 1.33.0 oder höher standardmäßig aktiviert.
Wenn Sie einen manuell installierten GPU-Operator verwenden, muss CDI in der
ClusterPolicyaktiviert sein. - Sie haben die Anleitung unter NVIDIA DRA-Treiber für GPUs befolgt, um den NVIDIA DRA-Treiber auf allen Knoten mit angehängter GPU zu installieren.
GPU-Arbeitslasten erstellen, die die dynamische Ressourcenzuweisung verwenden
Damit Ihre GPU-Arbeitslasten die dynamische Ressourcenzuweisung zum Anfordern von GPUs nutzen können, müssen sie sich in einem freigegebenen Namespace mit einem ResourceClaim befinden, der die Anfrage für die Zuweisung von GPU-Geräten beschreibt. Ihre Arbeitslasten müssen auf den ResourceClaim verweisen, damit Kubernetes GPU-Ressourcen zuweisen kann.
In den folgenden Schritten wird eine Umgebung eingerichtet, in der Ihre Arbeitslasten die dynamische Ressourcenzuweisung verwenden, um GPU-Ressourcen anzufordern:
Erstellen Sie einen neuen
Namespacein Ihrem Cluster, um Ressourcen im Zusammenhang mit der dynamischen Ressourcenzuweisung zu erstellen:cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Namespace metadata: name: NAMESPACE_NAME EOFErsetzen Sie Folgendes:
CLUSTER_KUBECONFIG: der Pfad der Kubeconfig-Datei des Nutzerclusters.NAMESPACE_NAMEdurch den Namen für Ihren Namespace für die dynamische Ressourcenzuweisung.
Erstellen Sie einen
ResourceClaim, um die Anfrage für den GPU-Zugriff zu beschreiben:cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: resource.k8s.io/v1beta1 kind: ResourceClaim metadata: namespace: NAMESPACE_NAME name: RESOURCE_CLAIM_NAME spec: devices: requests: - name: gpu deviceClassName: gpu.nvidia.com EOFErsetzen Sie
RESOURCE_CLAIM_NAMEdurch den Namen Ihres Ressourcenanspruchs für GPU-Anfragen.Erstellen Sie Arbeitslasten, die auf den im vorherigen Schritt erstellten
ResourceClaimverweisen.In den folgenden Arbeitslastbeispielen wird gezeigt, wie Sie im Namespace
dra-testauf einenResourceClaimmit dem Namengpu-claimverweisen. Die Container impod1Pod sind NVIDIA CUDA-Beispiele (Compute Unified Device Architecture) , die für die Ausführung von CUDA-Arbeitslasten auf den GPUs entwickelt wurden. Wenn derpod1-Pod erfolgreich abgeschlossen wurde, bedeutet das, dass die dynamische Ressourcenzuweisung ordnungsgemäß funktioniert und bereit ist, GPU-Ressourcen in Ihrem Cluster zu verwalten.Ubuntu
Wenden Sie das Manifest mit dem folgenden Befehl auf Ihren Cluster an:
cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Pod metadata: name: pod1 namespace: dra-test spec: restartPolicy: OnFailure resourceClaims: - name: gpu resourceClaimName: gpu-claim containers: - name: ctr0 image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0 resources: claims: - name: gpu - name: ctr1 image: nvcr.io/nvidia/k8s/cuda-sample:devicequery resources: claims: - name: gpu EOF
RHEL
Wenden Sie das Manifest mit dem folgenden Befehl auf Ihren Cluster an:
cat <<EOF | kubectl apply --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: v1 kind: Pod metadata: name: pod1 namespace: dra-test spec: restartPolicy: OnFailure resourceClaims: - name: gpu resourceClaimName: gpu-claim containers: - name: ctr0 image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda12.5.0 resources: claims: - name: gpu - name: ctr1 image: nvcr.io/nvidia/k8s/cuda-sample:devicequery resources: claims: - name: gpu EOF
Beschränkungen
Beachten Sie bei der Verwendung der dynamischen Ressourcenzuweisung die folgenden Einschränkungen:
Wenn Sie das RHEL-Betriebssystem mit einer unterstützten Version des NVIDIA-GPU-Operators verwenden, werden die Geräteeinfügung und die SELinux-Kennzeichnung automatisch von der Container Device Interface (CDI) verarbeitet. Sie müssen die SELinux-Richtlinie nicht manuell konfigurieren oder
securityContextfür den Pod festlegen.Diese Funktion verwendet die
resource.k8s.io/v1beta1API-Gruppe, die sich von der Open-Source-Kubernetes-API-Gruppe für diese Funktion,resource.k8s.io/v1, unterscheidet. Diev1Open-Source-API-Gruppe bietet mehr Funktionen und eine bessere Stabilität als diev1beta1API-Gruppe.
Nächste Schritte
- Weitere Informationen zur dynamischen Ressourcenzuweisungfinden Sie in der Kubernetes-Dokumentation.
- Informationen zum Bereitstellen von LLMs von Drittanbietern auf Bare-Metal-Servern.