In dieser Anleitung wird gezeigt, wie Sie Qwen3-30B-A3B (Qwen/Qwen3-30B-A3B-FP8), ein Mixture of Experts-Modell, in der Google Kubernetes Engine (GKE) bereitstellen und bereitstellen. Für die Bereitstellung werden Multi-Host-TPU v6e (Trillium)-Beschleuniger und das vLLM TPU-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). Sie verwenden die Kubernetes JobSet API und Ray für Folgendes:
- Führen Sie disaggregierte Prefill- und Decodierungsserver mit mehreren Hosts auf separaten TPU v6e-Slices aus, wobei Datenparallelität und Expertenparallelität aktiviert sind.
- Anfragen über einen Disaggregations-Proxy weiterleiten.
Informationen zum Ausführen eines ähnlichen vLLM-TorchTPU-Bereitstellungs-Workflows mit mehreren Hosts auf TPU7x (Ironwood)-Beschleunigern mit dem größeren Qwen3.5-397B-Modell finden Sie unter Qwen3.5-397B in der GKE mit vLLM-TorchTPU mit mehreren Hosts auf TPU7x-Beschleunigern bereitstellen.
Ziele
- Richten Sie Ihren GKE-Cluster und Ihre TPU v6e-Knotenpools mit mehreren Hosts ein.
- Stellen Sie die Modellgewichtungen in einem Cloud Storage-Bucket bereit.
- Stellen Sie die vLLM-TorchTPU-Prefill-, Decodierungs- und Proxyserver mit mehreren Hosts mit JobSet bereit.
- Führen Sie eine Benchmark-Arbeitslast für die Bereitstellung aus und analysieren Sie die Ergebnisse.
- 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:
Aktivieren Sie die Kubernetes Engine API in Ihrem Google Cloud -Projekt:
Installieren und initialisieren Sie die Google Cloud CLI und installieren Sie
kubectl. Wenn Sie Cloud Shell verwenden, sind beide Tools vorinstalliert.Prüfen Sie, ob Ihr Projekt in der Region, in der sich Ihre TPU-Kapazität befindet, über ein ausreichendes SSD-Kontingent und ein ausreichendes Kontingent für externe IP-Adressen verfügt:
Rufen Sie in der Google Cloud Console die Seite Kontingente und Systemlimits auf.
Filtern Sie nach Persistent Disk SSD (GB) und prüfen Sie, ob Sie in Ihrer Zielregion ein ausreichendes SSD-Kontingent haben.
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) - Storage-Administrator (
roles/storage.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.
Umgebungsvariablen einrichten
So richten Sie Ihre Umgebungsvariablen ein:
Richten Sie die Authentifizierung ein:
Exportieren Sie die Umgebungsvariablen, die Sie in dieser Anleitung verwenden:
Ersetzen Sie Folgendes:
YOUR_PROJECT_ID: die ID IhresGoogle 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 TPU v6e-Knotenpools bereitstellen möchten, z. B.us-central1-c.YOUR_CLUSTER_NAME: Name Ihres GKE-Clusters.YOUR_RESERVATION_NAME: Wenn Sie eine Reservierung verwenden, der Name Ihrer TPU v6e-Reservierung.YOUR_GCS_BUCKET: der Name des Cloud Storage-Bucket, den Sie zum Staging der Modellgewichtungen verwenden.YOUR_HF_TOKEN: Ihr Hugging Face-Zugriffstoken.
Wenn Sie ein benutzerdefiniertes vLLM-TorchTPU-Container-Image verwenden, ersetzen Sie den Standard-Image-URI
vllm/vllm-torchtpuin der VariablenVLLM_IMAGEdurch den URI Ihres Images. Öffentliche Images finden Sie im vLLM TorchTPU-Repository.
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 mit aktivierter Workload Identity-Föderation für GKE:
Die Ausgabe sieht etwa so aus:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS STACK_TYPE asq-v6e us-central1 1.35.7-gke.1027000 35.226.172.84 e2-standard-4 1.35.7-gke.1027000 3 RUNNING IPV4Erstellen 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):In dieser Anleitung wird Spot-Kapazität (
--spot) verwendet. Es kann einige Zeit dauern, bis Instanzen mit Spot-Kapazität nach dem Erstellen des Knotenpools erstellt werden. Außerdem können sie während der Ausführung von Arbeitslasten vorzeitig beendet werden. Sie können die Knotenpools auch mit einer Reservierung oder Flex-Start-VMs erstellen, indem Sie die folgenden Flags übergeben:Spezifische Reservierung: Erstellen Sie den Knotenpool mit einer bestimmten Reservierung:
Weitere Informationen zu TPU-Reservierungen finden Sie unter Cloud TPU-Reservierungen.
Flex-Start-VMs: Stellen Sie den Knotenpool mit der Verbrauchsoption Flex-Start bereit:
Weitere Informationen finden Sie unter Kleine Batcharbeitslast mit TPUs und Flex-Start-VMs ausführen.
Die Ausgabe für jeden Knotenpool sieht in etwa so aus:
NAME MACHINE_TYPE DISK_SIZE_GB NODE_VERSION np-0 ct6e-standard-4t 100 1.35.7-gke.1027000Konfigurieren Sie
kubectl-Anmeldedaten für die Kommunikation mit Ihrem Cluster:
Modellgewichtungen in Cloud Storage bereitstellen
Stellen Sie die Modellgewichtungen in einem Cloud Storage-Bucket für Ihre Arbeitslastausführungen bereit:
Erstellen Sie einen Cloud Storage-Bucket mit einheitlichem Zugriff auf Bucket-Ebene:
Gewähren Sie dem Compute Engine-Standarddienstkonto und dem Kubernetes-Standarddienstkonto IAM-Berechtigungen (Identity and Access Management) für den Bucket:
Erstellen Sie ein Kubernetes-Secret mit dem Namen
hf-secret, um Ihr Hugging Face-Zugriffstoken zu speichern:Rufen Sie das Manifest
download_qwen3_30b.yamlab:Alternativ können Sie eine Datei mit dem Namen
download_qwen3_30b.yamlund folgendem Inhalt erstellen:Laden Sie die
Qwen/Qwen3-30B-A3B-FP8-Modellgewichtungen auf das Staging-Volume herunter und übertragen Sie sie in Ihren Cloud Storage-Bucket:Dieser Schritt dauert etwa 5 bis 10 Minuten.
Warten Sie, bis der Pod gestartet wurde, und überwachen Sie die Logs des Downloadjobs:
Prüfen Sie nach Abschluss des Jobs, ob alle 16
.safetensors-Shards in Ihrem Cloud Storage-Bucket vorhanden sind:Löschen Sie den abgeschlossenen Staging-Job:
Multi-Host-vLLM-TorchTPU-Server bereitstellen
Das Arbeitslastmanifest (v6e_qwen3_server_multihost_slice.yaml) definiert eine Kubernetes-JobSet-Ressource (vllm-qwen3-30b-pd-disagg-v6e) mit drei replizierten Jobs, die die disaggregierte Prefill- und Decode-Bereitstellung über die beiden 2x4-TPU-v6e-Knotenpools koordinieren:
Prefill-Server (
prefill): Führt zwei Replikate in einem2x4-TPU-v6e-Knotenpool aus (zweict6e-standard-4t-Knoten mit vier Chips pro Host, insgesamt acht TPU-Kerne). Die Pods bilden einen Ray-Cluster mit zwei Knoten und starten vLLM TorchTPU an Port8000fürQwen/Qwen3-30B-A3B-FP8. Der Server verwendetTPURaidenConnector, konfiguriert alskv_producermit den folgenden Flags:--data-parallel-size=8--tensor-parallel-size=1--enable-expert-parallel--load-format=runai_streamer
Decodierungsserver (
decode): Führt zwei Replikate im zweiten2x4-TPU-v6e-Knotenpool aus (insgesamt acht TPU-Kerne). Das JobSet verwendet Pod-Affinitäts- und Anti-Affinitätsregeln für das Labelcloud.google.com/gke-nodepool, um das Vorabfüllen und Decodieren auf separaten Knotenpools zu isolieren. Die Pods bilden einen Ray-Cluster mit zwei Knoten und starten vLLM TorchTPU auf Port7200, wobeiTPURaidenConnectoralskv_consumerkonfiguriert ist.Disaggregations-Proxy (
proxy): Führt das Skripttoy_proxy_server.pyauf Port10000aus, um das Anfrage-Routing und die KV-Cache-Übertragung zwischen dem Prefill-Server (Port8000) und dem Decodierungsserver (Port7200) zu koordinieren.
Führen Sie die folgenden Schritte aus, um die disaggregierten vLLM-Server bereitzustellen und zu überwachen:
Installieren Sie die Kubernetes-JobSet-CustomResourceDefinition und den Controller auf Ihrem Cluster:
Rufen Sie das Servermanifest ab:
Alternativ können Sie eine Datei mit dem Namen
v6e_qwen3_server_multihost_slice.yamlund folgendem Inhalt erstellen:Ersetzen Sie den Namen Ihres Cloud Storage-Bucket und das Container-Image in der Datei
v6e_qwen3_server_multihost_slice.yamlund wenden Sie das Manifest an:In dieser Konfiguration wird ein
2x4-TPU-v6e-Slice (zwei Knoten) für die Vorbefüllung und ein2x4-TPU-v6e-Slice (zwei Knoten) für die Decodierung verwendet. Wenn Sie die Anzahl der Knoten in einem der Pools skalieren möchten, aktualisieren Sie das Feldreplicas(replicas: NUM_NODES). Ersetzen SieNUM_NODESdurch die Anzahl der Knoten, die Sie verwenden möchten.Beobachten Sie die Pod-Logs für das Vorabfüllen und Decodieren, bis der Anwendungsstart abgeschlossen ist:
Das erste Laden und Kompilieren des Modells dauert beim ersten Durchlauf etwa 15 bis 25 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 Server-Logs für die Vorbefüllung und die Decodierung
Application startup completeangezeigt wird, bevor Sie die Benchmark-Arbeitslast ausführen:(APIServer pid=1) INFO: Started server process [1] (APIServer pid=1) INFO: Waiting for application startup. (APIServer pid=1) INFO: Application startup complete.
Benchmark-Arbeitslast ausführen
Führen Sie die folgenden Schritte aus, um das bereitgestellte Qwen3-30B-A3B-Modell mit einer Arbeitslast von 8.192 Token Eingabe und 1.024 Token Ausgabe (8k/1k) mit dem Disaggregations-Proxy zu vergleichen:
Rufen Sie das Benchmark-Manifest ab:
Alternativ können Sie eine Datei mit dem Namen
v6e_qwen3_benchmark_multihost_slice.yamlund folgendem Inhalt erstellen:Wenden Sie das Benchmark-Jobmanifest an:
Warten Sie, bis der Benchmark-Pod bereit ist, und überwachen Sie die Benchmark-Joblogs:
Suchen Sie nach Abschluss des Benchmarks nach einer Ausgabe, die Messwerte wie die folgenden enthält:
Output token throughputTotal token throughputTTFTTPOT
Bereinigen
Damit Ihrem Google Cloud -Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie die Kubernetes-Arbeitslasten, die TPU v6e-Knotenpools, den GKE-Cluster und Ihren Cloud Storage-Bucket:
Löschen Sie die Kubernetes-Arbeitslasten:
Löschen Sie die TPU v6e-Knotenpools und den GKE-Cluster:
Löschen Sie den Cloud Storage-Bucket, in dem die bereitgestellten Modellgewichtungen gespeichert sind. Wenn Sie die Modellgewichtungen beibehalten möchten, überspringen Sie diesen Schritt oder kopieren Sie sie an den gewünschten Speicherort:
Nächste Schritte
- Weitere Informationen zu vLLM auf Cloud TPU
- Weitere Informationen zu TPU v6e (Trillium)
- Weitere Informationen zu Cloud TPU