In dieser Anleitung erfahren Sie, wie Sie KubeRay mit TPU Trillium in Google Kubernetes Engine (GKE) konfigurieren. Sie lernen, TPU Konfigurationen mit einem oder mehreren Hosts einzurichten, einschließlich der erforderlichen Umgebungsvariablen und Pod-Spezifikationen für TPU Trillium.
Diese Anleitung richtet sich an Plattformadministratoren und -operatoren sowie an Daten- und KI-Experten, die erfahren möchten, wie sie die TPU Trillium-Initialisierung mit KubeRay für Knotenpools mit einem oder mehreren Hosts konfigurieren. In dieser Anleitung wird gezeigt, wie Sie ein Skript mit Jax ausführen, mit dem die erfolgreiche TPU-Initialisierung überprüft wird. In dieser Anleitung wird kein Modell bereitgestellt.
Übersicht
In dieser Anleitung wird gezeigt, wie Sie ein Python-Skript mit Jax ausführen, mit dem überprüft wird, ob die TPU Trillium Initialisierung mit KubeRay erfolgreich war. Jax ist eine leistungsstarke numerische Berechnungsbibliothek, die Arbeitslasten für maschinelles Lernen unterstützt. KubeRay ist ein Kubernetes-Operator, der eine einheitliche Möglichkeit bietet, Ray-Anwendungen in Kubernetes bereitzustellen, zu verwalten und zu überwachen.
Für Trillium-TPUs (v6e) sind bestimmte Umgebungsvariablen und Pod-Spezifikationen erforderlich, die sich von früheren TPU-Generationen unterscheiden. In dieser Anleitung finden Sie die erforderlichen Konfigurationen, um eine Arbeitslast mit KubeRay auf Trillium-TPUs bereitzustellen.
Hinweis
Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:
- Aktivieren Sie die Google Kubernetes Engine API. Google Kubernetes Engine API aktivieren
- Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten,
installieren und dann
initialisieren Sie die
gcloud CLI. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste
Version mit dem
gcloud components updateBefehl ab. Ältere gcloud CLI-Versionen unterstützen möglicherweise nicht die Ausführung der Befehle in diesem Dokument.
- Prüfen Sie, ob die Ray CLI (Version 2.37.0) installiert ist.
Cloud Shell aktivieren
Cloud Shell ist mit den in dieser Anleitung verwendeten Befehlszeilentools gcloud, helm und
kubectl vorinstalliert.
- Rufen Sie die Google Cloud Console auf.
Klicken Sie oben im Google Cloud Console-Fenster auf die Schaltfläche Cloud Shell aktivieren
.In einem neuen Frame in der Google Cloud Console wird eine Cloud Shell-Sitzung geöffnet und darin eine Eingabeaufforderung angezeigt.
GKE-Cluster und -Knotenpool erstellen
Sie können KubeRay auf TPUs in einem GKE-Cluster im Autopilot oder Standardmodus konfigurieren. 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-Betriebsmodi.
Autopilot
Führen Sie in Cloud Shell den folgenden Befehl aus:
gcloud container clusters create-auto CLUSTER_NAME \ --enable-ray-operator \ --release-channel=rapid \ --location=LOCATIONErsetzen Sie Folgendes:
CLUSTER_NAMEist der Name des neuen Clusters.LOCATIONist die Region, in der Ihre TPU Trillium-Kapazität verfügbar ist. Weitere Informationen finden Sie unter TPU-Verfügbarkeit in GKE.
GKE erstellt einen Autopilot-Cluster mit aktiviertem Ray-Operator-Add-on. Das Add-on installiert den Ray TPU-Webhook automatisch in der Clustersteuerungsebene.
Konfigurieren Sie
kubectl, um mit Ihrem Cluster zu kommunizieren :gcloud container clusters get-credentials CLUSTER_NAME --location=LOCATION
Standard
Erstellen Sie in Cloud Shell einen Standardcluster, in dem das Ray-Operator-Add-on aktiviert ist. Führen Sie dazu den folgenden Befehl aus :
gcloud container clusters create CLUSTER_NAME \ --location LOCATION \ --addons=RayOperator \ --cluster-version=1.33 \ --machine-type=n1-standard-16Ersetzen Sie Folgendes:
CLUSTER_NAMEist der Name des neuen Clusters.LOCATIONist die Region, in der Ihre TPU Trillium-Kapazität verfügbar ist. Weitere Informationen finden Sie unter TPU-Verfügbarkeit in GKE.
Die Erstellung eines Clusters kann einige Minuten dauern.
Konfigurieren Sie
kubectl, um mit Ihrem Cluster zu kommunizieren :gcloud container clusters get-credentials CLUSTER_NAME --location=LOCATIONSie können einen TPU-Slice-Knotenpool mit einem oder mehreren Hosts erstellen:
Einzelner Host
Führen Sie in Cloud Shell den folgenden Befehl aus:
gcloud container node-pools create v6e-4 \
--location=us-central2-b \
--cluster=CLUSTER_NAME \
--machine-type=ct6e-standard-4t \
--num-nodes=1 \
--threads-per-core=1 \
--tpu-topology=2x2
Mehrere Hosts
Führen Sie in Cloud Shell den folgenden Befehl aus:
gcloud container node-pools create v6e-16 \
--location=us-central2-b \
--cluster=CLUSTER_NAME \
--machine-type=ct6e-standard-4t \
--num-nodes=4 \
--threads-per-core=1 \
--tpu-topology=4x4
Benutzerdefinierte RayJob-Ressource ausführen
Wenn Sie ein RayJob-Manifest definieren, weisen Sie KubeRay an, Folgendes zu tun:
- RayCluster erstellen:Die RayJob-Spezifikation enthält eine
rayClusterSpec, die die gewünschte Ray-Clusterkonfiguration (Head- und Worker-Gruppen) definiert. - Bestimmten Job ausführen:Das Feld
entrypointin der RayJob-Spezifikation gibt den Befehl oder das Skript an, das im erstellten Ray-Cluster ausgeführt werden soll. In dieser Anleitung ist dasentrypointein Python-Skript (tpu_list_devices.py), mit dem die TPU Trillium-Initialisierung überprüft wird.
So erstellen Sie eine benutzerdefinierte RayJob-Ressource:
Einzelner Host
Erstellen Sie das folgende
ray-job.tpu-v6e-singlehost.yaml-Manifest:Wenden Sie das Manifest an:
kubectl apply -f ray-job.tpu-v6e-singlehost.yamlPrüfen Sie, ob der RayJob erstellt wurde und ausgeführt wird:
kubectl get rayjobs v6e-4-jobDie Ausgabe sieht etwa so aus:
NAME JOB STATUS DEPLOYMENT STATUS RAY CLUSTER NAME START TIME END TIME AGE v6e-4-job PENDING Running v6e-4-job-raycluster 2024-10-15T23:15:22Z 20sGeben Sie die Ausgabe des RayJob aus.
kubectl logs -l=job-name=v6e-4-jobDie Ausgabe sieht etwa so aus:
2024-10-15 16:15:40,222 INFO cli.py:300 -- ray job stop v6e-4-job-hzq5q 2024-10-15 16:15:40,246 INFO cli.py:307 -- Tailing logs until the job exits (disable with --no-wait): 2024-10-15 16:15:40,112 INFO job_manager.py:528 -- Runtime env is setting up. 2024-10-15 16:15:50,181 INFO worker.py:1461 -- Using address 10.84.1.25:6379 set in the environment variable RAY_ADDRESS 2024-10-15 16:15:50,181 INFO worker.py:1601 -- Connecting to existing Ray cluster at address: 10.84.1.25:6379... 2024-10-15 16:15:50,186 INFO worker.py:1777 -- Connected to Ray cluster. View the dashboard at 10.84.1.25:8265 ['TPU cores:4'] 2024-10-15 16:16:12,349 SUCC cli.py:63 -- ------------------------------------- 2024-10-15 16:16:12,349 SUCC cli.py:64 -- Job 'v6e-4-job-hzq5q' succeeded 2024-10-15 16:16:12,349 SUCC cli.py:65 -- -------------------------------------
Mehrere Hosts
Erstellen Sie das folgende
ray-job.tpu-v6e-multihost.yaml-Manifest:Wenden Sie das Manifest an:
kubectl apply -f ray-job.tpu-v6e-multihost.yamlPrüfen Sie, ob der v6e-16-RayJob erstellt wurde und ausgeführt wird:
kubectl get rayjobs v6e-16-jobDie Ausgabe sieht etwa so aus:
NAME JOB STATUS DEPLOYMENT STATUS RAY CLUSTER NAME START TIME END TIME AGE v6e-16-job Running v6e-16-job-raycluster-qr6vk 2024-10-16T19:28:19Z 66sGeben Sie die Ausgabe des v6e-16-RayJob aus:
kubectl logs -l=job-name=v6e-16-jobDie Ausgabe sieht etwa so aus:
2024-10-16 12:21:33,986 INFO cli.py:300 -- ray job stop v6e-16-job-z44s7 2024-10-16 12:21:34,011 INFO cli.py:307 -- Tailing logs until the job exits (disable with --no-wait): 2024-10-16 12:21:33,826 INFO job_manager.py:528 -- Runtime env is setting up. 2024-10-16 12:21:46,327 INFO worker.py:1461 -- Using address 10.84.1.61:6379 set in the environment variable RAY_ADDRESS 2024-10-16 12:21:46,327 INFO worker.py:1601 -- Connecting to existing Ray cluster at address: 10.84.1.61:6379... 2024-10-16 12:21:46,333 INFO worker.py:1777 -- Connected to Ray cluster. View the dashboard at 10.84.1.61:8265 ['TPU cores:16', 'TPU cores:16', 'TPU cores:16', 'TPU cores:16'] 2024-10-16 12:22:12,156 SUCC cli.py:63 -- --------------------------------- 2024-10-16 12:22:12,156 SUCC cli.py:64 -- Job 'v6e-16-job-z44s7' succeeded 2024-10-16 12:22:12,156 SUCC cli.py:65 -- ---------------------------------
RayJob im Ray-Dashboard ansehen
Prüfen Sie, ob GKE den RayCluster-Dienst erstellt hat, und stellen Sie eine Verbindung zur RayCluster-Instanz her.
Einzelner Host
Rufen Sie den Namen des generierten RayCluster für den RayJob ab:
export RAYCLUSTER_NAME=$(kubectl get rayjob v6e-4-job -o jsonpath='{.status.rayClusterName}')Rufen Sie den Namen des RayCluster-Head-Dienstes ab:
export HEAD_SVC=$(kubectl get svc -l ray.io/cluster=$RAYCLUSTER_NAME,ray.io/node-type=head -o jsonpath='{.items[0].metadata.name}')Stellen Sie eine Verbindung zum Ray-Dashboard her, indem Sie den Head-Dienst weiterleiten:
kubectl port-forward svc/$HEAD_SVC 8265:8265 2>&1 >/dev/null &Öffnen Sie einen Webbrowser und geben Sie die folgende URL ein:
http://localhost:8265/#/jobsRufen Sie den RayJob-Status und relevante Logs auf.
Mehrere Hosts
Rufen Sie den Namen des generierten RayCluster für den RayJob ab:
export RAYCLUSTER_NAME=$(kubectl get rayjob v6e-16-job -o jsonpath='{.status.rayClusterName}')Rufen Sie den Namen des RayCluster-Head-Dienstes ab:
export HEAD_SVC=$(kubectl get svc -l ray.io/cluster=$RAYCLUSTER_NAME,ray.io/node-type=head -o jsonpath='{.items[0].metadata.name}')Stellen Sie eine Verbindung zum Ray-Dashboard her, indem Sie den Head-Dienst weiterleiten:
kubectl port-forward svc/$HEAD_SVC 8265:8265 2>&1 >/dev/null &Öffnen Sie einen Webbrowser und geben Sie die folgende URL ein:
http://localhost:8265/#/jobsRufen Sie den RayJob-Status und relevante Logs auf.
Ray legt eine TPU-{accelerator}-Head-Ressource fest, um den Ray-Worker-Knoten zu identifizieren, der dem Wert TPU_WORKER_ID=0 entspricht. In der TPU-Gruppe mit mehreren Hosts ist für den Ray-Knoten mit TPU_WORKER_ID=0 in den Ressourcen TPU-v6e-16-head: 1.0 festgelegt. Diese Umgebungsvariable TPU_WORKER_ID wird von einem mutierenden GKE-Webhook für KubeRay festgelegt.
Bereinigen
Löschen Sie nach Abschluss der Anleitung den RayJob, um unerwünschte Kosten für Ihr Konto zu vermeiden:
Einzelner Host
kubectl delete rayjobs v6e-4-job
Mehrere Hosts
kubectl delete rayjobs v6e-16-job
Nächste Schritte
- Learn about Ray in Kubernetes
- vLLM in GKE mit TPUs bereitstellen
- SDXL in GKE mit TPUs bereitstellen
- Learn more TPUs in GKE