GPU-Container-Arbeitslasten verwalten

Sie können GPU-Ressourcen (Graphics Processing Unit) für Ihre Container aktivieren und verwalten. Möglicherweise bevorzugen Sie es, Notebooks für künstliche Intelligenz (KI) und maschinelles Lernen (ML) in einer GPU-Umgebung auszuführen. Die GPU-Unterstützung ist in der GDC-Appliance (Google Distributed Cloud) mit Air Gap standardmäßig aktiviert.

Hinweise

Damit Sie GPUs für Ihre Container bereitstellen können, benötigen Sie Folgendes:

Container für die Nutzung von GPU-Ressourcen konfigurieren

Führen Sie die folgenden Schritte aus, um GPUs in einem Container zu verwenden:

  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. Für Container sind außerdem zusätzliche Berechtigungen für den Zugriff auf GPUs erforderlich. 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 Ihrer 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 Container-Workloads 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