GPU-Geräte mit dynamischer Ressourcenzuweisung verwalten

Auf dieser Seite wird beschrieben, wie Sie Ihre GPU-Arbeitslasten so konfigurieren, dass sie die dynamische Ressourcenzuweisung in Ihren Bare-Metal-Clustern von Google Distributed Cloud verwenden. Die dynamische Ressourcenzuweisung ist eine Kubernetes API, mit der Sie generische Ressourcen wie GPUs für Pods und Container anfordern und freigeben können. Diese Ressourcen werden von Treibern von Drittanbietern verwaltet.

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 ClusterPolicy aktiviert 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:

  1. Erstellen Sie einen neuen Namespace in 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
    EOF
    

    Ersetzen Sie Folgendes:

    • CLUSTER_KUBECONFIG: der Pfad der Kubeconfig-Datei des Nutzerclusters.

    • NAMESPACE_NAME durch den Namen für Ihren Namespace für die dynamische Ressourcenzuweisung.

  2. 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
    EOF
    

    Ersetzen Sie RESOURCE_CLAIM_NAME durch den Namen Ihres Ressourcenanspruchs für GPU-Anfragen.

  3. Erstellen Sie Arbeitslasten, die auf den im vorherigen Schritt erstellten ResourceClaim verweisen.

    In den folgenden Arbeitslastbeispielen wird gezeigt, wie Sie im Namespace dra-test auf einen ResourceClaim mit dem Namen gpu-claim verweisen. Die Container im pod1 Pod sind NVIDIA CUDA-Beispiele (Compute Unified Device Architecture) , die für die Ausführung von CUDA-Arbeitslasten auf den GPUs entwickelt wurden. Wenn der pod1-Pod erfolgreich abgeschlossen wurde, bedeutet das, dass die dynamische Ressourcenzuweisung ordnungsgemäß funktioniert und bereit ist, GPU-Ressourcen in Ihrem Cluster zu verwalten.

    Ubuntu

    1. 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

    1. 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 securityContext für den Pod festlegen.

  • Diese Funktion verwendet die resource.k8s.io/v1beta1 API-Gruppe, die sich von der Open-Source-Kubernetes-API-Gruppe für diese Funktion, resource.k8s.io/v1, unterscheidet. Die v1 Open-Source-API-Gruppe bietet mehr Funktionen und eine bessere Stabilität als die v1beta1 API-Gruppe.

Nächste Schritte