En este instructivo, se muestra cómo implementar y entregar
Qwen3-Coder-480B (Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8),
un modelo de codificación de mezcla de expertos, en Google Kubernetes Engine (GKE). La implementación
usa aceleradores TPU7x (Ironwood) 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 tpu7x-standard-4t de varios hosts, cada uno organizado en una topología
2x2x2 (ocho chips TPU7x en dos nodos por grupo de nodos, para un total de 16
chips TPU7x). 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 TPU7x independientes con el paralelismo tensorial y el paralelismo de expertos habilitados.
- Enruta las solicitudes compatibles con OpenAI a través de un router de desagregación de SGLang.
Objetivos
- Configura tu clúster de GKE y los grupos de nodos TPU7x 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](https://cloud.google.com/products/calculator).
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
- Instala y, luego, inicializa Google Cloud CLI, y, luego, instala
kubectl. Si usas Cloud Shell, ambas herramientas están preinstaladas.
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.
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 2,800 GiB de cuota disponible de Google Cloud Hyperdisk Balanced en los cuatro volúmenes efímeros de 700 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.
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 TPU7x, comous-central1-c.YOUR_RESERVATION_NAME: Si usas una reserva, el nombre de tu reserva de TPU7x.YOUR_HF_TOKEN: Es tu token de acceso de Hugging Face.YOUR_SGLANG_TPU_IMAGE: Si usas una imagen de contenedor de TorchTPU de SGLang personalizada, el URI de tu imagen; de lo contrario, la imagen de TorchTPU de SGLang predeterminada.
Crea el clúster de GKE
Para crear un clúster de GKE en modo estándar y conectar dos grupos de nodos TPU7x de varios hosts para la desagregación de decodificación y relleno previo, 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 una política de ubicación de cargas de trabajo de alta capacidad de procesamiento con una topología de acelerador
2x2x2, que es necesaria para los grupos de nodos TPU7x de varios hosts:Crea dos grupos de nodos TPU7x de varios hosts (
tpu7x-pool-0ytpu7x-pool-1), cada uno con dos nodostpu7x-standard-4t(ocho chips TPU7x en una topología2x2x2por grupo de nodos, para un total de 16 chips TPU7x):En lugar de usar una reserva específica, también puedes crear los grupos de nodos con capacidad Spot o VMs de inicio flexible pasando las siguientes marcas:
- VMs Spot: Reemplaza
--reservation-affinity=specificy--reservation=${RESERVATION}por--spotpara usar la capacidad de 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: Reemplaza
--num-nodes=2,--reservation-affinity=specificy--reservation=${RESERVATION}por--flex-start,--enable-autoscaling,--num-nodes=0,--min-nodes=0y--max-nodes=2para aprovisionar el grupo de nodos con la opción de consumo de 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.
- VMs Spot: Reemplaza
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-480b-multihost-disagg-v7x.yaml) define los
siguientes recursos para coordinar la entrega de precompletado y decodificación desagregados
en los dos grupos de nodos TPU7x de 2x2x2:
- StorageClass (
hyperdisk-balanced-tpu): Aprovisiona volúmenes efímeros de 700 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 el punto de control deQwen/Qwen3-Coder-480B-A35B-Instruct-FP8descargado de forma local. - Grupo de relleno previo (
sglang-prefill-serviceysglang-tpu-prefill): Ejecuta un LeaderWorkerSet desize: 2(un Pod líder y un Pod trabajador) fijado exclusivamente a un grupo de nodos TPU7x2x2x2(ocho chips TPU, que proporcionan 16 TensorCores). LeaderWorkerSet usa la anotaciónleaderworkerset.sigs.k8s.io/exclusive-topologyestablecida en"cloud.google.com/gke-nodepool". Los Pods iniciansglang.launch_servercon las marcas--disaggregation-mode=prefill,--tensor-parallel-size=16y--ep-size=16, lo que expone el puerto HTTP8000y el puerto de arranque8998. - Grupo de decodificación (
sglang-decode-serviceysglang-tpu-decode): Ejecuta un LeaderWorkerSet desize: 2fijado al segundo grupo de nodos TPU7x2x2x2(ocho chips TPU, que proporcionan 16 TensorCores). LeaderWorkerSet iniciasglang.launch_servercon las marcas--disaggregation-mode=decode,--tensor-parallel-size=16y--ep-size=16. - Router de desagregación (
sglang-routerysglang-service): Ejecuta un Deployment de CPU que ejecuta el módulosglang_router.launch_routercon la marca--pd-disaggregationy expone un Service ClusterIP en el puerto8000. El router dirige las instrucciones 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-480b-multihost-disagg-v7x.yamlcon el siguiente contenido:Aplica el manifiesto de la carga de trabajo a tu 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 prefill y decode hasta que se complete el inicio:
La descarga inicial del modelo, la carga de pesos y la compilación tardan aproximadamente entre 15 y 30 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 de líder de decodificación y de precompletado 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 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:
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 TPU7x, la política de posición de las cargas de trabajo y el clúster de GKE:
¿Qué sigue?
- Obtén más información sobre SGLang.
- Obtén más información sobre TPU7x (Ironwood).
- Más información sobre Cloud TPU.