Questo tutorial mostra come eseguire il deployment e l'erogazione di Qwen3-30B-A3B (Qwen/Qwen3-30B-A3B-FP8), un modello Mixture of Experts, su Google Kubernetes Engine (GKE). Il deployment utilizza acceleratori TPU v6e (Trillium) multi-host e il framework di distribuzione vLLM TPU 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 JobSet di Kubernetes e Ray per:
- Esegui server di pre-compilazione e decodifica multi-host disaggregati su sezioni TPU v6e separate con il parallelismo dei dati e il parallelismo degli esperti abilitati.
- Instrada le richieste tramite un proxy di disaggregazione.
Per eseguire un workflow di distribuzione TorchTPU vLLM multi-host simile su acceleratori TPU7x (Ironwood) con il modello Qwen3.5-397B più grande, consulta Distribuisci Qwen3.5-397B su GKE con TorchTPU vLLM multi-host su acceleratori TPU7x.
Obiettivi
- Configura il cluster GKE e i node pool TPU v6e multi-host.
- Esegui lo stage dei pesi del modello in un bucket Cloud Storage.
- Esegui il deployment dei server di pre-compilazione, decodifica e server proxy vLLM TorchTPU multi-host con JobSet.
- Eseguire un workload di benchmark di distribuzione e analizzare i risultati.
- 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:
Abilita l'API Kubernetes Engine nel tuo progetto Google Cloud :
Installa e inizializza Google Cloud CLI e installa
kubectl. Se utilizzi Cloud Shell, entrambi gli strumenti sono preinstallati.Assicurati che il tuo progetto disponga di una quota di SSD e di indirizzi IP esterni sufficiente nella regione in cui si trova la capacità della TPU:
Nella console Google Cloud , vai alla pagina Quote e limiti di sistema.
Filtra per Persistent Disk SSD (GB) e verifica di avere una quota SSD disponibile sufficiente nella regione di destinazione.
Filtra per 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) - Storage Admin (
roles/storage.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.
Imposta le variabili di ambiente
Per configurare le variabili di ambiente, completa i seguenti passaggi:
Configura l'autenticazione:
Esporta le variabili di ambiente che utilizzi in questo tutorial:
Sostituisci quanto segue:
YOUR_PROJECT_ID: l'ID del tuo progettoGoogle 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-c.YOUR_CLUSTER_NAME: il nome del tuo cluster GKE.YOUR_RESERVATION_NAME: se utilizzi una prenotazione, il nome della prenotazione TPU v6e.YOUR_GCS_BUCKET: il nome del bucket Cloud Storage che utilizzi per l'archiviazione temporanea dei pesi del modello.YOUR_HF_TOKEN: il tuo token di accesso a Hugging Face.
Se utilizzi un'immagine container vLLM TorchTPU personalizzata, sostituisci l'URI dell'immagine
vllm/vllm-torchtpupredefinita nella variabileVLLM_IMAGEcon l'URI della tua immagine. Per le immagini pubbliche, consulta il repository vLLM TorchTPU.
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 con Workload Identity Federation for GKE abilitato:
L'output è simile al seguente:
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 IPV4Crea 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):Questo tutorial utilizza la capacità Spot (
--spot). Le istanze che utilizzano la capacità Spot potrebbero richiedere del tempo per essere create dopo la creazione del pool di nodi e potrebbero essere prerilasciate durante l'esecuzione dei workload. Puoi anche creare i node pool utilizzando una prenotazione o le Flex-start VM passando i seguenti flag:Prenotazione specifica: crea il pool di nodi utilizzando una prenotazione specifica:
Per saperne di più sulle prenotazioni TPU, consulta Informazioni sulle prenotazioni Cloud TPU.
VM con avvio flessibile: esegui il provisioning del pool di nodi 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.
L'output per ogni pool di nodi è simile al seguente:
NAME MACHINE_TYPE DISK_SIZE_GB NODE_VERSION np-0 ct6e-standard-4t 100 1.35.7-gke.1027000Configura le credenziali
kubectlper comunicare con il tuo cluster:
Esegui lo stage dei pesi del modello in Cloud Storage
Esegui lo stage dei pesi del modello in un bucket Cloud Storage per le esecuzioni del workload:
Crea un bucket Cloud Storage con accesso uniforme a livello di bucket:
Concedi le autorizzazioni Identity and Access Management (IAM) sul bucket al account di servizio Compute Engine predefinito e al service account Kubernetes predefinito:
Crea un secret di Kubernetes denominato
hf-secretper archiviare il tuo token di accesso Hugging Face:Recupera il manifest
download_qwen3_30b.yaml:In alternativa, crea un file denominato
download_qwen3_30b.yamlcon i seguenti contenuti:Scarica i pesi del modello
Qwen/Qwen3-30B-A3B-FP8nel volume di gestione temporanea e trasferiscili nel tuo bucket Cloud Storage:Il completamento di questo passaggio richiede circa 5-10 minuti.
Attendi l'avvio del pod e monitora i log del job di download:
Al termine del job, verifica che tutti i 16 shard
.safetensorssi trovino nel tuo bucket Cloud Storage:Elimina il job di gestione temporanea completato:
Esegui il deployment del server TorchTPU vLLM multi-host
Il manifest del workload (v6e_qwen3_server_multihost_slice.yaml) definisce una risorsa JobSet Kubernetes (vllm-qwen3-30b-pd-disagg-v6e) con tre job replicati che coordinano la precompilazione e la decodifica disaggregate in due node pool TPU v6e 2x4:
Server di precompilazione (
prefill): esegue due repliche in un pool di nodi TPU v6e2x4(due nodict6e-standard-4tcon quattro chip per host, per un totale di otto core TPU). I pod formano un cluster Ray a due nodi e avviano vLLM TorchTPU sulla porta8000perQwen/Qwen3-30B-A3B-FP8. Il server utilizzaTPURaidenConnectorconfigurato comekv_producercon i seguenti flag:--data-parallel-size=8--tensor-parallel-size=1--enable-expert-parallel--load-format=runai_streamer
Server di decodifica (
decode): esegue due repliche nel secondo pool di nodi TPU v6e2x4(otto core TPU in totale). Il JobSet utilizza le regole di affinità e anti-affinità dei pod sull'etichettacloud.google.com/gke-nodepoolper isolare il pre-riempimento e la decodifica in pool di nodi separati. I pod formano un cluster Ray a due nodi e avviano vLLM TorchTPU sulla porta7200conTPURaidenConnectorconfigurato comekv_consumer.Proxy di disaggregazione (
proxy): esegue lo scripttoy_proxy_server.pysulla porta10000per coordinare il routing delle richieste e il trasferimento della cache KV tra il server di precompilazione (porta8000) e il server di decodifica (porta7200).
Per eseguire il deployment e monitorare i server vLLM disaggregati, completa i seguenti passaggi:
Installa CustomResourceDefinition e il controller JobSet di Kubernetes sul tuo cluster:
Recupera il manifest del server:
In alternativa, crea un file denominato
v6e_qwen3_server_multihost_slice.yamlcon i seguenti contenuti:Sostituisci il nome del bucket Cloud Storage e l'immagine container nel file
v6e_qwen3_server_multihost_slice.yamle applica il manifest:Questa configurazione utilizza una sezione TPU v6e
2x4(due nodi) per il pre-riempimento e una sezione TPU v6e2x4(due nodi) per la decodifica. Per scalare il numero di nodi in uno dei pool, aggiorna il camporeplicas(replicas: NUM_NODES). SostituisciNUM_NODEScon il numero di nodi che vuoi utilizzare.Monitora i log dei pod di precompilazione e decodifica fino al completamento dell'avvio dell'applicazione:
Il caricamento e la compilazione iniziali del modello richiedono circa 15-25 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 ulteriori dettagli, 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 del server di precompilazione e decodifica segnalino
Application startup completeprima di eseguire il workload di benchmark:(APIServer pid=1) INFO: Started server process [1] (APIServer pid=1) INFO: Waiting for application startup. (APIServer pid=1) INFO: Application startup complete.
Esegui un workload di benchmark
Per eseguire il benchmark del modello Qwen3-30B-A3B di cui è stato eseguito il deployment utilizzando un workload con input di 8192 token e output di 1024 token (8k/1k) rispetto al proxy di disaggregazione, completa i seguenti passaggi:
Recupera il manifest del benchmark:
In alternativa, crea un file denominato
v6e_qwen3_benchmark_multihost_slice.yamlcon i seguenti contenuti:Applica il manifest del job di benchmark:
Attendi che il pod di benchmark sia pronto e monitora i log del job di benchmark:
Al termine del benchmark, cerca un output contenente metriche come le seguenti:
Output token throughputTotal token throughputTTFTTPOT
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina i workload Kubernetes, i pool di nodi TPU v6e, il cluster GKE e il bucket Cloud Storage:
Elimina i workload Kubernetes:
Elimina i pool di nodi TPU v6e e il cluster GKE:
Elimina il bucket Cloud Storage in cui sono archiviati i pesi del modello di cui è stato eseguito lo stage. Se vuoi conservare i pesi del modello, salta questo passaggio o copiali nella posizione che preferisci:
Passaggi successivi
- Scopri di più su vLLM su Cloud TPU.
- Scopri di più su TPU v6e (Trillium).
- Scopri di più su Cloud TPU.