Questo tutorial mostra come eseguire il deployment e l'erogazione di Qwen3-Coder-30B-A3B (Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8), un modello di programmazione Mixture of Experts, su Google Kubernetes Engine (GKE). Il deployment utilizza acceleratori TPU v6e (Trillium) multi-host e il framework di distribuzione SGLang con TorchTPU (torchtpu) e disaggregazione prefill-decode (DP).
Nella configurazione del deployment descritta in questo tutorial, esegui il provisioning di due node pool ct6e-standard-4t multi-host, ciascuno disposto in una topologia 2x4 (otto chip TPU v6e su due nodi per pool di nodi, per un totale di 16 chip TPU v6e). Utilizza l'API LeaderWorkerSet di Kubernetes per:
- Esegui server di pre-riempimento e decodifica multi-host disaggregati su sezioni TPU v6e separate con parallelismo dei tensori e parallelismo degli esperti abilitati.
- Instrada le richieste tramite un router di disaggregazione SGLang.
Per eseguire un workflow di gestione SGLang TorchTPU multi-host simile su acceleratori TPU7x (Ironwood) con il modello Qwen3-Coder-480B più grande, consulta Gestisci Qwen3-Coder-480B su GKE con SGLang TorchTPU multi-host e disaggregazione DP su acceleratori TPU7x.
Obiettivi
- Configura il cluster GKE e i node pool TPU v6e multi-host.
- Configura le credenziali e installa il controller LeaderWorkerSet.
- Esegui il deployment dei workload di prefill, decodifica e router SGLang multi-host.
- Invia una richiesta di inferenza al servizio router SGLang.
- Esegui un workload di benchmark di gestione.
- Eseguire la pulizia.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili diGoogle Cloud:
Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.
Al termine delle attività descritte in questo documento, puoi evitare l'addebito di ulteriori costi eliminando le risorse che hai creato. Per saperne di più, consulta Esegui la pulizia.
Prima di iniziare
Configura l'ambiente per il tutorial:
Installa e inizializza Google Cloud CLI e installa
kubectl. Se utilizzi Cloud Shell, entrambi gli strumenti sono preinstallati.Abilita l'API Kubernetes Engine, l'API Compute Engine, l'API Cloud TPU e l'API Artifact Registry nel tuo progetto Google Cloud :
Assicurati che il tuo progetto disponga di una quota disco e di una quota di indirizzi IP esterni sufficienti nella regione in cui si trova la capacità TPU:
Nella console Google Cloud , vai alla pagina Quote e limiti di sistema.
Verifica di avere almeno 400 GiB di quota Google Cloud Hyperdisk Balanced disponibile nei quattro volumi temporanei da 100 GiB utilizzati per la memorizzazione nella cache del modello dai pod di pre-riempimento e decodifica.
Filtra in base a Indirizzi IPv4 esterni regionali in uso e verifica di avere una quota di indirizzi IP sufficiente nella regione di destinazione.
Ottieni un token di accesso a Hugging Face
Per utilizzare questo tutorial, devi disporre di un token di accesso a Hugging Face. Puoi registrarti per un account senza costi su Hugging Face. Dopo aver creato un account, genera un token di accesso:
- Nella pagina Welcome to Hugging Face, fai clic sull'avatar del tuo account e seleziona Token di accesso.
- Nella pagina Token di accesso, fai clic su Crea nuovo token.
- Seleziona il tipo di token Read (Lettura) e inserisci un nome per il token.
- Viene visualizzato il token di accesso. Salva il token in un luogo sicuro.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per completare questo tutorial, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
- Amministratore Kubernetes Engine (
roles/container.admin) - Compute Admin (
roles/compute.admin) - Utente Service Account (
roles/iam.serviceAccountUser)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Assicurati che il tuo service account predefinito di Compute Engine disponga dei seguenti ruoli IAM (Identity and Access Management) nel tuo progetto:
- Kubernetes Engine Default Node Service Account
(
roles/container.defaultNodeServiceAccount) - Artifact Registry Reader
(
roles/artifactregistry.reader)
Imposta le variabili di ambiente
Esporta le variabili di ambiente che utilizzi in questo tutorial:
Sostituisci quanto segue:
YOUR_CLUSTER_NAME: il nome del tuo cluster GKE.YOUR_PROJECT_ID: l'ID del tuo progetto Google Cloud.YOUR_REGION: la regione in cui vuoi eseguire il deployment del cluster, ad esempious-central1.YOUR_ZONE: la zona in cui vuoi eseguire il deployment dei pool di nodi TPU v6e, ad esempious-central1-b.YOUR_RESERVATION_NAME: se utilizzi una prenotazione, il nome della prenotazione TPU v6e.YOUR_HF_TOKEN: il tuo token di accesso a Hugging Face.
Se utilizzi un'immagine container TorchTPU SGLang personalizzata, sostituisci lmsysorg/sglang:v0.1.0-tpu nella variabile SGLANG_IMAGE con l'URI della tua immagine.
Crea il cluster GKE
Per creare un cluster GKE in modalità Standard e collegare due pool di nodi TPU v6e multi-host per la disaggregazione di precompilazione e decodifica, completa i seguenti passaggi:
Crea un cluster GKE a livello di regione che utilizza nodi
e2-standard-4per il pool di nodi predefinito, che fornisce risorse di CPU e memoria sufficienti per il controller LeaderWorkerSet e il router di disaggregazione SGLang:Crea due pool di nodi TPU v6e multi-host, ciascuno contenente due nodi
ct6e-standard-4t(otto chip TPU v6e in una topologia2x4per pool di nodi, per un totale di 16 chip TPU v6e):Anziché utilizzare una prenotazione specifica, puoi anche creare i node pool utilizzando la capacità spot o le VM con avvio flessibile:
VM spot
Esegui il provisioning dei node pool utilizzando la capacità Spot sostituendo i flag
--reservation-affinity=specifice--reservation="${RESERVATION}"con il flag--spot:La creazione delle istanze che utilizzano la capacità spot potrebbe richiedere del tempo dopo la creazione del pool di nodi e potrebbero essere prerilasciate durante l'esecuzione dei workload.
Flex-start VM
Esegui il provisioning dei node pool utilizzando l'opzione di consumo Avvio flessibile:
Per saperne di più, consulta Esegui un workload batch di piccole dimensioni con TPU e VM con avvio flessibile.
Configura le credenziali
kubectlper comunicare con il tuo cluster:
Configura le credenziali e installa LeaderWorkerSet
Per preparare il cluster per il deployment SGLang multi-host, completa i seguenti passaggi:
Crea un secret di Kubernetes denominato
hf-secretper archiviare il tuo token di accesso Hugging Face:Installa CustomResourceDefinition e il controller LeaderWorkerSet sul tuo cluster:
Esegui il deployment del server SGLang multi-host
Il manifest del workload (qwen3-coder-30b-multihost-disagg-v6e-2x4.yaml) definisce le seguenti risorse per coordinare la precompilazione e la decodifica disaggregate per la distribuzione tra i due pool di nodi TPU v6e 2x4:
StorageClass (
hyperdisk-balanced-tpu): esegue il provisioning di volumi ReadWriteOnce temporanei da 100 GiB supportati dallo spazio di archiviazione Google Cloud Hyperdisk Balanced. Ognuno dei quattro pod di precompilazione e decodifica monta il proprio volume in/dataper archiviare localmente i checkpointQwen/Qwen3-Coder-30B-A3B-Instruct-FP8scaricati.Pool di precompilazione (
sglang-prefill-serviceesglang-tpu-prefill): esegue un LeaderWorkerSet, che contiene un pod leader e un pod worker, assegnati esclusivamente a un pool di nodi TPU v6e2x4. Questo pool di nodi ha otto chip TPU, che forniscono otto TensorCore. LeaderWorkerSet utilizza l'annotazioneleaderworkerset.sigs.k8s.io/exclusive-topologyimpostata su"cloud.google.com/gke-nodepool". I pod avvianosglang.launch_servercon i seguenti flag, esponendo la porta8000e la porta di bootstrap8998:--disaggregation-mode=prefill--tensor-parallel-size=8--ep-size=8
Pool di decodifica (
sglang-decode-serviceesglang-tpu-decode): esegue un LeaderWorkerSet disize: 2assegnato al secondo pool di nodi TPU v6e2x4(otto chip TPU, che forniscono otto TensorCore). LeaderWorkerSet avviasglang.launch_servercon i seguenti flag:--disaggregation-mode=decode--tensor-parallel-size=8--ep-size=8
Router di disaggregazione (
sglang-routeresglang-service): esegue un deployment della CPU che esegue il modulosglang_router.launch_routercon il flag--pd-disaggregationed espone un servizio ClusterIP sulla porta8000. Il router indirizza i prompt e coordina il trasferimento della cache KV tra i servizisglang-prefill-serviceesglang-decode-service.
Per eseguire il deployment e monitorare i server SGLang multi-host, completa i seguenti passaggi:
Scarica il manifest del workload:
In alternativa, crea un file denominato
qwen3-coder-30b-multihost-disagg-v6e-2x4.yamlcon i seguenti contenuti:Applica il manifest del workload al cluster:
Verifica che i pod di router, precompilazione e decodifica siano stati creati:
Quando tutti i pod sono pronti, l'output è simile al seguente:
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 40mMonitora i log dei pod leader di pre-compilazione e decodifica fino al completamento dell'avvio:
Il download iniziale del modello, il caricamento dei pesi e la compilazione richiedono circa 7-10 minuti alla prima esecuzione.
Se utilizzi una capacità preemptible, ad esempio una capacità spot o VM con avvio flessibile, la creazione dei nodi di sezioni TPU potrebbe richiedere più tempo dopo la creazione del pool di nodi e questi nodi potrebbero essere prerilasciati durante l'esecuzione dei workload. Per saperne di più, consulta Istanze VM preemptible. Per verificare se i nodi della sezione TPU sono stati creati, consulta Controlla lo stato e le condizioni del nodo.
Attendi che i log dei pod leader di precompilazione e decodifica restituiscano il seguente messaggio e che
kubectl get podsmostri1/1nella colonnaREADYper tutti i pod:The server is fired up and ready to roll!Apri una seconda sessione del terminale e inoltra la porta locale
8000asglang-service:Lascia il port forwarding in esecuzione in questa sessione del terminale.
Invia richieste di inferenza
Torna alla prima sessione del terminale e invia una richiesta di completamento della chat all'endpoint /v1/chat/completions esposto dal router SGLang:
Esegui un workload di benchmark
Per eseguire il benchmark del modello Qwen3-Coder-30B-A3B di cui è stato eseguito il deployment utilizzando un workload di input da 1024 token e di output da 1024 token (1k/1k) dal pod sglang-router, esegui il seguente comando:
Al termine del benchmark, cerca un output contenente metriche come le seguenti:
Output token throughput
Total token throughput
TTFT
TPOT
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi aggiuntivi relativi alle risorse utilizzate in questo tutorial, elimina le seguenti risorse:
Elimina i workload di pre-compilazione, decodifica e router SGLang:
Elimina i pool di nodi TPU v6e e il cluster GKE:
Passaggi successivi
- Scopri di più su SGLang.
- Scopri di più su TPU v6e (Trillium).
- Scopri di più su Cloud TPU.
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2026-11-03 UTC.