En este instructivo, se muestra cómo implementar y entregar el modelo de mezcla de expertos
Qwen3-30B-A3B (Qwen/Qwen3-30B-A3B-FP8)
en Google Kubernetes Engine (GKE) con un acelerador
TPU v6e (Trillium) de un solo host y el
framework de entrega de vLLM TPU
con TorchTPU (torchtpu). Ejecutarás la carga de trabajo en un solo
nodo ct6e-standard-4t, que contiene cuatro chips TPU v6e en una topología 2x2,
con el paralelismo de datos y el paralelismo de expertos habilitados.
Para ejecutar un flujo de trabajo de entrega de TorchTPU de vLLM de host único similar en aceleradores TPU7x (Ironwood) con el modelo Qwen3.5-397B más grande, consulta Entrega Qwen3.5-397B en GKE con TorchTPU de vLLM en aceleradores TPU7x.
Objetivos
- Configura tu clúster de GKE y el grupo de nodos TPU v6e de host único.
- Implementar el servidor de vLLM TorchTPU de host único en GKE.
- Envía una solicitud de inferencia al servidor de vLLM TorchTPU.
- 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:
Habilita la API de Kubernetes Engine en tu proyecto de Google Cloud :
Habilita la API de Artifact Registry en tu proyecto de Google Cloud :
Instala y, luego, inicializa Google Cloud CLI, y, luego, instala
kubectl. Si usas Cloud Shell, ambas herramientas están preinstaladas.Asegúrate de que tu proyecto tenga suficiente cuota de SSD y de direcciones IP externas 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.
Filtra por SSD de Persistent Disk (GB) y verifica que tengas al menos 500 GB de cuota disponible para el volumen de caché del modelo.
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.
Configura tus variables de entorno
Configura la autenticación:
Configura las variables de entorno:
Reemplaza lo siguiente:
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 tu grupo de nodos de TPU v6e, comous-central1-c.YOUR_CLUSTER_NAME: Es el nombre de tu clúster de GKE, comotpu-v6e-tutorial-cluster.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.YOUR_NETWORK_NAME: Es el nombre de tu red deGoogle Cloud . Si creaste una red personalizada, especifica esa red. De lo contrario, especificadefault.YOUR_SUBNETWORK_NAME: Es el nombre de tu subred deGoogle Cloud . Si creaste una subred personalizada, especifícala. De lo contrario, especificadefault.YOUR_VLLM_TPU_IMAGE: Es la imagen de TorchTPU de vLLM que se usará. Para las imágenes públicas, consulta el repositorio de vLLM TorchTPU.
Crea el clúster de GKE
Para crear un clúster de GKE en modo estándar y conectar un grupo de nodos TPU v6e de host único, completa los siguientes pasos:
Crea un clúster de GKE regional:
El tipo de máquina predeterminado para los clústeres de GKE (
e2-medium) no tiene suficiente capacidad de CPU para los controladores de cargas de trabajo, por lo que este comando especificae2-standard-4.El resultado es similar a lo siguiente:
NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS tpu-v6e-tutorial-cluster us-central1 1.35.7-gke.1027000 34.63.222.246 e2-standard-4 1.35.7-gke.1027000 3 RUNNINGCrea un grupo de nodos TPU v6e de host único con un nodo
ct6e-standard-4t(cuatro chips TPU v6e en una topología2x2) con tu reserva:En lugar de usar una reserva específica, también puedes crear el grupo de nodos con capacidad de Spot o VMs de inicio flexible pasando las siguientes marcas:
- VMs Spot: Reemplaza las marcas
--reservation-affinityy--reservationpor--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 pueden interrumpirse durante las ejecuciones de las cargas de trabajo. Si tus Pods tardan en crearse o las cargas de trabajo se detienen en medio de la ejecución, esta podría ser la causa. - VMs de inicio flexible: Para aprovisionar el grupo de nodos con la opción de consumo
Flex-start,
pasa la marca
--flex-start. Para obtener más información, consulta Ejecuta una carga de trabajo por lotes pequeña con TPU y VMs de inicio flexible.
El resultado es similar a lo siguiente:
NAME MACHINE_TYPE DISK_SIZE_GB NODE_VERSION np-0 ct6e-standard-4t 100 1.35.7-gke.1027000- VMs Spot: Reemplaza las marcas
Configura las credenciales de
kubectlpara comunicarte con tu clúster:
Configura las credenciales
Crea un Secret de Kubernetes llamado hf-secret para almacenar tu token de acceso de
Hugging Face:
Implementa el servidor de vLLM TorchTPU
El manifiesto de la carga de trabajo (qwen3_5_server.yaml) define los siguientes recursos:
Un StorageClass (
hyperdisk-balanced-qwen3) y un PersistentVolumeClaim de 500 GiB (hd-claim-qwen3) respaldados por el almacenamiento de Google Cloud Hyperdisk Balanced para almacenar los pesos del modelo descargado, la caché de compilación de XLA y la caché de compilación de PyTorch.Una Deployment (
vllm-qwen3) programada en un solo nodo de TPU v6e con una topología2x2(google.com/tpu: '4'). El contenedor ejecutavllm serveparaQwen/Qwen3-30B-A3B-FP8con las siguientes marcas:--data-parallel-size=4--tensor-parallel-size=1--enable-expert-parallel--kv-cache-dtype=fp8--max-model-len=9236--max-num-seqs=64
Un Service
ClusterIP(vllm-qwen3-service) que expone el puerto8000.
Para implementar y supervisar la carga de trabajo, completa los siguientes pasos:
Recupera el manifiesto del servidor:
Como alternativa, puedes crear un archivo llamado
qwen3_5_server.yamlcon el siguiente contenido:Aplica el manifiesto del servidor de vLLM TorchTPU a tu clúster:
Supervisa los registros de implementación del servidor hasta que se complete el inicio de la aplicación:
El inicio inicial del servicio puede tardar entre 15 y 30 minutos, mientras que el Pod descarga los pesos del modelo y lo compila.
Si usas capacidad interrumpible, como Spot o 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 se pueden interrumpir durante las ejecuciones de la carga de trabajo. Si tus Pods tardan más de lo esperado en iniciarse o tus cargas de trabajo se detienen en el medio, esta podría ser la causa. Para obtener más información, consulta Interrupción de VMs Spot. 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 informen
Application startup completeantes de enviar tráfico:(APIServer pid=1) INFO: Started server process [1] (APIServer pid=1) INFO: Waiting for application startup. (APIServer pid=1) INFO: Application startup complete.Abre una segunda sesión de terminal.
En la segunda sesión de terminal, reenvía el puerto local
8000avllm-qwen3-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:
Ejecuta una carga de trabajo de comparativas
Para comparar el modelo Qwen3-30B-A3B implementado con una carga de trabajo de entrada de 8,192 tokens y salida de 1,024 tokens (8k/1k) con el paquete de comparativas de InferenceX, completa los siguientes pasos:
Recupera el manifiesto de la comparativa:
Como alternativa, crea un archivo llamado
qwen3_5-benchmark-8k1k.yamlcon el siguiente contenido:Aplica el manifiesto del Pod de comparativas:
Supervisa los registros de la comparativa:
La comparativa tarda aproximadamente entre 25 y 30 minutos en completarse.
Una vez que se complete la comparativa, busca un resultado que contenga métricas como las siguientes:
Output token throughputTotal token throughputTTFTTPOT
Realiza una limpieza
Para evitar que se apliquen cargos adicionales continuos a tu cuenta de Google Cloud por los recursos que se usaron en este instructivo, borra las cargas de trabajo de Kubernetes, el grupo de nodo TPU y el clúster de GKE:
Borra el Deployment, el Service, la PersistentVolumeClaim y el Secret de Hugging Face del servidor de vLLM TorchTPU:
Borra el grupo de nodos TPU v6e y el clúster de GKE:
¿Qué sigue?
- Obtén más información sobre vLLM en Cloud TPU.
- Obtén más información sobre la TPU v6e (Trillium).
- Más información sobre Cloud TPU.