En este instructivo, se muestra cómo implementar y entregar
Qwen3-Coder-30B-A3B (Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8),
una combinación de modelos de codificación de expertos, en Google Kubernetes Engine (GKE). La implementación
usa aceleradores TPU v6e (Trillium) de varios hosts y el
framework de entrega de SGLang con
TorchTPU (torchtpu) y desagregación de decodificación de relleno previo (PD).
En la configuración de implementación que se describe en este instructivo, aprovisionas
dos grupos de nodos ct6e-standard-4t de varios hosts, cada uno organizado en una topología
2x4 (ocho chips TPU v6e en dos nodos por grupo de nodos, para un total de 16
chips TPU v6e). Usa la API de LeaderWorkerSet de Kubernetes para hacer lo siguiente:
- Ejecuta servidores de decodificación y precompletado de varios hosts desagregados en porciones de TPU v6e independientes con el paralelismo tensorial y el paralelismo de expertos habilitados.
- Enruta las solicitudes a través de un router de desagregación de SGLang.
Para ejecutar un flujo de trabajo similar de entrega de TorchTPU de SGLang de varios hosts en aceleradores TPU7x (Ironwood) con el modelo Qwen3-Coder-480B más grande, consulta Entrega Qwen3-Coder-480B en GKE con TorchTPU de SGLang de varios hosts y desagregación de PD en aceleradores TPU7x.
Objetivos
- Configura tu clúster de GKE y los grupos de nodos de TPU v6e de varios hosts.
- Configura las credenciales y, luego, instala el controlador de LeaderWorkerSet.
- Implementa las cargas de trabajo de precompletado, decodificación y router de SGLang de varios hosts.
- Envía una solicitud de inferencia al servicio de router de SGLang.
- Ejecuta una carga de trabajo de comparativas de entrega.
- Realizar una limpieza
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
Configura tu entorno para el instructivo:
Instala y, luego, inicializa Google Cloud CLI, y, luego, instala
kubectl. Si usas Cloud Shell, ambas herramientas están preinstaladas.Habilita la API de Kubernetes Engine, la API de Compute Engine, la API de Cloud TPU y la API de Artifact Registry en tu proyecto de Google Cloud :
Asegúrate de que tu proyecto tenga suficiente cuota de disco y de dirección IP externa en la región en la que se encuentra tu capacidad de TPU:
En la consola de Google Cloud , ve a la página Cuotas y límites del sistema.
Verifica que tengas al menos 400 GiB de cuota disponible de Google Cloud Hyperdisk Balanced en los cuatro volúmenes efímeros de 100 GiB que usan los Pods de precompletado y decodificación para el almacenamiento en caché de modelos.
Filtra por Direcciones IPv4 externas regionales en uso y verifica que tengas suficiente cuota de direcciones IP en tu región de destino.
Obtén un token de acceso de Hugging Face
Necesitas un token de acceso de Hugging Face para usar este instructivo. Puedes registrarte para obtener una cuenta gratuita en Hugging Face. Después de tener una cuenta, genera un token de acceso:
- En la página Welcome to Hugging Face, haz clic en el avatar de tu cuenta y selecciona Tokens de acceso.
- En la página Tokens de acceso, haz clic en Crear token nuevo.
- Selecciona el tipo de token Lectura y, luego, ingresa un nombre para el token.
- Se mostrará tu token de acceso. Guarda el token en un lugar seguro.
Roles obligatorios
Si quieres obtener los permisos que necesitas para completar este instructivo, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
- Administrador de Kubernetes Engine (
roles/container.admin) - Administrador de Compute (
roles/compute.admin) - Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.
Asegúrate de que tu cuenta de servicio predeterminada de Compute Engine tenga los siguientes roles de Identity and Access Management (IAM) en tu proyecto:
- Cuenta de servicio predeterminada de nodos de Kubernetes Engine
(
roles/container.defaultNodeServiceAccount) - Lector de Artifact Registry
(
roles/artifactregistry.reader)
Configura tus variables de entorno
Exporta las variables de entorno que usarás en este instructivo:
Reemplaza lo siguiente:
YOUR_CLUSTER_NAME: el nombre del clúster de GKE.YOUR_PROJECT_ID: Es el ID de tu proyecto de Google Cloud.YOUR_REGION: Es la región en la que deseas implementar tu clúster, comous-central1.YOUR_ZONE: Es la zona en la que deseas implementar tus grupos de nodos de TPU v6e, comous-central1-b.YOUR_RESERVATION_NAME: Si usas una reserva, es el nombre de tu reserva de TPU v6e.YOUR_HF_TOKEN: Es tu token de acceso de Hugging Face.
Si usas una imagen de contenedor personalizada de SGLang TorchTPU, reemplaza
lmsysorg/sglang:v0.1.0-tpu en la variable SGLANG_IMAGE por el URI de tu
imagen.
Crea el clúster de GKE
Para crear un clúster de GKE en modo estándar y conectar dos grupos de nodos TPU v6e de varios hosts para la desagregación de precompletado y decodificación, completa los siguientes pasos:
Crea un clúster de GKE regional que use nodos
e2-standard-4para el grupo de nodos predeterminado, que proporciona suficientes recursos de CPU y memoria para el controlador LeaderWorkerSet y el router de desagregación de SGLang:Crea dos grupos de nodos de TPU v6e de varios hosts, cada uno con dos nodos
ct6e-standard-4t(ocho chips TPU v6e en una topología2x4por grupo de nodos, para un total de 16 chips TPU v6e):En lugar de usar una reserva específica, también puedes crear los grupos de nodos con capacidad Spot o VMs de inicio flexible:
VMs Spot
Aprovisiona los grupos de nodos con la capacidad de Spot reemplazando las marcas
--reservation-affinity=specificy--reservation="${RESERVATION}"por la marca--spot:Las instancias que usan la capacidad de Spot pueden tardar en crearse después de que se crea el grupo de nodos, y se pueden interrumpir durante las ejecuciones de las cargas de trabajo.
VMs de inicio flexible
Aprovisiona los grupos de nodos con la opción de consumo inicio flexible:
Para obtener más información, consulta Ejecuta una carga de trabajo por lotes pequeña con TPU y VMs de inicio flexible.
Configura las credenciales de
kubectlpara comunicarte con tu clúster:
Configura las credenciales e instala LeaderWorkerSet
Para preparar tu clúster para la implementación de SGLang de varios hosts, completa los siguientes pasos:
Crea un Secret de Kubernetes llamado
hf-secretpara almacenar tu token de acceso de Hugging Face:Instala la CustomResourceDefinition y el controlador de LeaderWorkerSet en tu clúster:
Implementa el servidor de SGLang de varios hosts
El manifiesto de la carga de trabajo (qwen3-coder-30b-multihost-disagg-v6e-2x4.yaml) define
los siguientes recursos para coordinar la entrega de precompletado y decodificación desagregados
en los dos grupos de nodos de TPU v6e de 2x4:
StorageClass (
hyperdisk-balanced-tpu): Aprovisiona volúmenes efímeros de 100 GiB ReadWriteOnce respaldados por el almacenamiento de Google Cloud Hyperdisk Balanced. Cada uno de los cuatro Pods de precompletado y decodificación activa su propio volumen en/datapara almacenar los puntos de control deQwen/Qwen3-Coder-30B-A3B-Instruct-FP8descargados de forma local.Grupo de relleno previo (
sglang-prefill-serviceysglang-tpu-prefill): Ejecuta un LeaderWorkerSet, que contiene un Pod líder y un Pod trabajador, fijados exclusivamente a un grupo de nodos TPU v6e2x4. Este grupo de nodos tiene ocho chips TPU, que proporcionan ocho TensorCores. LeaderWorkerSet usa la anotaciónleaderworkerset.sigs.k8s.io/exclusive-topologyestablecida en"cloud.google.com/gke-nodepool". Los Pods iniciansglang.launch_servercon las siguientes marcas, lo que expone el puerto8000y el puerto de arranque8998:--disaggregation-mode=prefill--tensor-parallel-size=8--ep-size=8
Grupo de decodificación (
sglang-decode-serviceysglang-tpu-decode): Ejecuta un LeaderWorkerSet desize: 2fijado al segundo grupo de nodos de TPU v6e2x4(ocho chips TPU, que proporcionan ocho TensorCores). LeaderWorkerSet iniciasglang.launch_servercon las siguientes marcas:--disaggregation-mode=decode--tensor-parallel-size=8--ep-size=8
Router de desagregación (
sglang-routerysglang-service): Ejecuta una implementación de CPU que ejecuta el módulosglang_router.launch_routercon la marca--pd-disaggregationy expone un Service ClusterIP en el puerto8000. El router dirige los mensajes y coordina la transferencia de la caché de KV entre los serviciossglang-prefill-serviceysglang-decode-service.
Para implementar y supervisar los servidores de SGLang de varios hosts, completa los siguientes pasos:
Descarga el manifiesto de la carga de trabajo:
Como alternativa, crea un archivo llamado
qwen3-coder-30b-multihost-disagg-v6e-2x4.yamlcon el siguiente contenido:Aplica el manifiesto de la carga de trabajo al clúster:
Verifica que se hayan creado los Pods de router, prefill y decode:
Cuando todos los Pods están listos, el resultado es similar al siguiente:
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 40mSupervisa los registros del Pod líder de precompletado y decodificación hasta que se complete el inicio:
La descarga inicial del modelo, la carga de pesos y la compilación tardan aproximadamente entre siete y diez minutos en la primera ejecución.
Si usas capacidad interrumpible, como la capacidad de Spot o las VMs de inicio flexible, es posible que los nodos de porción de TPU tarden más en crearse después de la creación del grupo de nodos y que se interrumpan durante las ejecuciones de las cargas de trabajo. Para obtener más información, consulta Instancias de VMs interrumpibles. Para verificar si se crearon los nodos de porción de TPU, consulta Verifica el estado y las condiciones del nodo.
Espera hasta que los registros de los Pods líderes de precompletado y decodificación muestren el siguiente mensaje y
kubectl get podsmuestre1/1en la columnaREADYpara todos los Pods:The server is fired up and ready to roll!Abre una segunda sesión de terminal y reenvía el puerto local
8000asglang-service:Deja la redirección de puertos en ejecución en esta sesión de terminal.
Envía solicitudes de inferencia
Regresa a tu primera sesión de terminal y envía una solicitud de finalización de chat al
extremo /v1/chat/completions expuesto por el router de SGLang:
Ejecuta una carga de trabajo de comparativas
Para comparar el modelo Qwen3-Coder-30B-A3B implementado con una carga de trabajo de entrada de 1,024 tokens
y salida de 1,024 tokens (1k/1k) desde el Pod sglang-router, ejecuta el
siguiente comando:
Una vez que se complete la comparativa, busca un resultado que contenga métricas como las siguientes:
Output token throughput
Total token throughput
TTFT
TPOT
Realiza una limpieza
Para evitar que se apliquen cargos adicionales continuos a tu cuenta de Google Cloud por los recursos que usaste en este instructivo, borra los siguientes recursos:
Borra las cargas de trabajo de precompletado, decodificación y router de SGLang:
Borra los grupos de nodos de TPU v6e y el clúster de GKE:
¿Qué sigue?
- Obtén más información sobre SGLang.
- Obtén más información sobre la TPU v6e (Trillium).
- Más información sobre Cloud TPU.
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2026-11-03 (UTC)