GPU-Container-Arbeitslasten verwalten

Sie können Grafikprozessoren (Graphics Processing Units, GPUs) in Ihren Containern aktivieren und verwalten. Möglicherweise möchten Sie beispielsweise Notebooks für künstliche Intelligenz (KI) und maschinelles Lernen (ML) in einer GPU-Umgebung ausführen. Die GPU-Unterstützung ist in der Google Distributed Cloud (GDC) mit Air Gap standardmäßig aktiviert.

Hinweis

Zum Ausführen der Aufgaben in diesem Dokument müssen Sie die erforderlichen Berechtigungen anfordern und Ihre Umgebung vorbereiten.

IAM-Rollen anfordern

Wenn Sie die Ressourcen in einem Kubernetes-Cluster erstellen, löschen, bearbeiten oder ansehen möchten, bitten Sie den IAM-Administrator Ihrer Organisation, Ihnen die Rolle Namespace-Administrator (namespace-admin) in Ihrem Projekt-Namespace zuzuweisen. Mit dieser Rolle können Sie GPU-Arbeitslasten in Ihrem Projekt-Namespace bereitstellen.

Umgebung vorbereiten

  • Melden Sie sich an und generieren Sie die kubeconfig-Datei für den Bare-Metal-Kubernetes-Cluster.

  • Ersetzen Sie in dieser Anleitung CLUSTER_KUBECONFIG durch den kubeconfig-Pfad des Kubernetes-Clusters.

Container für die Verwendung von GPU-Ressourcen konfigurieren

So verwenden Sie GPUs in einem Container:

  1. Prüfen Sie, ob die Knoten Ihres Kubernetes-Clusters die Zuweisung von GPU-Ressourcen unterstützen:

    kubectl describe nodes NODE_NAME
    

    Ersetzen Sie NODE_NAME durch den Knoten, der die GPUs verwaltet, die Sie prüfen möchten.

    Die relevante Ausgabe sieht etwa so aus:

    Capacity:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    Allocatable:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
    
  2. Fügen Sie der Containerspezifikation die Felder .containers.resources.requests und .containers.resources.limits hinzu. Da Ihr Kubernetes-Cluster mit GPU-Maschinen vorkonfiguriert ist, ist die Konfiguration für alle Arbeitslasten gleich:

     ...
     containers:
     - name: CONTAINER_NAME
       image: CONTAINER_IMAGE
       resources:
         requests:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
         limits:
           nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE: 1
     ...
    

    Ersetzen Sie Folgendes:

    • CONTAINER_NAME: Der Name des Containers.
    • CONTAINER_IMAGE: Das Container-Image für den Zugriff auf die GPU-Maschinen. Sie müssen den Container Registry-Pfad und die Version des Images angeben, z. B. REGISTRY_PATH/hello-app:1.0.
  3. Container benötigen auch zusätzliche Berechtigungen für den Zugriff auf GPUs. Fügen Sie für jeden Container, der GPUs anfordert, der Containerspezifikation die folgenden Berechtigungen hinzu:

    ...
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    ...
    
  4. Wenden Sie die Container-Manifestdatei an:

    kubectl apply -f CONTAINER_MANIFEST_FILE \
        -n NAMESPACE \
        --kubeconfig CLUSTER_KUBECONFIG
    

    Ersetzen Sie Folgendes:

    • CONTAINER_MANIFEST_FILE: Die YAML-Datei für die benutzerdefinierte Ressource der Containerarbeitslast.
    • NAMESPACE: Der Projekt-Namespace, in dem die Containerarbeitslasten bereitgestellt werden sollen.
    • CLUSTER_KUBECONFIG: Die kubeconfig-Datei für den Bare-Metal-Kubernetes-Cluster, in dem Sie Containerarbeitslasten bereitstellen.
  5. Prüfen Sie, ob Ihre Pods ausgeführt werden und die GPUs verwenden:

    kubectl get pods -A | grep CONTAINER_NAME \
        -n NAMESPACE \
        --kubeconfig CLUSTER_KUBECONFIG
    

    Die relevante Ausgabe sieht etwa so aus:

    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
    Ready:          True
    Restart Count:  0
    Limits:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1
    Requests:
      nvidia.com/gpu-pod-NVIDIA_A100_80GB_PCIE:  1