GPU-Geräte mit dynamischer Ressourcenzuweisung verwalten

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

Bei der dynamischen Ressourcenzuweisung plant Kubernetes Pods basierend auf der referenzierten Gerätekonfiguration. App-Betreiber müssen in ihren Arbeitslasten keine bestimmten Knoten auswählen und nicht dafür sorgen, dass jeder Pod genau die Anzahl der Geräte anfordert, die an diese Knoten angehängt sind. Dieser Vorgang ähnelt dem Zuweisen 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 lassen sich die Ressourcennutzung und die Leistung für anspruchsvolle Arbeitslasten verbessern.

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 Enterprise-Nutzerrollen und -Aufgaben.

Hinweise

Bevor Sie Ihre GPU-Arbeitslasten für die Verwendung der dynamischen Ressourcenzuweisung konfigurieren, müssen Sie prüfen, 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 Knotencomputer mit einer angehängten GPU und dem installierten NVIDIA-GPU-Treiber. Weitere Informationen finden Sie unter Mitgelieferten NVIDIA GPU-Operator installieren oder deinstallieren.
  • Sie haben die Anleitung unter NVIDIA DRA Driver for GPUs (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 Ressourcenzuordnung 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, das die Anfrage für die Zuweisung von GPU-Geräten beschreibt. Ihre Arbeitslasten müssen auf ResourceClaim verweisen, damit Kubernetes GPU-Ressourcen zuweisen kann.

In den folgenden Schritten wird eine Umgebung eingerichtet, in der Ihre Arbeitslasten GPU-Ressourcen über die dynamische Ressourcenzuweisung anfordern:

  1. Wenn Sie Ressourcen im Zusammenhang mit der dynamischen Ressourcenzuweisung erstellen möchten, erstellen Sie eine neue Namespace in Ihrem Cluster:

    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 eine 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 die ResourceClaim verweisen, die im vorherigen Schritt erstellt wurde.

    Die folgenden Beispiele für Arbeitslasten zeigen, wie Sie in einem Namespace dra-test auf eine 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 wird, 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. Laden Sie das SELinux-Richtlinienmodul nvidia_container_t herunter und installieren Sie es. Es ist für den Zugriff auf GPUs erforderlich.

      Weitere Informationen finden Sie im NVIDIA-Repository dgx-selinux.

    2. 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
        securityContext:
          seLinuxOptions:
            type: nvidia_container_t
        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 RHEL OS verwenden, kann die SELinux-Richtlinie den Zugriff von Containern auf GPUs verhindern. Weitere Informationen finden Sie unter GPUs in Containern auf Bare-Metal-RHEL 8 verwenden.

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

Nächste Schritte