In dieser Anleitung wird beschrieben, wie Sie einen TPU-Inferenzdienst mit mehreren Hosts mithilfe von Ray Serve LLM bereitstellen. Durch die Nutzung der nativen TPU-Unterstützung von Ray, um verteilte Engine-Worker atomar über komplexe Beschleunigertopologien hinweg zu planen, können Sie große Modelle für die Inferenz über einen TPU-Slice mit mehreren Hosts hinweg bereitstellen.
Dieses Tutorial richtet sich an ML-Entwickler, Plattformadministratoren und ‑operatoren sowie an Daten- und KI-Spezialisten, die daran interessiert sind, Kubernetes-Container-Orchestrierungsfunktionen für die Bereitstellung von KI-/ML-Arbeitslasten auf verteilten TPU-Slices mit mehreren Hosts zu nutzen. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud Inhalten verweisen, finden Sie unter Häufig verwendete GKE-Nutzerrollen und -Aufgaben.
Machen Sie sich vor dem Lesen dieser Seite mit den folgenden Themen vertraut:
- Autopilot-Modus und Standardmodus
- TPUs in GKE
- TPU-Slices mit mehreren Hosts
- Von GKE verwaltetes DRANET
Hintergrund
In diesem Abschnitt werden die in diesem Leitfaden verwendeten Schlüsseltechnologien beschrieben.
TPUs
Mit Tensor Processing Units (TPUs) können Sie bestimmte Arbeitslasten wie maschinelles Lernen und Datenverarbeitung beschleunigen, die auf Ihren Knoten ausgeführt werden. Der Hauptvorteil von TPUs ist die Leistung bei großem Umfang. In dieser Anleitung wird TPU Trillium verwendet, die sechste Generation von Cloud TPU. TPU-Slices mit mehreren Hosts bestehen aus mehreren physischen Knoten, die über eine Hochgeschwindigkeitsverbindung (Inter-Chip Interconnect, ICI) kommunizieren. Das eignet sich gut für Serving mit hohem Durchsatz und niedriger Latenz.
vLLM auf Ray
vLLM ist eine LLM-Bereitstellungs-Engine mit hohem Durchsatz und geringem Speicherbedarf. Durch die Integration in Ray Serve kann vLLM über mehrere Hosts skaliert werden und nativ auf physische Hardwaretopologien zugreifen. In dieser Anleitung wird gezeigt, wie Sie die Bereitstellungen LLMConfig und LLMServer von Ray Serve verwenden, um die vLLM-Inferenz über mehrere Host-Slices hinweg zu orchestrieren. Das Framework übernimmt dabei automatisch die Verteilung der Topologie und die Verteilung der Placement-Gruppe.
Ziele
Diese Anleitung bietet eine Grundlage für das Verständnis und die praktische Bereitstellung von LLMs für die Inferenz in einer verwalteten Kubernetes-Umgebung, in der Multi-Host-TPUs verwendet werden.
- Bereiten Sie Ihre Umgebung mit einem GKE-Cluster im Autopilot- oder Standardmodus vor.
- Erstellen Sie ein benutzerdefiniertes Container-Image mit integrierten Abhängigkeiten.
- Stellen Sie ein Ray LLM-Python-Script in Ihrem Cluster bereit, um die vLLM-Inferenz über einen TPU-Slice zu orchestrieren.
- Ray LLM verwenden, um das Gemma 4-Modell über
curlund eine optionale Webchat-Oberfläche 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 diesen Task verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl
gcloud components updateab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.
- Prüfen Sie, ob Ihr Projekt ein ausreichendes Kontingent für TPU Trillium-Kapazität (v6e) in der ausgewählten Region hat. Weitere Informationen finden Sie unter Cloud TPU-Kontingente.
- Ihr GKE-Cluster muss GKE Dataplane V2 verwenden und die Versionsanforderungen für DRANET erfüllen: 1.35.2-gke.1842000 oder höher für Standard und Autopilot.
- Prüfen Sie, ob Sie die folgenden IAM-Rollen haben:
roles/container.adminroles/iam.serviceAccountAdmin
Umgebung vorbereiten
In dieser Anleitung verwenden Sie Cloud Shell zum Verwalten von Ressourcen, die in Google Cloudgehostet werden. Die Software, die Sie für diese Anleitung benötigen, ist in Cloud Shell vorinstalliert, einschließlich kubectl und der gcloud CLI.
So richten Sie Ihre Umgebung mit Cloud Shell ein:
Starten Sie in der Google Cloud Console eine Cloud Shell-Sitzung, indem Sie auf Cloud Shell aktivieren
klicken. Dadurch wird im unteren Bereich der Google Cloud Console eine Sitzung gestartet.Erstellen und aktivieren Sie eine virtuelle Python-Umgebung:
python3 -m venv ray-env source ray-env/bin/activateInstallieren Sie die Ray-Befehlszeile:
pip install "ray"Legen Sie die Standardumgebungsvariablen fest:
export PROJECT_ID=$(gcloud config get project) export CLUSTER_NAME=ray-llm-cluster export REGION=REGION export ZONE=ZONE export NAMESPACE=default export KSA_NAME=ray-ksa export GSA_NAME=tpu-reader-sa export NETWORK_NAME=${CLUSTER_NAME}-net export GS_BUCKET=BUCKET_NAME export REPO_NAME=ray-repo export CUSTOM_IMAGE_URI=REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/vllm-tpu-ray:vllm-tpuErsetzen Sie Folgendes:
PROJECT_ID: Projekt-ID in Google Cloud .CLUSTER_NAME: Der Name Ihres Clusters.REGION: Die Region, in der Ihre TPU Trillium-Kapazität verfügbar ist.ZONE: Die Zone, in der Ihre TPU Trillium-Kapazität verfügbar ist. Weitere Informationen finden Sie unter TPU-Verfügbarkeit in GKE.REPOSITORY: der Name Ihres Artifact Registry-RepositorysBUCKET_NAME: Der Name Ihres Storage-Buckets.
Google Cloud -Ressourcen erstellen und konfigurieren
Folgen Sie dieser Anleitung, um die erforderlichen Ressourcen zu erstellen.
GKE-Cluster und -Knotenpool erstellen
Sie können Gemma auf TPUs in einem GKE Autopilot- oder Standard-Cluster bereitstellen. GKE-verwaltetes DRANET fordert dynamisch leistungsstarke Netzwerkressourcen für Ihre verteilten Pods an und verwaltet sie. So kann GKE automatisch sekundäre Hochgeschwindigkeitsnetzwerke für die Kommunikation zwischen Beschleunigern bereitstellen, ohne dass eine manuelle VPC-Einrichtung erforderlich ist.
Autopilot
Erstellen Sie den Autopilot-Cluster in Cloud Shell:
gcloud container clusters create-auto ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --enable-ray-operator \ --location=${REGION}Konfigurieren Sie
kubectlfür die Kommunikation mit Ihrem Cluster:gcloud container clusters get-credentials ${CLUSTER_NAME} \ --location=${REGION}Wenn Sie das von GKE verwaltete DRANET im Autopilot-Modus verwenden möchten, stellen Sie die benutzerdefinierte ComputeClass-Ressource bereit, die im Repository bereitgestellt wird, um dynamische Netzwerke zu aktivieren:
Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f ai-ml/gke-ray/rayserve/llm/tpu/networking/dranet-compute-class.yaml
Standard
Erstellen Sie in Cloud Shell einen Standardcluster, in dem der Ray-Operator aktiviert ist und GKE Dataplane V2 verwendet wird:
gcloud container clusters create ${CLUSTER_NAME} \ --project=${PROJECT_ID} \ --addons=RayOperator,GcsFuseCsiDriver \ --machine-type=n2-standard-8 \ --enable-dataplane-v2 \ --workload-pool=${PROJECT_ID}.svc.id.goog \ --location=${ZONE}So erstellen Sie einen TPU-Slice-Knotenpool mit mehreren Hosts und aktiviertem DRANET-Treiber:
gcloud container node-pools create v6e-16 \ --location=${ZONE} \ --cluster=${CLUSTER_NAME} \ --machine-type=ct6e-standard-4t \ --tpu-topology=4x4 \ --num-nodes=4 \ --enable-gvnic \ --scopes=https://www.googleapis.com/auth/cloud-platform \ --accelerator-network-profile=auto \ --node-labels=cloud.google.com/gke-networking-dra-driver=true
Speicher und Authentifizierung konfigurieren
Erstellen Sie einen Cloud Storage-Bucket und initialisieren Sie eine Rapid Cache-Instanz, um das Laden von Modellen zu beschleunigen. Konfigurieren Sie dann die Authentifizierung für Hugging Face:
Erstellen Sie in Ihrer TPU-Zone einen Speicher-Bucket und initialisieren Sie die Rapid Cache-Instanz:
gcloud storage buckets create gs://${GS_BUCKET} --project=${PROJECT_ID} --default-storage-class=STANDARD --location=${REGION} gcloud storage buckets anywhere-caches create gs://${GS_BUCKET} ${ZONE} \ --ttl=1d \ --admission-policy=ADMIT_ON_FIRST_MISSKonfigurieren Sie Identitätsverknüpfungen, um den Gewichtungs-Bucket sicher in Ihre GKE-Pods einzubinden. Erstellen Sie zuerst ein dediziertes IAM-Dienstkonto und erteilen Sie ihm Leseberechtigungen für den Bucket:
gcloud iam service-accounts create ${GSA_NAME} gcloud storage buckets add-iam-policy-binding gs://${GS_BUCKET} \ --member="serviceAccount:${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"Erstellen Sie die Workload Identity-Föderation für GKE-Bindung und annotieren Sie das Kubernetes-ServiceAccount-Objekt:
gcloud iam service-accounts add-iam-policy-binding ${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com \ --role="roles/iam.workloadIdentityUser" \ --member="serviceAccount:${PROJECT_ID}.svc.id.goog[${NAMESPACE}/${KSA_NAME}]" kubectl create serviceaccount ${KSA_NAME} --namespace ${NAMESPACE} kubectl annotate serviceaccount ${KSA_NAME} --namespace ${NAMESPACE} iam.gke.io/gcp-service-account=${GSA_NAME}@${PROJECT_ID}.iam.gserviceaccount.comWenn Sie die Modellgewichte für Gemma 4 herunterladen möchten, müssen Sie die Lizenzvereinbarung von Google auf Hugging Face bestätigen. Rufen Sie die Seite zum Gemma 4-Modell auf Hugging Face auf.
Melden Sie sich an und akzeptieren Sie die Lizenzbedingungen, indem Sie auf Agree and access repository (Zustimmen und auf Repository zugreifen) klicken.
Rufen Sie die Einstellungen Ihres Hugging Face-Kontos auf und generieren Sie ein Zugriffstoken mit der Rolle
Read.Exportieren Sie Ihr Hugging Face-Token und erstellen Sie ein Kubernetes-Secret, damit Ray die Modellgewichte abrufen kann:
export HF_TOKEN=YOUR_HUGGING_FACE_TOKEN kubectl create secret generic hf-secret \ --from-literal=hf_api_token=${HF_TOKEN}
Benutzerdefiniertes Container-Image erstellen
Damit die Umgebung mit mehreren Hosts alle erforderlichen Abhängigkeiten enthält, erstellen Sie ein benutzerdefiniertes Image basierend auf dem TPU-Image von vLLM und kopieren Sie Ihr Bereitstellungsskript hinein.
Erstellen Sie ein Artifact Registry-Repository:
gcloud artifacts repositories create ${REPO_NAME} \ --repository-format=docker \ --location=${REGION}Authentifizieren Sie Docker für Ihr Projekt:
gcloud auth configure-docker ${REGION}-docker.pkg.devPrüfen Sie die
Dockerfileim Beispiel-Repository:Erstellen Sie das Image und übertragen Sie es per Push in die Artifact Registry:
docker build -t ${CUSTOM_IMAGE_URI} . docker push ${CUSTOM_IMAGE_URI}
Modellgewichte in Cloud Storage bereitstellen
Bevor Sie den RayCluster bereitstellen, sollten Sie die Leistung beim Laden von Modellen optimieren und für eine Hochverfügbarkeit in Ihrem verteilten TPU-Slice sorgen. Dazu können Sie die Modellgewichte mit einem eigenständigen Kubernetes-Job direkt in Ihrem Cloud Storage-Bucket vorab bereitstellen. Dieser entkoppelte Ansatz ermöglicht ein koordiniertes paralleles Streaming und beschleunigt die Cluster-Startzeiten.
Das Manifest für den Downloader-Job ist im Repository verfügbar. Manifestkonfiguration prüfen:
Erstellen Sie den Downloader-Job, indem Sie die Datei im Repository anwenden:
envsubst < ai-ml/gke-ray/rayserve/llm/tpu/components/model-downloader-job.yaml | kubectl apply -f -Beobachten Sie den Job, bis der Downloadstream einen Erfolg meldet:
kubectl logs -f job/model-downloader
Inferenzskript erstellen
Im folgenden Python-Skript wird eine Ray Serve-Anwendung definiert, die auf dem LLMConfig-Wrapper auf hoher Ebene von Ray Serve basiert.
Sehen Sie sich das
serve_tpu_multihost.py-Skript im Beispiel-Repository an:
Ray LLM API verstehen
Das Skript nutzt die native ray.serve.llm-Bibliothek von Ray Serve, um die Komplexität der TPU-Orchestrierung mit mehreren Hosts zu abstrahieren. Durch die Einbindung der vLLM-Engine bietet Ray Serve LLM ein leistungsstarkes, skalierbares Framework, das speziell für stark verteilte Inferenz-Arbeitslasten in der Produktion entwickelt wurde.
Die Verwendung der Ray LLM API bietet mehrere wichtige Vorteile:
- Bereitstellungen mit mehreren Knoten:Mit Ray Serve LLM können Nutzer umfangreiche Modelle bereitstellen, die sich über mehrere verteilte Hosts erstrecken (z. B. ein TPU-Slice mit mehreren Hosts). Dabei werden automatisches Placement, Koordination und Topologieverteilung nativ automatisiert.
- vLLM-Kompatibilität:Ray Serve LLM bietet eine OpenAI-kompatible API, die mit dem Server von vLLM übereinstimmt. Sie können auch auf das erweiterte Feature-Set von vLLM zugreifen (z. B. strukturierte Ausgabe, multimodale Funktionen und Reasoning-Modelle), während Sie die Arbeitslast in Ihrem Kubernetes-Cluster skalieren.
- Funktionen für die Produktion:Ray Serve LLM bietet Funktionen auf Unternehmensniveau wie integriertes Autoscaling, benutzerdefiniertes Anforderungsrouting für maximale Cache-Treffer und integrierte Integrationen für Messwerte und Beobachtbarkeit.
Im bereitgestellten Inferenzskript wird die Bereitstellung durch zwei Hauptkomponenten definiert:
LLMConfig:Dieses Objekt definiert die Bereitstellungskonfiguration. Sie gibt die Modellquelle, die Engine-Parameter für vLLM und dieaccelerator_configan. Wenn Sie{"kind": "tpu", "topology": "4x4"}festlegen, stellt Ray Serve LLM automatisch eine verteilte Placement Group bereit, die genau Ihrer physischen TPU v6e-Slice mit 16 Chips entspricht.build_openai_app:Bei dieser API wird die konfigurierte vLLM-Engine automatisch in einen OpenAI-kompatiblen FastAPI-Server eingebunden. So erhalten Sie ohne benutzerdefinierten Servercode eine branchenübliche REST API (wie/v1/chat/completions).
RayService bereitstellen
Stellen Sie die Netzwerkkonfiguration für die dynamische Ressourcenzuweisung (Dynamic Resource Allocation, DRA) und das RayService-Bereitstellungsmanifest bereit:
Fordern Sie alle verfügbaren NetDevice-Schnittstellen auf jedem Knoten an, indem Sie das im Repository bereitgestellte
ResourceClaimTemplatebereitstellen:Wenden Sie das Vorlagenmanifest auf Ihren Cluster an:
kubectl apply -f ai-ml/gke-ray/rayserve/llm/tpu/networking/all-netdev-template.yamlDas
RayService-Manifest ist im Repository verfügbar. Manifestkonfiguration prüfen:Stellen Sie den Dienst mit dem Manifest bereit:
Autopilot
Wenn Sie den Dienst in einem Autopilot-Cluster bereitstellen möchten, müssen Sie zuerst das Manifest herunterladen und lokal bearbeiten, um die Opt-in-Anmerkung
ComputeClassnodeSelectorhinzuzufügen, die für die DRANET-Netzwerkfunktionen in Autopilot erforderlich ist:curl -O https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/ai-ml/gke-ray/rayserve/llm/tpu/ray-service.tpu-v6e-multihost.yamlFügen Sie das Label unter dem Feld
nodeSelectorhinzu, sodass es so aussieht:nodeSelector: cloud.google.com/gke-tpu-accelerator: tpu-v6e-slice cloud.google.com/gke-tpu-topology: 4x4 cloud.google.com/compute-class: dranet-compute-classStellen Sie den Dienst dann mit dem geänderten lokalen Manifest bereit:
envsubst < ray-service.tpu-v6e-multihost.yaml | kubectl apply -f -
Standard
Wenn Sie den Dienst in einem Standardcluster bereitstellen möchten, stellen Sie das Manifest direkt aus dem Repository bereit:
envsubst < ai-ml/gke-ray/rayserve/llm/tpu/ray-service.tpu-v6e-multihost.yaml | kubectl apply -f -
Überprüfung
Warten Sie, bis der RayService verfügbar ist:
kubectl wait --for=condition=Ready --timeout=1800s rayservice/vllm-tpu-multihostWenn Sie prüfen möchten, ob das Modell erfolgreich geladen wurde, sehen Sie sich die Protokolle des Ray-Head-Pods an:
kubectl logs -f -l ray.io/node-type=head -c ray-head
Modell bereitstellen
In diesem Abschnitt interagieren Sie mit dem Modell. Das Modell muss vollständig heruntergeladen sein, bevor Sie fortfahren.
Portweiterleitung einrichten
Richten Sie mit dem folgenden Befehl die Portweiterleitung zum Modell ein:
kubectl port-forward svc/vllm-tpu-multihost-head-svc 8000:8000 2>&1 >/dev/null &
Mithilfe von curl mit dem Modell interagieren
In diesem Abschnitt wird gezeigt, wie Sie einen einfachen Smoke Test machen, um das bereitgestellte Gemma 4-Modell zu prüfen.
Verwenden Sie in einer neuen Terminalsitzung curl, um mit Ihrem Modell zu chatten:
curl -X POST http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemma-4-31B-it",
"messages": [
{
"role": "user",
"content": "Why is GKE managed DRANET preferred for multi-host TPU networking?"
}
],
"max_tokens": 256
}'
Die Ausgabe sieht dann ungefähr so aus:
{
"id": "chatcmpl-392692d3-5325-4832-a3a3-0b084c1045b0",
"object": "chat.completion",
"created": 1779883255,
"model": "google/gemma-4-31B-it",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "To understand why GKE-managed **DRANET** (Distributed RANET) is preferred for multi-host TPU networking, it is first necessary to understand the fundamental challenge of TPU pods: **the need for massive, low-latency, all-to-all communication.**\n\nWhen you scale a model across multiple TPU hosts (multi-host), the hosts must synchronize gradients and weights constantly. Standard TCP/IP networking introduces too much overhead (latency and CPU jitter) for these operations.\n\nHere is the detailed breakdown of why GKE-managed DRANET is the preferred architecture:\n\n### 1. Bypassing the Kernel (Zero-Copy Networking)\nStandard networking requires the operating system kernel to handle packets, moving data from the network card to kernel space and then to user space.\n* **The DRANET Advantage:** DRANET implements a specialized networking stack that allows for **Kernel Bypass**. It enables the TPU hardware/drivers to write data directly into the memory of the destination host. This reduces latency and eliminates the CPU overhead associated with processing network interrupts.\n\n### 2. High-Bandwidth, Low-Latency Interconnect\nMulti-host TPU training relies on a specialized topology (like a 2D or 3D"
},
"finish_reason": "length"
}
]
}
Optional: Über eine Gradio-Chat-Oberfläche mit dem Modell interagieren
In diesem Abschnitt erstellen Sie eine Webchat-Anwendung, mit der Sie mit Ihrem abgestimmten Modell für Anweisungen interagieren können.
Gradio ist eine Python-Bibliothek mit einem ChatInterface-Wrapper, der Benutzeroberflächen für Chatbots erstellt.
Chatoberfläche bereitstellen
Das Manifest für die Chatoberfläche ist im Repository verfügbar. Manifestkonfiguration prüfen:
Wenden Sie das Manifest an:
kubectl apply -f ai-ml/gke-ray/rayserve/llm/tpu/components/gradio.yaml
Warten Sie, bis die Bereitstellung verfügbar ist:
kubectl wait --for=condition=Available --timeout=900s deployment/gradio
Chatoberfläche verwenden
Führen Sie in Cloud Shell den folgenden Befehl aus:
kubectl port-forward service/gradio 8080:8080
Dadurch wird eine Portweiterleitung von Cloud Shell zum Gradio-Dienst erstellt.
Klicken Sie oben rechts in der Cloud Shell-Taskleiste auf das Symbol Webvorschau
. Klicken Sie auf Vorschau auf Port 8080. Im Browser wird ein neuer Tab geöffnet.
Interagieren Sie über die Gradio-Chat-Oberfläche mit Gemma. Fügen Sie einen Prompt hinzu und klicken Sie auf Senden.
Modellleistung beobachten
Wenn Sie die Dashboards für die Messwerte zur Beobachtbarkeit eines Modells ansehen möchten, das in KubeRay ausgeführt wird, können Sie die speziellen Ray on GKE-Dashboards verwenden.
Eine detaillierte Anleitung zum Konfigurieren Ihres Clusters und zum Aufrufen der Observability-Dashboards finden Sie unter Logs und Messwerte für Ray-Cluster in Google Kubernetes Engine (GKE) erfassen und ansehen.
Auf das Ray-Dashboard zugreifen
Um den Status Ihrer Ray-Akteure zu prüfen, detaillierte Anwendungslogs aufzurufen und die Nutzung auf Knotenebene nativ in Ray zu überwachen, können Sie auf das Ray-Dashboard zugreifen.
Leiten Sie den Ray-Head-Knotendienst an Ihren lokalen Computer weiter:
kubectl port-forward svc/vllm-tpu-multihost-head-svc 8265:8265Öffnen Sie Ihren Browser und rufen Sie
http://localhost:8265auf. Wenn Sie Cloud Shell verwenden, klicken Sie auf den Button Webvorschau und wählen Sie Vorschau auf Port 8265 aus.Wenn Sie Ihre vLLM-Deployments, den Systemzustand von Modellreplikaten und die Abfragelatenzen aufrufen möchten, klicken Sie auf den Tab Bereitstellen.
Bereinigen
So vermeiden Sie, dass Ihrem Google Cloud Konto die in dieser Anleitung verwendeten Ressourcen in Rechnung gestellt werden:
Löschen Sie den RayService:
kubectl delete rayservice vllm-tpu-multihostLöschen Sie den GKE-Cluster:
gcloud container clusters delete ${CLUSTER_NAME} --zone=${ZONE}
Nächste Schritte
- Weitere Informationen zu Ray in Kubernetes
- Informationen zum Bereitstellen von vLLM in GKE mit TPUs
- Weitere Informationen zu TPUs in GKE