Questo tutorial mostra come eseguire il deployment e l'addestramento di Qwen3-Coder-480B (Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8), un modello di programmazione Mixture of Experts, su Google Kubernetes Engine (GKE). Il deployment utilizza acceleratori TPU7x (Ironwood) 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 tpu7x-standard-4t multi-host, ciascuno disposto in una topologia 2x2x2 (otto chip TPU7x su due nodi per pool di nodi, per un totale di 16 chip TPU7x). Utilizza l'API LeaderWorkerSet di Kubernetes per:
- Esegui server di precompilazione e decodifica multi-host disaggregati su sezioni TPU7x separate con parallelismo dei tensori e parallelismo degli esperti abilitati.
- Instrada le richieste compatibili con OpenAI tramite un router di disaggregazione SGLang.
Obiettivi
- Configura il cluster GKE e i pool di nodi TPU7x multi-host.
- Configura le credenziali e installa il controller LeaderWorkerSet.
- Esegui il deployment dei workload di pre-compilazione, decodifica e router SGLang multi-host.
- Invia una richiesta di inferenza al servizio router SGLang.
- Esegui un workload di benchmark di distribuzione.
- 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]((https://cloud.google.com/products/calculator).
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
- Installa e inizializza Google Cloud CLI e installa
kubectl. Se utilizzi Cloud Shell, entrambi gli strumenti sono preinstallati.
Per utilizzare questo tutorial, devi disporre di un token di accesso a Hugging Face. Puoi creare 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 Lettura e inserisci un nome per il token.
- Viene visualizzato il token di accesso. Salva il token in un luogo sicuro.
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à della TPU:
Nella console Google Cloud , vai alla pagina Quote e limiti di sistema.
Verifica di avere almeno 2800 GiB di quota Google Cloud Hyperdisk Balanced disponibile tra i quattro volumi temporanei da 700 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.
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)
Configura 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 tuoi pool di nodi TPU7x, ad esempious-central1-c.YOUR_RESERVATION_NAME: se utilizzi una prenotazione, il nome della prenotazione TPU7x.YOUR_HF_TOKEN: il tuo token di accesso a Hugging Face.YOUR_SGLANG_TPU_IMAGE: se utilizzi un'immagine container TorchTPU SGLang personalizzata, l'URI dell'immagine; altrimenti, l'immagine TorchTPU SGLang predefinita.
Crea il cluster GKE
Per creare un cluster GKE in modalità Standard e collegare due pool di nodi TPU7x 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 una policy di posizionamento dei workload con throughput elevato con una topologia dell'acceleratore
2x2x2, obbligatoria per i node pool TPU7x multi-host:Crea due pool di nodi TPU7x multi-host (
tpu7x-pool-0etpu7x-pool-1), ciascuno contenente due noditpu7x-standard-4t(otto chip TPU7x in una topologia2x2x2per pool di nodi, per un totale di 16 chip TPU7x):Anziché utilizzare una prenotazione specifica, puoi anche creare i node pool utilizzando la capacità Spot o le Flex-start VM passando i seguenti flag:
- VM spot: sostituisci
--reservation-affinity=specifice--reservation=${RESERVATION}con--spotper utilizzare la capacità spot. La creazione delle istanze che utilizzano la capacità Spot potrebbe richiedere del tempo dopo la creazione del pool di nodi e potrebbe essere prerilasciata durante l'esecuzione dei workload. - VM con avvio flessibile: sostituisci
--num-nodes=2,--reservation-affinity=specifice--reservation=${RESERVATION}con--flex-start,--enable-autoscaling,--num-nodes=0,--min-nodes=0e--max-nodes=2per eseguire il provisioning del pool di nodi utilizzando l'opzione di consumo con avvio flessibile. Per saperne di più, consulta Esegui un workload batch di piccole dimensioni con TPU e VM Flex-start.
- VM spot: sostituisci
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-480b-multihost-disagg-v7x.yaml) definisce le seguenti risorse per coordinare la precompilazione e la decodifica disaggregate tra i due pool di nodi TPU7x 2x2x2:
- StorageClass (
hyperdisk-balanced-tpu): esegue il provisioning di volumi ReadWriteOnce temporanei da 700 GiB supportati dallo spazio di archiviazione Google Cloud Hyperdisk bilanciato. Ognuno dei quattro pod di precompilazione e decodifica monta il proprio volume in/dataper archiviare localmente il checkpointQwen/Qwen3-Coder-480B-A35B-Instruct-FP8scaricato. - Pool di precompilazione (
sglang-prefill-serviceesglang-tpu-prefill): esegue un LeaderWorkerSet disize: 2(un pod leader e un pod worker) assegnato esclusivamente a un pool di nodi TPU7x2x2x2(otto chip TPU, che forniscono 16 TensorCore). LeaderWorkerSet utilizza l'annotazioneleaderworkerset.sigs.k8s.io/exclusive-topologyimpostata su"cloud.google.com/gke-nodepool". I pod avvianosglang.launch_servercon i flag--disaggregation-mode=prefill,--tensor-parallel-size=16e--ep-size=16, esponendo la porta HTTP8000e la porta di bootstrap8998. - Pool di decodifica (
sglang-decode-serviceesglang-tpu-decode): esegue un LeaderWorkerSet disize: 2assegnato al secondo pool di nodi TPU7x2x2x2(otto chip TPU, che forniscono 16 TensorCore). LeaderWorkerSet avviasglang.launch_servercon i flag--disaggregation-mode=decode,--tensor-parallel-size=16e--ep-size=16. - 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-480b-multihost-disagg-v7x.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 precompilazione e decodifica fino al completamento dell'avvio:
Il download iniziale del modello, il caricamento dei pesi e la compilazione richiedono circa 15-30 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 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:
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 node pool TPU7x, la policy di posizionamento dei workload e il cluster GKE:
Passaggi successivi
- Scopri di più su SGLang.
- Scopri di più su TPU7x (Ironwood).
- Scopri di più su Cloud TPU.