GPU-beschleunigtes Ray für KI-Arbeitslasten in GKE bereitstellen


Auf dieser Seite wird beschrieben, wie Sie einen GPU-fähigen Ray-Cluster in Google Kubernetes Engine (GKE) einrichten und ausführen, um Ihre KI-/ML-Arbeitslasten zu skalieren.

Warum Ray verwenden?

Mit Ray in GKE, das durch KubeRay ermöglicht wird, können Sie Python- und KI-Anwendungen skalieren. Ray übernimmt die Anwendungsskalierung und GKE verwaltet die zugrunde liegenden Server und Ressourcen.

Diese Kombination erleichtert die Verwaltung von Ressourcen, die automatische Anpassung der Kapazität, die Gewährleistung der Zuverlässigkeit und die Bereitstellung Ihrer Anwendungen in verschiedenen Umgebungen. Wenn Sie Ihre verteilten Ray-Anwendungen mit Ihrer vorhandenen Cloud-Infrastruktur und Ihren Tools in GKE verbinden, können Sie den Betrieb vereinfachen und mit Standard-Kubernetes-Methoden eine robuste, skalierbare Plattform für komplexe Aufgaben bereitstellen.

Weitere Informationen finden Sie im Blogpost Why GKE for your Ray AI workloads.

Hinweise

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the GKE API.

    Enable the API

  4. Install the Google Cloud CLI.

  5. Configure the gcloud CLI to use your federated identity.

    For more information, see Sign in to the gcloud CLI with your federated identity.

  6. To initialize the gcloud CLI, run the following command:

    gcloud init
  7. kubectl installieren: kubectl ist das primäre Befehlszeilentool für die Interaktion mit GKE-Clustern. Wenn Sie Cloud Shell verwenden, ist kubectl bereits installiert. Andernfalls installieren Sie es in Ihrem Terminal mit dem Befehl gcloud components install kubectl.

    Führen Sie den folgenden Befehl aus, um die Installation zu überprüfen: kubectl version --client

  8. Ray installieren: Wir empfehlen dringend, vor der Installation von Ray eine virtuelle Python-Umgebung (venv) zu erstellen und zu aktivieren, damit Sie die Abhängigkeiten isolieren können.
    1. Installieren Sie Python.
    2. Neue virtuelle Umgebung erstellen und aktivieren
    3. Installieren Sie die neueste stabile Version von Ray, indem Sie den folgenden Befehl in Ihrer virtuellen Umgebung ausführen: pip install -U "ray[default]".
    4. Führen Sie den folgenden Befehl aus, um die Installation zu überprüfen: ray --version. Notieren Sie sich die Ray-Version (z. B. 2.44.1) in der Ausgabe.
  9. Prüfen Sie, ob Ihr Google Cloud Projekt ein ausreichendes Kontingent für L4-GPUs hat. Weitere Informationen finden Sie unter GPUs und Zuteilungskontingente.

GKE-Cluster erstellen

Sie können Ihre Arbeitslast in einem GKE-Cluster im Autopilot- oder Standardmodus bereitstellen. Für eine vollständig verwaltete Kubernetes-Umgebung empfehlen wir die Verwendung eines Autopilot-Clusters. Informationen zum Auswählen des GKE-Betriebsmodus, der für Ihre Arbeitslasten am besten geeignet ist, finden Sie unter GKE-Betriebsmodus auswählen.

Autopilot

Im Autopilot-Modus verwaltet Google Ihre Clusterkonfiguration, einschließlich Skalierung, Sicherheit und anderer vorkonfigurierter Einstellungen. Autopilot-Cluster sind für die Ausführung der meisten Produktionsarbeitslasten optimiert und stellen Rechenressourcen basierend auf Ihren Kubernetes-Manifesten bereit.

  1. Führen Sie im Terminal den folgenden gcloud container clusters create-auto-Befehl aus:

    gcloud container clusters create-auto my-ray-enabled-cluster \
        --enable-ray-operator \
        --enable-ray-cluster-monitoring \
        --enable-ray-cluster-logging \
        --location=us-central1
    

    Mit diesem Google Cloud CLI-Befehl wird ein Autopilot-Cluster mit dem Namen my-ray-enabled-cluster mit den folgenden Einstellungen erstellt:

    • --enable-ray-operator: Installiert den Ray Operator im Cluster, wodurch die Verwaltung von Ray-Clustern in Kubernetes vereinfacht wird.
    • --enable-ray-cluster-monitoring: Richtet die Integration mit Cloud Monitoring für Ray-Clustermesswerte ein.
    • --enable-ray-cluster-logging: Konfiguriert die Einbindung von Cloud Logging, um Logs aus Ihrem Ray-Cluster zu erfassen.
    • --location=us-central1: Gibt die geografische Region an, in der der GKE-Cluster erstellt wird. Die Verfügbarkeit von Beschleunigern und die unterstützten Typen variieren je nach Standort. Weitere Informationen finden Sie unter GPU-Regionen und -Zonen.

    In Autopilot-Clustern werden Knoten (einschließlich GPU-fähiger Knoten, die Compute-Klassen verwenden) automatisch bereitgestellt und skaliert, basierend auf den Anforderungen der Arbeitslast. So werden sowohl die Auslastung als auch die Kosten optimiert. Durch die automatische Bereitstellung und Skalierung von Ressourcen in Autopilot-Clustern wird die Ressourcenverwaltung vereinfacht und Sie können sich auf Ihre Modelle anstatt auf die Infrastruktur konzentrieren.

    Wenn Sie einen GKE Standard-Cluster verwenden, können sich die Flags und Einstellungen zum Aktivieren von Ray unterscheiden. Weitere Informationen finden Sie unter Ray-Operator in GKE aktivieren.

  2. Konfigurieren Sie kubectl für die Kommunikation mit Ihrem Cluster:

    gcloud container clusters get-credentials my-ray-enabled-cluster \
        --region=us-central1
    

Standard

Im Standardmodus haben Sie mehr Kontrolle über die zugrunde liegende Infrastruktur Ihres GKE-Cluster. Sie verwalten Knotenpools, Knotengrößen und andere Konfigurationen direkt, was eine bessere Anpassung ermöglicht. Standardcluster eignen sich für Arbeitslasten, die bestimmte Konfigurationen oder eine genaue Kontrolle über Ressourcen erfordern.

  1. Führen Sie im Terminal den folgenden gcloud container clusters create-Befehl aus:

    gcloud container clusters create my-ray-enabled-cluster \
        --addons=RayOperator \
        --enable-ray-cluster-monitoring \
        --enable-ray-cluster-logging \
        --region=us-central1 \
        --enable-autoprovisioning \
        --max-cpu=10 \
        --max-memory=64
    

    Mit diesem Google Cloud CLI-Befehl wird ein Standard-Cluster mit dem Namen my-ray-enabled-cluster mit den folgenden Einstellungen erstellt:

    • --addons=RayOperator: Installiert den Ray Operator im Cluster, wodurch die Verwaltung von Ray-Clustern in Kubernetes vereinfacht wird.
    • --enable-ray-cluster-monitoring: Richtet die Integration mit Cloud Monitoring für Ray-Clustermesswerte ein.
    • --enable-ray-cluster-logging: Konfiguriert die Einbindung von Cloud Logging, um Logs aus Ihrem Ray-Cluster zu erfassen.
    • --region=us-central1: Gibt die geografische Region an, in der der GKE-Cluster erstellt wird. Die Verfügbarkeit von Beschleunigern und die unterstützten Typen variieren je nach Standort. Weitere Informationen finden Sie unter GPU-Regionen und -Zonen.
    • --enable-autoprovisioning: erstellt und löscht automatisch Knotenpools und skaliert Knoten in diesen Pools basierend auf den Anforderungen Ihrer Arbeitslast.
    • --max-cpu: maximale Anzahl der Kerne, auf die der Cluster skaliert werden kann.
    • --max-memory: die maximale Anzahl von Gigabyte Arbeitsspeicher, auf die der Cluster skaliert werden kann.
  2. Konfigurieren Sie kubectl für die Kommunikation mit Ihrem Cluster:

    gcloud container clusters get-credentials my-ray-enabled-cluster \
        --region=us-central1
    

KubeRay-Plug-in kubectl ray installieren

Das kubectl ray-Plug-in vereinfacht gängige Ray-Workflows in Kubernetes. Die aktuelle Installationsanleitung finden Sie in der KubeRay-Dokumentation.

  1. Rufen Sie die Seite mit den Releases auf und laden Sie die Binärdatei für Ihre Plattform herunter. Wenn Sie beispielsweise das kubectl ray-Plug-in in der Version 1.3.2 unter Linux amd64 installieren möchten, führen Sie die folgenden Befehle aus:

    curl -LO https://github.com/ray-project/kuberay/releases/download/v1.3.2/kubectl-ray_v1.3.2_linux_amd64.tar.gz
    tar -xvf kubectl-ray_v1.3.2_linux_amd64.tar.gz
    cp kubectl-ray ~/.local/bin
    

    Ersetzen Sie ~/.local/bin durch das Verzeichnis in Ihrer PATH.

  2. Installation prüfen:

    kubectl ray version
    

    Wenn Sie eine Warnung wie KubeRay operator installation cannot be found: no KubeRay operator deployments found in any namespace. sehen, können Sie sie ignorieren. Wenn die Installation erfolgreich war, wird die Version des kubectl ray-Plug-ins ausgegeben.

Benutzerdefinierte Compute-Klasse in Ihrem Cluster erstellen

Mit einer benutzerdefinierten Compute-Klasse in GKE können Sie bestimmte Hardwareanforderungen wie GPU-Typ und -Anzahl nach Priorität definieren. GKE verwendet diese Priorität beim Bereitstellen von Knoten für Ihre Arbeitslasten.

So erstellen Sie die benutzerdefinierte Beispiel-Compute-Klasse für diese Anleitung:

  1. Speichern Sie die folgende Compute-Klassenspezifikation als nvidia-l4-compute-class.yaml:

    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: gpu-compute-class
    spec:
      priorities:
      - gpu:
          type: nvidia-l4
          count: 1
        spot: true
      - gpu:
          type: nvidia-l4
          count: 1
        spot: false
      nodePoolAutoCreation:
        enabled: true
      whenUnsatisfiable: DoNotScaleUp
    
  2. Erstellen Sie die Compute-Klasse mit dem folgenden Befehl:

    kubectl apply -f nvidia-l4-compute-class.yaml
    

    Was passiert, nachdem Sie die benutzerdefinierte Compute-Klasse angewendet haben? Nachdem Sie die YAML-Datei für die Compute-Klasse angewendet haben, stellt GKE automatisch Knoten mit einer NVIDIA L4-GPU bereit, wenn Ihr Ray-Cluster sie anfordert. Spot-VMs werden gemäß Ihrem Manifest priorisiert. Mit der Einstellung whenUnsatisfiable: DoNotScaleUp wird GKE angewiesen, keine Knoten zu erstellen, die die angegebenen Anforderungen nicht erfüllen.

Ray-Cluster erstellen und überprüfen

Sie können jetzt Ihren Ray-Cluster in Ihrem GKE-Cluster erstellen.

  1. Ray-Cluster erstellen Verwenden Sie den Befehl kubectl ray create cluster, um Ihren Ray-Cluster zu definieren und zu erstellen. Dieser Befehl vereinfacht den Vorgang, da er die Erstellung der zugrunde liegenden Kubernetes-Ressourcen übernimmt.

      kubectl ray create cluster my-ray-cluster \
          --worker-replicas=1 \
          --worker-cpu=2 \
          --worker-memory=4Gi \
          --worker-gpu=1 \
          --worker-node-selectors="cloud.google.com/compute-class=gpu-compute-class"
    

    Mit dem Befehl kubectl ray create cluster wird das KubeRay-Plug-in verwendet, um Ihre Spezifikationen in eine benutzerdefinierte RayCluster-Ressourcendefinition zu übersetzen und an die Kubernetes API zu senden, um das RayCluster-Objekt zu erstellen. Dieses Objekt dient als Blaupause und teilt dem Ray-Operator mit, wie die tatsächlichen Ray-Clusterkomponenten (Head- und Worker-Knoten) in GKE bereitgestellt und verwaltet werden. Standardmäßig plant GKE den Head-Pod auf einem Knoten der E2-Maschinenserie.

    Im Beispielbefehl werden diese Einstellungen verwendet:

    • kubectl ray create cluster my-ray-cluster: Gibt den Namen des Ray-Clusters an, den Sie erstellen möchten.
    • --worker-node-selectors: weist Kubernetes an, Worker-Pods auf Knoten zu planen, die mit cloud.google.com/compute-class=gpu-compute-class gekennzeichnet sind.
  2. Ray-Clusterstatus prüfen Mit diesen Befehlen können Sie prüfen, ob Ihr Ray-Cluster ausgeführt wird.

    • Prüfen Sie die RayCluster-Ressource mit dem folgenden Befehl:

      kubectl ray get cluster
      

      Mit diesem Befehl werden alle Ray-Cluster in Ihrem Kubernetes-Namespace aufgeführt. my-ray-cluster sollte angezeigt werden. Es kann einige Minuten dauern, bis der Cluster initialisiert ist.

    • Prüfen Sie die Kubernetes-Pods mit diesem Befehl:

      kubectl get pods
      

      Mit diesem Befehl werden alle Pods aufgelistet, die in Ihrem Kubernetes-Namespace ausgeführt werden. Sie sollten Pods sehen, die mit Ihrem Ray-Cluster zusammenhängen:

      • Ein Pod für den Ray-Head-Knoten mit einem Namen wie my-ray-cluster-head-0.
      • Ein oder mehrere Pods für die Ray-Worker-Knoten mit Namen wie my-ray-cluster-worker-group-0-xxxxx. Die Anzahl der Worker-Pods hängt von der ursprünglichen Konfiguration Ihres Ray-Clusters und dem Autoscaling ab, das möglicherweise stattgefunden hat.

Ray-Job senden

Sobald Ihr Ray-Cluster bereit ist, können Sie einen Ray-Job an Ihren laufenden Ray-Cluster in GKE senden.

Verwenden Sie dazu den Befehl kubectl ray session, um eine interaktive Sitzung zu starten, und den Befehl ray job submit, um die Ausführung des Jobs zu starten.

  1. Interaktive Ray-Sitzung starten Führen Sie diesen Befehl aus, um eine lokale Verbindung zu Ihrem Ray-Cluster herzustellen:

      kubectl ray session my-ray-cluster
    

    Mit diesem Befehl wird die Portweiterleitung zwischen Ihrem lokalen Computer und dem Ray-Head-Knoten in Ihrem GKE-Cluster initiiert. Ihr Terminal ist belegt, solange diese Sitzung aktiv ist. Öffnen Sie eine separate Terminalinstanz, um fortzufahren.

  2. Beispielcode zum Ausführen erstellen Speichern Sie den folgenden Beispielcode in einer Datei mit dem Namen sample_code.py.

      import ray
      import os
      import requests
    
      ray.init()
    
      @ray.remote
      class Counter:
          def __init__(self):
              # Used to verify runtimeEnv
              self.name = os.getenv("counter_name")
              assert self.name == "test_counter"
              self.counter = 0
    
          def inc(self):
              self.counter += 1
    
          def get_counter(self):
              return "{} got {}".format(self.name, self.counter)
    
      counter = Counter.remote()
    
      for _ in range(5):
              ray.get(counter.inc.remote())
              print(ray.get(counter.get_counter.remote()))
    
      # Verify that the correct runtime env was used for the job.
      assert requests.__version__ == "2.26.0"
    
  3. Neues Terminal öffnen und Ray-Job senden

    1. Öffnen Sie ein neues Terminal auf Ihrem lokalen Computer. Wenn Sie eine virtuelle Umgebung für Ihre Ray-Installation erstellt haben, müssen Sie sie auch in diesem neuen Terminal aktivieren.
    2. Wechseln Sie zu dem Verzeichnis, in dem Sie die Datei sample_code.py gespeichert haben.
    3. Führen Sie dazu diesen Befehl aus:

        ray job submit \
            --working-dir=. \
            --runtime-env-json='{"pip": ["requests==2.26.0"], "env_vars": {"counter_name": "test_counter"}}' \
            --address http://localhost:8265 python sample_code.py
      

      Im Beispielbefehl werden diese Einstellungen verwendet:

      • --working-dir=.: Gibt das aktuelle Verzeichnis als Arbeitsverzeichnis an, das dem Ray-Job im Cluster zur Verfügung gestellt werden soll. Im Idealfall enthält dieses Verzeichnis nur den Anwendungsquellcode, den Sie in Ray ausführen möchten. In unserem Beispiel ist das die Datei sample_code.py.
      • --runtime-env-json='{"pip": ["requests==2.26.0"], "env_vars": {"counter_name": "test_counter"}}': Definiert die Laufzeitumgebung für den Job. Sie gibt die erforderliche Python-Bibliotheksversion (requests==2.26.0) an und legt eine Umgebungsvariable (counter_name) für die Ausführung des Jobs fest.
  4. Ray-Job ansehen Sie haben folgende Möglichkeiten, den Job zu überwachen:

    • Ray-Dashboard: Öffnen Sie Ihren Webbrowser und rufen Sie http://localhost:8265 auf. Über diese URL wird das Ray-Dashboard geöffnet. Dort können Sie Informationen zu Ihrem laufenden Job aufrufen, z. B. den Status, die Logs und die Ressourcennutzung.
    • Metrics Explorer: Verwenden Sie die vorgefertigten Messwert-Dashboards in derGoogle Cloud Console. Weitere Informationen finden Sie unter Logs und Messwerte für Ray-Cluster in GKE erfassen und ansehen.
  5. Ray-Sitzung beenden: Wenn Sie die Interaktion mit dem Ray-Cluster oder die Überwachung Ihres Jobs abgeschlossen haben, können Sie die interaktive Sitzung beenden, indem Sie im Terminal, in dem Sie den Befehl kubectl ray session ausgeführt haben, Ctrl+C drücken.

Bereinigen

Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud -Konto die auf dieser Seite verwendeten Ressourcen in Rechnung gestellt werden:

Wenn Sie die Kurzanleitung in einem neuen Google Cloud -Projekt bereitgestellt haben und das Projekt nicht mehr benötigen, löschen Sie es mit den folgenden Schritten:

  1. Rufen Sie in der Google Cloud Console die Seite Ressourcen verwalten auf.
  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.

Wenn Sie kein neues Google Cloud Projekt erstellt haben und den GKE-Cluster nicht mehr benötigen, können Sie ihn mit dem folgenden Befehl löschen:

gcloud container clusters delete my-ray-enabled-cluster \
    --location=us-central1

Nächste Schritte

  • Weitere Beispiele, Best Practices und Tools für Ray in GKE:Weitere Informationen finden Sie im GitHub-Repository „ai-on-gke“.
  • Weitere Informationen zur Verwendung von Beschleunigern in GKE: Verwenden Sie GPUs für die parallele Verarbeitung bei Aufgaben für maschinelles Lernen und Datenanalyse. Verwenden Sie TPUs, um das Training und die Inferenz von umfangreichen Deep-Learning-Modellen zu beschleunigen.
  • Weitere Informationen zum Ray-Operator: Weitere Informationen zur Verwendung des Ray-Operators zum Verwalten von Ray-Bereitstellungen, einschließlich Ray-Jobs, finden Sie unter Ray on GKE.
  • Kueue für die Jobwarteschlange verwenden:Erfahren Sie, wie Kueue, ein natives Kubernetes-Jobwarteschlangensystem, Ihnen helfen kann, Ihre KI-/ML-Arbeitslasten zu verwalten und zu priorisieren, was die Ressourcennutzung verbessern kann. Weitere Informationen finden Sie unter GKE-Ressourcennutzung für gemischte KI-/ML-Trainings- und ‑Inferenzarbeitslasten optimieren.