In dieser Anleitung wird gezeigt, wie Sie Qwen3-Coder-30B-A3B (Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8), ein Mixture of Experts-Codierungsmodell, in der Google Kubernetes Engine (GKE) bereitstellen und bereitstellen. Für die Bereitstellung werden Multi-Host-TPU v6e (Trillium)-Beschleuniger und das SGLang-Bereitstellungs-Framework mit TorchTPU (torchtpu) und Prefill-Decode-Disaggregation (PD) verwendet.
In der in dieser Anleitung beschriebenen Bereitstellungskonfiguration stellen Sie zwei ct6e-standard-4t-Knotenpools mit mehreren Hosts bereit, die jeweils in einer 2x4-Topologie angeordnet sind (acht TPU v6e-Chips auf zwei Knoten pro Knotenpool, also insgesamt 16 TPU v6e-Chips). Mit der Kubernetes LeaderWorkerSet API können Sie Folgendes tun:
- Führen Sie disaggregierte Prefill- und Decodierungsserver mit mehreren Hosts auf separaten TPU v6e-Slices aus, wobei Tensor-Parallelität und Experten-Parallelität aktiviert sind.
- Anfragen über einen SGLang-Disaggregationsrouter weiterleiten.
Wenn Sie einen ähnlichen SGLang TorchTPU-Bereitstellungsworkflow mit mehreren Hosts auf TPU7x-Beschleunigern (Ironwood) mit dem größeren Qwen3-Coder-480B-Modell ausführen möchten, lesen Sie den Hilfeartikel Qwen3-Coder-480B auf GKE mit SGLang TorchTPU mit mehreren Hosts und PD-Disaggregation auf TPU7x-Beschleunigern bereitstellen.
Ziele
- Richten Sie Ihren GKE-Cluster und Ihre TPU v6e-Knotenpools mit mehreren Hosts ein.
- Anmeldedaten konfigurieren und den LeaderWorkerSet-Controller installieren.
- Stellen Sie die SGLang-Arbeitslasten für Prefill, Decode und Router auf mehreren Hosts bereit.
- Senden Sie eine Inferenzanfrage an den SGLang-Routerdienst.
- Führen Sie eine Benchmark-Arbeitslast für die Bereitstellung aus.
- bereinigen.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten vonGoogle Cloud:
Mit dem Preisrechner können Sie eine Kostenschätzung Ihrer voraussichtlichen Nutzung vornehmen.
Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.
Hinweis
Richten Sie die Umgebung für die Anleitung ein:
Installieren und initialisieren Sie die Google Cloud CLI und installieren Sie
kubectl. Wenn Sie Cloud Shell verwenden, sind beide Tools vorinstalliert.Aktivieren Sie die Kubernetes Engine API, die Compute Engine API, die Cloud TPU API und die Artifact Registry API in Ihrem Google Cloud -Projekt:
Prüfen Sie, ob Ihr Projekt in der Region, in der sich Ihre TPU-Kapazität befindet, über ein ausreichendes Laufwerkskontingent und Kontingent für externe IP-Adressen verfügt:
Rufen Sie in der Google Cloud Console die Seite Kontingente und Systemlimits auf.
Prüfen Sie, ob Sie mindestens 400 GiB verfügbares Google Cloud Hyperdisk Balanced-Kontingent für die vier sitzungsspezifischen 100-GiB-Volumes haben, die von den Prefill- und Decode-Pods für das Modell-Caching verwendet werden.
Filtern Sie nach Genutzte regionale externe IPv4-Adressen und prüfen Sie, ob Sie in Ihrer Zielregion ein ausreichendes IP-Adresskontingent haben.
Hugging Face-Zugriffstoken abrufen
Für diese Anleitung benötigen Sie ein Hugging Face-Zugriffstoken. Sie können sich bei Hugging Face für ein kostenloses Konto registrieren. Nachdem Sie ein Konto erstellt haben, generieren Sie ein Zugriffstoken:
- Klicken Sie auf der Seite Willkommen bei Hugging Face auf Ihren Konto-Avatar und wählen Sie Zugriffstokens aus.
- Klicken Sie auf der Seite Zugriffstokens auf Neues Token erstellen.
- Wählen Sie den Tokentyp Lesen aus und geben Sie einen Namen für das Token ein.
- Ihr Zugriffstoken wird angezeigt. Speichern Sie das Token an einem sicheren Ort.
Erforderliche Rollen
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen dieser Anleitung benötigen:
- Kubernetes Engine-Administrator (
roles/container.admin) - Compute-Administrator (
roles/compute.admin) - Service Account User (
roles/iam.serviceAccountUser)
Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Achten Sie darauf, dass Ihr Compute Engine-Standarddienstkonto die folgenden IAM-Rollen (Identity and Access Management) für Ihr Projekt hat:
- Kubernetes Engine Default Node Service Account
(
roles/container.defaultNodeServiceAccount) - Artifact Registry-Leser
(
roles/artifactregistry.reader)
Umgebungsvariablen einrichten
Exportieren Sie die Umgebungsvariablen, die Sie in dieser Anleitung verwenden:
Ersetzen Sie Folgendes:
YOUR_CLUSTER_NAME: Name Ihres GKE-Clusters.YOUR_PROJECT_ID: die ID Ihres Projekts in Google Cloud.YOUR_REGION: die Region, in der Sie Ihren Cluster bereitstellen möchten, z. B.us-central1.YOUR_ZONE: die Zone, in der Sie Ihre TPU v6e-Knotenpools bereitstellen möchten, z. B.us-central1-b.YOUR_RESERVATION_NAME: Wenn Sie eine Reservierung verwenden, der Name Ihrer TPU v6e-Reservierung.YOUR_HF_TOKEN: Ihr Hugging Face-Zugriffstoken.
Wenn Sie ein benutzerdefiniertes SGLang-TorchTPU-Container-Image verwenden, ersetzen Sie lmsysorg/sglang:v0.1.0-tpu in der Variablen SGLANG_IMAGE durch den URI Ihres Images.
GKE-Cluster erstellen
So erstellen Sie einen GKE-Cluster im Standardmodus und hängen zwei TPU v6e-Knotenpools mit mehreren Hosts für die Disaggregation von Vorbefüllung und Decodierung an:
Erstellen Sie einen regionalen GKE-Cluster, der
e2-standard-4-Knoten für den Standardknotenpool verwendet. Dieser bietet ausreichend CPU- und Arbeitsspeicherressourcen für den LeaderWorkerSet-Controller und den SGLang-Disaggregationsrouter:Erstellen Sie zwei TPU v6e-Knotenpools mit mehreren Hosts, die jeweils zwei
ct6e-standard-4t-Knoten enthalten (acht TPU v6e-Chips in einer2x4-Topologie pro Knotenpool, insgesamt 16 TPU v6e-Chips):Anstatt eine bestimmte Reservierung zu verwenden, können Sie die Knotenpools auch mit Spot-Kapazität oder Flex-Start-VMs erstellen:
Spot-VMs
Stellen Sie die Knotenpools mit Spot-Kapazität bereit, indem Sie die Flags
--reservation-affinity=specificund--reservation="${RESERVATION}"durch das Flag--spotersetzen:Es kann einige Zeit dauern, bis Instanzen, die Spot-Kapazität verwenden, nach dem Erstellen des Knotenpools erstellt werden. Außerdem können sie während der Ausführung von Arbeitslasten vorzeitig beendet werden.
Flex-Start-VMs
Stellen Sie die Knotenpools mit der Verbrauchsoption Flex-Start bereit:
Weitere Informationen finden Sie unter Kleine Batcharbeitslast mit TPUs und Flex-Start-VMs ausführen.
Konfigurieren Sie
kubectl-Anmeldedaten für die Kommunikation mit Ihrem Cluster:
Anmeldedaten konfigurieren und LeaderWorkerSet installieren
Führen Sie die folgenden Schritte aus, um Ihren Cluster für die SGLang-Bereitstellung auf mehreren Hosts vorzubereiten:
Erstellen Sie ein Kubernetes-Secret mit dem Namen
hf-secret, um Ihr Hugging Face-Zugriffstoken zu speichern:Installieren Sie die LeaderWorkerSet-CustomResourceDefinition und den Controller in Ihrem Cluster:
SGLang-Server mit mehreren Hosts bereitstellen
Im Arbeitslastmanifest (qwen3-coder-30b-multihost-disagg-v6e-2x4.yaml) werden die folgenden Ressourcen definiert, um die disaggregierte Bereitstellung von Prefill und Decodierung über die beiden 2x4-TPU-v6e-Knotenpools hinweg zu koordinieren:
StorageClass (
hyperdisk-balanced-tpu): stellt sitzungsspezifische 100-GiB-ReadWriteOnce-Volumes bereit, die von Google Cloud Hyperdisk Balanced-Speicher unterstützt werden. Jeder der vier Pods für das Vorabfüllen und Decodieren stellt ein eigenes Volume unter/databereit, um die heruntergeladenenQwen/Qwen3-Coder-30B-A3B-Instruct-FP8-Prüfpunkte lokal zu speichern.Prefill-Pool (
sglang-prefill-serviceundsglang-tpu-prefill): Führt ein LeaderWorkerSet aus, das einen Leader-Pod und einen Worker-Pod enthält, die ausschließlich an einen2x4-TPU-v6e-Knotenpool gebunden sind. Dieser Knotenpool hat acht TPU-Chips, die acht TensorCores bereitstellen. Das LeaderWorkerSet verwendet die Annotationleaderworkerset.sigs.k8s.io/exclusive-topology, die auf"cloud.google.com/gke-nodepool"festgelegt ist. Die Pods startensglang.launch_servermit den folgenden Flags und stellen Port8000und Bootstrap-Port8998bereit:--disaggregation-mode=prefill--tensor-parallel-size=8--ep-size=8
Decodierungspool (
sglang-decode-serviceundsglang-tpu-decode): Führt ein LeaderWorkerSet vonsize: 2aus, das an den zweiten2x4-TPU-v6e-Knotenpool (acht TPU-Chips, die acht TensorCores bereitstellen) angehängt ist. Das LeaderWorkerSet startetsglang.launch_servermit den folgenden Flags:--disaggregation-mode=decode--tensor-parallel-size=8--ep-size=8
Disaggregationsrouter (
sglang-routerundsglang-service): Führt ein CPU-Deployment aus, das dassglang_router.launch_router-Modul mit dem Flag--pd-disaggregationausführt und einen ClusterIP-Dienst auf Port8000bereitstellt. Der Router leitet Prompts weiter und koordiniert die KV-Cache-Übertragung zwischen den Dienstensglang-prefill-serviceundsglang-decode-service.
So stellen Sie die SGLang-Server mit mehreren Hosts bereit und überwachen sie:
Laden Sie das Arbeitslastmanifest herunter:
Alternativ können Sie eine Datei mit dem Namen
qwen3-coder-30b-multihost-disagg-v6e-2x4.yamlund folgendem Inhalt erstellen:Wenden Sie das Arbeitslastmanifest auf Ihren Cluster an:
Prüfen Sie, ob die Router-, Prefill- und Decodierungs-Pods erstellt wurden:
Wenn alle Pods bereit sind, sieht die Ausgabe in etwa so aus:
NAME READY STATUS RESTARTS AGE sglang-router-6d87cb8c7d-gv4wr 1/1 Running 0 39m sglang-tpu-decode-0 1/1 Running 0 40m sglang-tpu-decode-0-1 1/1 Running 0 40m sglang-tpu-prefill-0 1/1 Running 0 40m sglang-tpu-prefill-0-1 1/1 Running 0 40mBeobachten Sie die Logs des Prefill- und Decode-Leader-Pods, bis der Start abgeschlossen ist:
Der erste Download des Modells, das Laden der Gewichtungen und die Kompilierung dauern beim ersten Durchlauf etwa sieben bis zehn Minuten.
Wenn Sie Kapazität auf Abruf wie Spot-Kapazität oder Flex-Start-VMs verwenden, kann es nach dem Erstellen des Knotenpools länger dauern, bis Ihre TPU-Slice-Knoten erstellt werden. Außerdem können sie während der Ausführung von Arbeitslasten vorzeitig beendet werden. Weitere Informationen finden Sie unter VM-Instanzen auf Abruf. Informationen zum Prüfen, ob Ihre TPU-Slice-Knoten erstellt wurden, finden Sie unter Status und Bedingungen des Knotens prüfen.
Warten Sie, bis in den Logs der Leader-Pods für Vorbefüllung und Decodierung die folgende Meldung ausgegeben wird und
kubectl get podsfür alle Pods1/1in der SpalteREADYanzeigt:The server is fired up and ready to roll!Öffnen Sie eine zweite Terminalsitzung und leiten Sie den lokalen Port
8000ansglang-serviceweiter:Lassen Sie die Portweiterleitung in dieser Terminalsitzung laufen.
Inferenzanfragen senden
Kehren Sie zur ersten Terminalsitzung zurück und senden Sie eine Anfrage zur Chatvervollständigung an den /v1/chat/completions-Endpunkt, der vom SGLang-Router bereitgestellt wird:
Benchmark-Arbeitslast ausführen
Führen Sie den folgenden Befehl aus, um das bereitgestellte Qwen3-Coder-30B-A3B-Modell mit einer Arbeitslast von 1.024 Token Eingabe und 1.024 Token Ausgabe (1k/1k) vom sglang-router-Pod zu benchmarken:
Suchen Sie nach Abschluss des Benchmarks nach einer Ausgabe, die Messwerte wie die folgenden enthält:
Output token throughput
Total token throughput
TTFT
TPOT
Bereinigen
Wenn Sie vermeiden möchten, dass Ihrem Google Cloud Konto die in dieser Anleitung verwendeten Ressourcen weiterhin in Rechnung gestellt werden, löschen Sie die folgenden Ressourcen:
Löschen Sie die SGLang-Arbeitslasten für Vorbefüllung, Decodierung und Router:
Löschen Sie die TPU v6e-Knotenpools und den GKE-Cluster:
Nächste Schritte
- SGLang
- Weitere Informationen zu TPU v6e (Trillium)
- Weitere Informationen zu Cloud TPU
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2026-11-03 (UTC).