GPU-beschleunigtes Ray für KI-Arbeitslasten in GKE bereitstellen
Auf dieser Seite erfahren Sie, wie Sie einen GPU-fähigen Ray-Cluster in der Google Kubernetes Engine (GKE) einrichten und ausführen, um Ihre KI-/ML-Arbeitslasten zu skalieren.
Vorteile von Ray
Mit Ray in der GKE, unterstützt von KubeRay, 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 Zuverlässigkeit und die Bereitstellung von Anwendungen in verschiedenen Umgebungen. Wenn Sie Ihre verteilten Ray-Anwendungen mit Ihrer vorhandenen Cloud-Infrastruktur und Ihren Tools in GKE verbinden, können Sie die Betriebsabläufe vereinfachen und mithilfe von standardmäßigen Kubernetes-Methoden eine robuste, skalierbare Plattform für komplexe Aufgaben bereitstellen.
Weitere Informationen finden Sie im Blogpost Vorteile von GKE für Ray KI-Arbeitslasten.
Hinweise
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API.
- Install the Google Cloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
kubectl
installieren:kubectl
ist das primäre Befehlszeilentool für die Interaktion mit GKE-Clustern. Wenn Sie Cloud Shell verwenden, istkubectl
bereits installiert. Andernfalls können Sie es in Ihrem Terminal installieren, indem Sie den Befehlgcloud components install kubectl
ausführen.Führen Sie den folgenden Befehl aus, um die Installation zu überprüfen:
kubectl version --client
- Ray installieren: Wir empfehlen dringend, vor der Installation von Ray eine virtuelle Python-Umgebung (
venv
) zu erstellen und zu betreten, damit Sie die Abhängigkeiten isolieren können.- Installieren Sie Python.
- Erstellen und aktivieren Sie eine neue virtuelle Umgebung.
- Installieren Sie die neueste stabile Version von Ray. Führen Sie dazu in Ihrer virtuellen Umgebung den Befehl
pip install -U "ray[default]"
aus. - Führen Sie den folgenden Befehl aus, um die Installation zu überprüfen:
ray --version
. Notieren Sie sich die Ray-Version in der Ausgabe (z. B. 2.44.1).
- Prüfen Sie, ob Ihr Projekt ein ausreichendes Kontingent für L4-GPUs hat. Google Cloud Weitere Informationen finden Sie unter GPUs und Zuteilungskontingente.
Cluster im GKE-Autopilot-Modus erstellen
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.
Führen Sie im Terminal den folgenden 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
: Der Ray-Operator wird auf dem Cluster installiert, was die Verwaltung von Ray-Clustern in Kubernetes vereinfacht.--enable-ray-cluster-monitoring
: Richtet die Integration mit Cloud Monitoring für Ray-Clustermesswerte ein.--enable-ray-cluster-logging
: Konfiguriert die Einbindung in Cloud Logging, um Protokolle aus Ihrem Ray-Cluster zu erfassen.--location=us-central1
: Gibt die Region an, in der der GKE-Cluster erstellt werden soll. Die Verfügbarkeit und die unterstützten Typen von Accelerators 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) basierend auf den Arbeitslastanforderungen automatisch bereitgestellt und skaliert, um sowohl die Auslastung als auch die Kosten zu optimieren. Diese automatische Bereitstellung und Skalierung von Ressourcen in Autopilot-Clustern vereinfacht die Ressourcenverwaltung und ermöglicht es Ihnen, sich auf Ihre Modelle statt auf die Infrastruktur zu konzentrieren.
Wenn Sie einen GKE Standard-Cluster verwenden, sind die Flags und Einstellungen zum Aktivieren von Ray möglicherweise unterschiedlich. Weitere Informationen finden Sie unter Ray-Operator in GKE aktivieren.
Konfigurieren Sie
kubectl
für die Kommunikation mit Ihrem Cluster:gcloud container clusters get-credentials my-ray-enabled-cluster \ --region=us-central1
KubeRay kubectl ray
-Plug-in installieren
Das kubectl ray
-Plug-in vereinfacht gängige Ray-on-Kubernetes-Workflows. Die aktuelle Installationsanleitung finden Sie in der KubeRay-Dokumentation.
Rufe die Release-Seite auf und lade die Binärdatei für deine Plattform herunter. Wenn Sie beispielsweise die
kubectl ray
-Plug-in-Version 1.3.2 auf 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 inPATH
.Installation prüfen:
kubectl ray version
Wenn eine Warnung wie
KubeRay operator installation cannot be found: no KubeRay operator deployments found in any namespace.
angezeigt wird, können Sie sie ignorieren. Wenn die Installation erfolgreich war, wird die Version deskubectl ray
-Plug-ins ausgegeben.
Benutzerdefinierte Compute-Klasse in Ihrem Cluster erstellen
Mit einer benutzerdefinierten Compute-Klasse in GKE können Sie bestimmte Hardwareanforderungen wie den GPU-Typ und die GPU-Anzahl nach Priorität definieren. Autopilot verwendet diese Priorität bei der Bereitstellung von Knoten für Ihre Arbeitslasten.
So erstellen Sie die Beispiel-Compute-Klasse für diesen Leitfaden:
Speichern Sie die folgende Compute-Klassen-Spezifikation 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: 4 spot: false nodePoolAutoCreation: enabled: true whenUnsatisfiable: DoNotScaleUp
Erstellen Sie die Compute-Klasse mit dem folgenden Befehl:
kubectl apply -f nvidia-l4-compute-class.yaml
Was passiert, nachdem ich die benutzerdefinierte Compute-Klasse angewendet habe? Nachdem Sie die YAML-Datei der Compute-Klasse angewendet haben, stellt Autopilot automatisch Knoten mit einer NVIDIA L4-GPU bereit, wenn Ihr Ray-Cluster sie anfordert. Dabei werden Spot-VMs gemäß der Definition in 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 prüfen
Sie können jetzt Ihren Ray-Cluster in Ihrem Autopilot-Cluster erstellen.
Erstellen Sie den Ray-Cluster. Verwenden Sie den Befehl
kubectl ray create cluster
, um den Ray-Cluster zu definieren und zu erstellen. Dieser Befehl vereinfacht den Vorgang, da die zugrunde liegende Erstellung von Kubernetes-Ressourcen übernommen wird.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"
Der Befehl
kubectl ray create cluster
verwendet das KubeRay-Plug-in, um Ihre Spezifikationen in eine benutzerdefinierte Ressourcendefinition vom Typ RayCluster zu übersetzen und an die Kubernetes API zu senden, um das RayCluster-Objekt zu erstellen. Dieses Objekt dient als Blaupause und gibt dem Ray-Operator an, 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 aus der E2-Maschinenreihe.Im Beispielbefehl werden die folgenden Einstellungen verwendet:
kubectl ray create cluster my-ray-cluster
: Gibt den Namen des Ray-Clusters an, den Sie erstellen möchten.--worker-node-selectors
: Kubernetes wird angewiesen, Worker-Pods auf Knoten zu planen, die mitcloud.google.com/compute-class=gpu-compute-class
gekennzeichnet sind.
Prüfen Sie den Status des Ray-Clusters. Mit diesen Befehlen können Sie prüfen, ob Ihr Ray-Cluster aktiv ist.
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 aufgelistet.
my-ray-cluster
sollte aufgeführt sein. Es kann einige Minuten dauern, bis der Cluster initialisiert ist.Prüfen Sie die Kubernetes-Pods mit dem folgenden 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 verknüpft sind:
- Einen Pod für den Ray-Hauptknoten mit einem Namen wie
my-ray-cluster-head-0
. - Einen 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 von eventuell durchgeführtem Autoscaling ab.
- Einen Pod für den Ray-Hauptknoten mit einem Namen wie
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 Jobausführung zu starten.
Starten Sie eine interaktive Ray-Sitzung. 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-Leitknoten in Ihrem GKE-Cluster gestartet. Hinweis: Ihr Terminal ist belegt, solange diese Sitzung aktiv ist. Öffnen Sie eine separate Terminalinstanz, um fortzufahren.
Erstellen Sie den ausführbaren Beispielcode. 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"
Öffnen Sie ein neues Terminal und reichen Sie den Ray-Job ein.
- Ö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.
- Rufen Sie das Verzeichnis auf, in dem Sie die Datei
sample_code.py
gespeichert haben. 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 die folgenden Einstellungen verwendet:
--working-dir=.
: Gibt das aktuelle Verzeichnis als Arbeitsverzeichnis an, das dem Ray-Job im Cluster zur Verfügung gestellt werden soll. Idealerweise enthält dieses Verzeichnis nur den Quellcode der Anwendung, den Sie mit Ray ausführen möchten. In unserem Beispiel ist das die Dateisample_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.
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, in dem Sie Informationen zu Ihrem laufenden Job sehen, einschließlich Status, Protokollen und Ressourcennutzung. - Metrics Explorer: Verwenden Sie die vordefinierten Messwert-Dashboards in derGoogle Cloud Console. Weitere Informationen finden Sie unter Logs und Messwerte für Ray-Cluster in GKE erfassen und ansehen.
- Ray-Dashboard: Öffnen Sie Ihren Webbrowser und rufen Sie
Beenden Sie die Ray-Sitzung. Wenn Sie die Interaktion mit dem Ray-Cluster beendet oder Ihren Job überwacht haben, können Sie die interaktive Sitzung beenden, indem Sie in dem Terminal, in dem Sie den Befehl
kubectl ray session
ausgeführt haben, die TasteCtrl+C
drücken.
Bereinigen
Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud -Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden:
Wenn Sie die Lösung in einem neuen Projekt bereitgestellt haben und das Projekt nicht mehr benötigen, löschen Sie es mit den folgenden Schritten: Google Cloud
- Google Cloud Rufen Sie in der Console die Seite Ressourcen verwalten auf.
- Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie auf Löschen.
- 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 Autopilot-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 Deep-Learning-Modellen im großen Maßstab zu beschleunigen.
- Weitere Informationen zum Ray-Operator: Weitere Informationen dazu, wie Sie mit dem Ray-Operator Ray-Bereitstellungen, einschließlich Ray-Jobs, verwalten, finden Sie unter Ray on GKE.
- Kueue für Jobwarteschlangen verwenden:Kueue ist ein Kubernetes-natives Jobwarteschlangensystem, mit dem Sie Ihre KI-/ML-Arbeitslasten verwalten und priorisieren können, um die Ressourcennutzung zu verbessern. Weitere Informationen finden Sie unter GKE-Ressourcennutzung für gemischte KI-/ML-Arbeitslasten für Training und Inferenz optimieren.