In dieser Anleitung erfahren Sie, wie Sie Qwen3-Coder-480B (Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8), ein Mixture-of-Experts-Codierungsmodell, in der Google Kubernetes Engine (GKE) bereitstellen und verwenden. Für die Bereitstellung werden Multi-Host-TPU7x-Beschleuniger (Ironwood) und das SGLang-Bereitstellungs-Framework mit TorchTPU (torchtpu) und Prefill-Decode-Disaggregation (PD) verwendet.
In der in dieser Anleitung beschriebenen Bereitstellungskonfiguration stellen Sie zwei tpu7x-standard-4t-Knotenpools mit mehreren Hosts bereit, die jeweils in einer 2x2x2-Topologie angeordnet sind (acht TPU7x-Chips auf zwei Knoten pro Knotenpool, also insgesamt 16 TPU7x-Chips). Mit der Kubernetes LeaderWorkerSet API können Sie Folgendes tun:
- Führen Sie disaggregierte Prefill- und Decodierungsserver mit mehreren Hosts auf separaten TPU7x-Slices mit aktivierter Tensor- und Expertenparallelität aus.
- OpenAI-kompatible Anfragen über einen SGLang-Disaggregationsrouter weiterleiten.
Ziele
- Richten Sie Ihren GKE-Cluster und die TPU7x-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 für Ihre voraussichtliche 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
- Installieren und initialisieren Sie die Google Cloud CLI und installieren Sie
kubectl. Wenn Sie Cloud Shell verwenden, sind beide Tools vorinstalliert.
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.
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 2.800 GiB verfügbares Google Cloud Hyperdisk Balanced-Kontingent für die vier sitzungsspezifischen 700-GiB-Volumes haben, die von den Prefill- und Decode-Pods für das Modell-Caching verwendet werden.
Filtern Sie nach In Verwendung befindliche regionale externe IPv4-Adressen und prüfen Sie, ob Sie in Ihrer Zielregion ein ausreichendes IP-Adresskontingent haben.
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 Google Cloud-Projekts.YOUR_REGION: die Region, in der Sie Ihren Cluster bereitstellen möchten, z. B.us-central1.YOUR_ZONE: Die Zone, in der Sie Ihre TPU7x-Knotenpools bereitstellen möchten, z. B.us-central1-c.YOUR_RESERVATION_NAME: Wenn Sie eine Reservierung verwenden, der Name Ihrer TPU7x-Reservierung.YOUR_HF_TOKEN: Ihr Hugging Face-Zugriffstoken.YOUR_SGLANG_TPU_IMAGE: Wenn Sie ein benutzerdefiniertes SGLang TorchTPU-Container-Image verwenden, der URI Ihres Images; andernfalls das Standard-SGLang TorchTPU-Image.
GKE-Cluster erstellen
Führen Sie die folgenden Schritte aus, um einen GKE-Cluster im Standardmodus zu erstellen und zwei Multi-Host-TPU7x-Knotenpools für die Disaggregation von Prefill und Decodierung anzuhängen:
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 eine Richtlinie für die Platzierung von Arbeitslasten mit hohem Durchsatz und einer
2x2x2-Beschleunigertopologie, die für TPU7x-Knotenpools mit mehreren Hosts erforderlich ist:Erstellen Sie zwei TPU7x-Knotenpools mit mehreren Hosts (
tpu7x-pool-0undtpu7x-pool-1), die jeweils zweitpu7x-standard-4t-Knoten enthalten (acht TPU7x-Chips in einer2x2x2-Topologie pro Knotenpool, insgesamt 16 TPU7x-Chips):Anstatt eine bestimmte Reservierung zu verwenden, können Sie die Knotenpools auch mit Spot-Kapazität oder Flex-Start-VMs erstellen. Übergeben Sie dazu die folgenden Flags:
- Spot-VMs: Ersetzen Sie
--reservation-affinity=specificund--reservation=${RESERVATION}durch--spot, um Spot-Kapazität zu verwenden. 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: Ersetzen Sie
--num-nodes=2,--reservation-affinity=specificund--reservation=${RESERVATION}durch--flex-start,--enable-autoscaling,--num-nodes=0,--min-nodes=0und--max-nodes=2, um den Knotenpool mit der Verbrauchsoption Flex-Start bereitzustellen. Weitere Informationen finden Sie unter Kleine Batcharbeitslast mit TPUs und Flex-Start-VMs ausführen.
- Spot-VMs: Ersetzen Sie
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 mit 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-480b-multihost-disagg-v7x.yaml) werden die folgenden Ressourcen definiert, um die disaggregierte Bereitstellung von Prefill und Decodierung über die beiden 2x2x2-TPU7x-Knotenpools hinweg zu koordinieren:
- StorageClass (
hyperdisk-balanced-tpu): stellt sitzungsspezifische 700-GiB-ReadWriteOnce-Volumes bereit, die von Google Cloud Hyperdisk Balanced-Speicher unterstützt werden. Jeder der vier Pods für die Vorbefüllung und Decodierung stellt ein eigenes Volume unter/databereit, um den heruntergeladenenQwen/Qwen3-Coder-480B-A35B-Instruct-FP8-Prüfpunkt lokal zu speichern. - Prefill-Pool (
sglang-prefill-serviceundsglang-tpu-prefill): Führt ein LeaderWorkerSet vonsize: 2(ein Leader-Pod und ein Worker-Pod) aus, das ausschließlich an einen2x2x2-TPU7x-Knotenpool (acht TPU-Chips, die 16 TensorCores bereitstellen) gebunden ist. 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 Flags--disaggregation-mode=prefill,--tensor-parallel-size=16und--ep-size=16und stellen den HTTP-Port8000und den Bootstrap-Port8998bereit. - Decodierungspool (
sglang-decode-serviceundsglang-tpu-decode): Führt ein LeaderWorkerSet vonsize: 2aus, das an den zweiten2x2x2-TPU7x-Knotenpool (acht TPU-Chips, die 16 TensorCores bereitstellen) angehängt ist. Das LeaderWorkerSet startetsglang.launch_servermit den Flags--disaggregation-mode=decode,--tensor-parallel-size=16und--ep-size=16. - 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-480b-multihost-disagg-v7x.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 40mÜberwachen Sie die Logs des Prefill- und Decode-Leader-Pods, bis der Startvorgang abgeschlossen ist:
Der erste Modelldownload, das Laden der Gewichtungen und die Kompilierung dauern beim ersten Durchlauf etwa 15 bis 30 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 vom SGLang-Router bereitgestellten Endpunkt /v1/chat/completions:
Benchmark-Arbeitslast ausführen
Führen Sie den folgenden Befehl aus, um das bereitgestellte Qwen3-Coder-Modell mit einer Arbeitslast von 1.024 Token Eingabe und 1.024 Token Ausgabe (1k/1k) vom Pod sglang-router zu benchmarken:
Bereinigen
Wenn Sie vermeiden möchten, dass Ihrem Google Cloud -Konto die in dieser Anleitung verwendeten Ressourcen 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 TPU7x-Knotenpools, die Richtlinie für die Arbeitslastplatzierung und den GKE-Cluster:
Nächste Schritte
- SGLang
- Weitere Informationen zu TPU7x (Ironwood)
- Weitere Informationen zu Cloud TPU