GPU-Container-Arbeitslasten verwalten

Sie können GPU-Ressourcen (Graphics Processing Unit) für Ihre Container 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. Wenn Sie GPU-Containerarbeitslasten ausführen möchten, benötigen Sie einen Kubernetes-Cluster, der GPU-Geräte unterstützt. Die GPU-Unterstützung ist standardmäßig für Kubernetes-Cluster aktiviert, für die GPU-Maschinen bereitgestellt wurden.

Dieses Dokument richtet sich an Anwendungsentwickler in der Gruppe der Anwendungsoperatoren, die für die Erstellung von Anwendungsarbeitslasten für ihre Organisation verantwortlich sind. Weitere Informationen finden Sie unter Dokumentation zu Zielgruppen für GDC mit Air Gap.

Hinweise

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

  • Ein Kubernetes-Cluster mit einer GPU-Maschinenklasse. Im Abschnitt Unterstützte GPU-Karten finden Sie Optionen für die Konfiguration Ihrer Clustermaschinen.

  • Die Rolle „Nutzercluster-Administrator“ (user-cluster-admin) zum Prüfen von GPUs in einem freigegebenen Cluster und die Rolle „Namespace-Administrator“ (namespace-admin) in Ihrem Projektnamespace zum Bereitstellen von GPU-Arbeitslasten in einem freigegebenen Cluster.

  • Die Rolle „Standard Cluster Admin“ (standard-cluster-admin) zum Prüfen von GPUs in einem Standardcluster und die Rolle „Cluster Developer“ (cluster-developer) in Ihrem Standardcluster zum Bereitstellen von GPU-Arbeitslasten in einem Standardcluster.

  • Wenn Sie Befehle für einen Kubernetes-Cluster ausführen möchten, benötigen Sie die folgenden Ressourcen:

    • Suchen Sie den Namen des Kubernetes-Clusters oder fragen Sie ein Mitglied der Plattformadministratorgruppe nach dem Clusternamen.

    • Melden Sie sich an und generieren Sie die kubeconfig-Datei für den Kubernetes-Cluster, falls Sie noch keine haben.

    • Verwenden Sie den kubeconfig-Pfad des Kubernetes-Clusters, um KUBERNETES_CLUSTER_KUBECONFIG in dieser Anleitung zu ersetzen.

  • Der kubeconfig-Pfad für den zonalen Management-API-Server, auf dem Ihr Kubernetes-Cluster gehostet wird. Melden Sie sich an und generieren Sie die kubeconfig-Datei, falls Sie noch keine haben.

  • Der kubeconfig-Pfad für den Infrastrukturcluster der Organisation in der Zone, in der Ihre GPUs gehostet werden sollen. Melden Sie sich an und generieren Sie die kubeconfig-Datei, falls Sie noch keine haben.

Container für die Nutzung von GPU-Ressourcen konfigurieren

So verwenden Sie diese GPUs in einem Container:

  1. Prüfen Sie, ob Ihr Kubernetes-Cluster Knotenpools mit GPU-Unterstützung hat:

    kubectl describe clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

    Ersetzen Sie Folgendes:

    • KUBERNETES_CLUSTER_NAME: der Name des Clusters.
    • KUBERNETES_CLUSTER_NAMESPACE: der Namespace des Clusters. Verwenden Sie für freigegebene Cluster den Namespace platform. Verwenden Sie für Standardcluster den Projektnamespace des Clusters.
    • MANAGEMENT_API_SERVER: Der Kubeconfig-Pfad des zonalen API-Servers, auf dem der Kubernetes-Cluster gehostet wird. Wenn Sie noch keine kubeconfig-Datei für den API-Server in Ihrer Zielzone generiert haben, lesen Sie den Abschnitt Anmelden.

    Die relevante Ausgabe sieht etwa so aus:

    # Several lines of code are omitted here.
    spec:
      nodePools:
      - machineTypeName: a2-ultragpu-1g-gdc
        nodeCount: 2
    # Several lines of code are omitted here.
    

    Eine vollständige Liste der unterstützten GPU-Maschinentypen und MIG-Profile (Multi-Instance GPU) finden Sie unter Maschinentypen für Clusternknoten.

  2. Fügen Sie die Felder .containers.resources.requests und .containers.resources.limits der Containerspezifikation hinzu. Jeder Ressourcenname ist je nach Maschinenklasse unterschiedlich. Prüfen Sie die Zuweisung Ihrer GPU-Ressourcen, um die Namen Ihrer GPU-Ressourcen zu ermitteln.

    Die folgende Containerspezifikation fordert beispielsweise drei Partitionen einer GPU von einem a2-ultragpu-1g-gdc-Knoten an:

     ...
     containers:
     - name: my-container
       image: "my-image"
       resources:
         requests:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
         limits:
           nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3
     ...
    
  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 KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    Ersetzen Sie Folgendes:

    • CONTAINER_MANIFEST_FILE: Die YAML-Manifestdatei für Ihre Containerarbeitslast.
    • KUBERNETES_CLUSTER_NAMESPACE: der Namespace des Clusters. Verwenden Sie für freigegebene Cluster den Namespace platform. Verwenden Sie für Standardcluster den Projektnamespace des Clusters.
    • KUBERNETES_CLUSTER_KUBECONFIG: Der kubeconfig-Pfad des Clusters.

GPU-Ressourcenzuordnung prüfen

  • Verwenden Sie den folgenden Befehl, um die Zuweisung von GPU-Ressourcen zu prüfen:

    kubectl describe nodes NODE_NAME --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG
    

    Ersetzen Sie Folgendes:

    • NODE_NAME: Der Knoten, der die GPUs verwaltet, die Sie untersuchen möchten.
    • KUBERNETES_CLUSTER_KUBECONFIG: Der kubeconfig-Pfad des Clusters.

    Die relevante Ausgabe sieht etwa so aus:

    # Several lines of code are omitted here.
    Capacity:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    Allocatable:
      nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7
    # Several lines of code are omitted here.
    

Notieren Sie sich die Ressourcennamen für Ihre GPUs. Sie müssen sie angeben, wenn Sie einen Container für die Verwendung von GPU-Ressourcen konfigurieren.

Nächste Schritte