En este instructivo, se muestra cómo implementar y entregar
Qwen3.8-2.4T (nvidia/Qwen3.8-2.4T-A95B-NVFP4),
un modelo de mezcla de expertos de 2.4 billones de parámetros con 95,000 millones de
parámetros activos cuantificados a NVFP4, en Google Kubernetes Engine (GKE) en
Google Cloud. La implementación usa Cluster Toolkit, cuatro instancias de máquina virtual (VM)
A4 (a4-highgpu-8g)
multihost con un total de 32 GPUs NVIDIA B200,
NVIDIA Dynamo y el
framework de entrega de SGLang con
desagregación de precompletado y decodificación (PD).
En la configuración de implementación que se describe en este instructivo, usarás
Cluster Toolkit para aprovisionar un clúster de GKE en
modo estándar. El clúster contiene cuatro nodos a4-highgpu-8g
conectados a través de la red de acceso remoto directo a memoria (RDMA) de GPUDirect. Luego,
instalas el programador de KAI y la plataforma NVIDIA Dynamo con la programación de Grove,
y almacenas los pesos del modelo en Cloud Storage. A continuación, implementarás un
recurso personalizado DynamoGraphDeployment que activa el bucket con
Cloud Storage FUSE y separa el llenado previo y la decodificación en dos grupos de trabajadores de varios hosts
de 16 GPU con paralelismo de tensores, paralelismo de expertos y una caché de KV
de FP8.
Objetivos
- Instala Cluster Toolkit y aprovisiona un clúster de GKE de A4 con varios hosts en el modo estándar.
- Instala el programador de KAI y la plataforma NVIDIA Dynamo con la programación de Grove gang en tu clúster.
- Almacena los pesos del modelo Qwen3.8-2.4T en un bucket de Cloud Storage.
- Implementar un servidor de inferencia de SGLang desagregado de PD de varios hosts en cuatro nodos A4, con un total de 32 GPUs NVIDIA B200
- Envía una solicitud de finalización de chat al router de frontend de Dynamo.
- Ejecuta una carga de trabajo de comparativas de entrega.
- Limpia los recursos implementados.
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.
Antes de comenzar
Configura tu entorno para el instructivo:
- Instala e inicializa Google Cloud CLI, e instala
kubectly Helm (versión 3.10 o posterior). Si usas Cloud Shell, estas herramientas están preinstaladas. - Si ejecutas este instructivo desde una estación de trabajo de Linux o macOS en lugar de Cloud Shell, instala las dependencias de Cluster Toolkit necesarias, como Terraform y Git.
Habilita la API de Kubernetes Engine, la API de Compute Engine, la API de Cloud Storage, la API de Identity and Access Management, la API de Cloud Resource Manager y la API de Service Usage en tu proyecto de Google Cloud :
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) - Administrador de almacenamiento (
roles/storage.admin) - Administrador de IAM de proyecto (
roles/resourcemanager.projectIamAdmin) - Administrador de cuenta de servicio (
roles/iam.serviceAccountAdmin) - Usuario de la cuenta de servicio (
roles/iam.serviceAccountUser) - Consumidor de Service Usage (
roles/serviceusage.serviceUsageConsumer)
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
Exporta las variables de entorno que usarás en este instructivo:
Reemplaza lo siguiente:
YOUR_PROJECT_ID: Es el ID de tu proyecto de Google Cloud.YOUR_REGION: Es la región en la que se encuentra tu capacidad de A4 y en la que deseas implementar tu clúster, comous-central1.YOUR_ZONE: Es la zona en la que se encuentra tu capacidad de A4, comous-central1-b.YOUR_CLUSTER_NAME: Es el nombre de tu clúster de GKE y de la implementación de Cluster Toolkit. Usa un nombre de 20 caracteres o menos para que el ID de cuenta de servicio del grupo de nodos generado (YOUR_CLUSTER_NAME-gke-np-sa) se mantenga dentro del límite de 30 caracteres de Identity and Access Management (IAM).YOUR_RESERVATION_NAME: Es el nombre de tu reserva de A4 o la ruta de acceso del bloque de reserva extendido en el formatoRESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME.YOUR_BUCKET_NAME: un nombre único a nivel global para el bucket de Cloud Storage que almacena el estado de Terraform para Cluster Toolkit y los pesos del modelo Qwen3.8-2.4T en etapa de pruebas.YOUR_HF_TOKEN: Es tu token de acceso de Hugging Face.
Crea el clúster de GKE
Descarga Cluster Toolkit y aprovisiona un clúster de GKE en
modo estándar con cuatro nodos a4-highgpu-8g, redes de RDMA de GPUDirect
y compatibilidad con DRA:
Accede a Google Cloud CLI y genera credenciales predeterminadas de la aplicación para Terraform:
Descarga y extrae el paquete de Cluster Toolkit compilado previamente para la versión especificada en
CLUSTER_TOOLKIT_VERSION(v1.104.0):Si ejecutas este comando en macOS o en una estación de trabajo
arm64, configuraOS="mac"oARCH="arm64"para que coincida con tu plataforma.Para almacenar el estado de Terraform de tu implementación de Cluster Toolkit y los pesos del modelo en etapa de pruebas, crea un bucket de Cloud Storage en la misma región que tu reserva de A4 con acceso uniforme a nivel de bucket y control de versiones de objetos habilitado:
Crea el archivo de configuración de implementación
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yamlpara cuatro nodosa4-highgpu-8g:De forma predeterminada, el archivo de implementación está configurado para consumir una reserva específica. Si no tienes una reserva específica, antes de implementar el clúster, puedes actualizar
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yamlpara usar una opción de consumo alternativa, como VMs Spot o VMs de inicio flexible. Para obtener instrucciones de configuración, consulta Opciones de consumo de GKE.Cambia al directorio
cluster-toolkit, implementa el clúster de GKE con el comandogcluster deployy, luego, regresa a tu directorio de trabajo:La creación de clústeres tarda entre 20 y 30 minutos aproximadamente. Si ejecutas
./gcluster deploysin la marca--auto-approve, para aplicar los cambios propuestos, ingresaacuando se te solicite.Configura las credenciales de
kubectlpara comunicarte con tu clúster:
Instala KAI Scheduler y NVIDIA Dynamo
Prepara tu clúster creando un Secret de Hugging Face y, luego, instalando el programador de KAI y la plataforma NVIDIA Dynamo con la programación de Grove Gang:
Crea un Secret de Kubernetes llamado
hf-secretpara almacenar tu token de acceso de Hugging Face:Descarga el gráfico de Helm de la plataforma NVIDIA Dynamo (
v1.5.0), instala el programador de KAI y, luego, instala la plataforma Dynamo con Grove habilitado:
Almacena las ponderaciones del modelo en Cloud Storage
Almacena en etapa intermedia el punto de control nvidia/Qwen3.8-2.4T-A95B-NVFP4 en tu bucket de Cloud Storage
en la región (gs://${GCS_BUCKET}) para que los Pods de trabajadores de inferencia
puedan activar las ponderaciones con Cloud Storage FUSE en lugar de
descargarlas de Hugging Face en cada inicio en frío:
Otorga el rol de usuario de objetos de almacenamiento (
roles/storage.objectUser) en el bucket degs://${GCS_BUCKET}que creaste en Crea el clúster de GKE a la cuenta de servicio de Google vinculada a la cuenta de servicio de Kubernetesworkload-identity-k8s-sa:Descarga los manifiestos
qwen3.8-2.4t-nvfp4-stage-weights-job.yamlyqwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yaml:Como alternativa, crea un archivo llamado
qwen3.8-2.4t-nvfp4-stage-weights-job.yamlcon el siguiente contenido. Este Job indexado ejecuta cuatro Pods paralelos en tus cuatro nodos A4. Cada Pod descarga una porción de tamaño equilibrado del punto de control denvidia/Qwen3.8-2.4T-A95B-NVFP4en la SSD de NVMe local del nodo y la sube ags://${GCS_BUCKET}/hf_models/models--nvidia--qwen3_8-2_4t-a95b-nvfp4congcloud storage rsync:Sustituye el nombre de tu bucket de Cloud Storage en
qwen3.8-2.4t-nvfp4-stage-weights-job.yaml, inicia el trabajo de etapa de pruebas, espera a que los cuatro Pods terminen de subir los pesos y, luego, borra el trabajo completado:Descargar las ponderaciones del modelo en la SSD de NVMe local y subirlas a Cloud Storage tarda aproximadamente 25 minutos.
Opcional: Mientras se ejecuta el trabajo de etapa de pruebas, transmite los registros de un Pod de etapa de pruebas en una segunda sesión de terminal para supervisar el progreso de la descarga:
Reemplaza
YOUR_POD_NAMEpor el nombre de uno de los Pods deqwen3-8-2-4t-stage-weightsdekubectl get pods.
Implementa el servidor de SGLang desagregado de varios hosts
El manifiesto de la carga de trabajo (qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yaml) define un
ResourceClaimTemplate de Kubernetes (all-mrdma), que asigna los dispositivos RDMA
multi-NIC del nodo (mrdma.google.com) a través de DRA, recursos de Role y RoleBinding
para la cuenta de servicio workload-identity-k8s-sa y un DynamoGraphDeployment
de NVIDIA Dynamo (qwen3-8-2-4t-a4-disagg) con la programación de grupos de Grove
habilitada. La implementación consiste en lo siguiente:
Frontend (
Frontend): Ejecuta una réplica de router que acepta solicitudes de clientes, descubre trabajadores de precompletado y decodificación registrados, y coordina el enrutamiento de solicitudes desagregadas.Trabajador de precompletado (
Prefill): Ejecuta un grupo de trabajadores de dos nodos en dos nodosa4-highgpu-8gcon un total de 16 GPU NVIDIA B200. Cada Pod activa los pesos denvidia/Qwen3.8-2.4T-A95B-NVFP4de etapa de pruebas desde tu bucket de Cloud Storage en/model-weightscon el controlador de CSI de Cloud Storage FUSE (gcsfuse.csi.storage.gke.io) con el almacenamiento en caché de archivos de SSD de NVMe local, obtiene el entorno de NCCL/gIB y, luego, iniciapython3 -m dynamo.sglangen--disaggregation-mode prefillcon las siguientes marcas:--served-model-name "nvidia/Qwen3.8-2.4T-A95B-NVFP4"--tensor-parallel-size 16--ep-size 16--nnodes 2--moe-runner-backend flashinfer_trtllm--attention-backend triton--kv-cache-dtype fp8_e4m3--disable-flashinfer-autotune
Trabajador de decodificación (
Decode): Ejecuta un grupo de trabajadores de dos nodos en los dos nodosa4-highgpu-8grestantes, con un total de 16 GPUs NVIDIA B200. Cada Pod activa los pesos del modelo de etapa de pruebas desde Cloud Storage en/model-weightsa través del controlador de CSI de Cloud Storage FUSE y iniciapython3 -m dynamo.sglangen--disaggregation-mode decodecon las siguientes marcas:--served-model-name "nvidia/Qwen3.8-2.4T-A95B-NVFP4"--tensor-parallel-size 16--ep-size 16--nnodes 2--moe-runner-backend flashinfer_trtllm--attention-backend triton--kv-cache-dtype fp8_e4m3
Implementa y supervisa el servidor de inferencia desagregado:
Revisa el manifiesto de la carga de trabajo
qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yamlque descargaste antes o crea un archivo llamadoqwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yamlcon el siguiente contenido:Sustituye el nombre de tu bucket de Cloud Storage en
qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yamly aplica el manifiesto de la carga de trabajo a tu clúster:Para supervisar la carga de pesos y la inicialización del servidor, enumera los Pods en tu clúster y transmite los registros del Pod líder de precompletado y del Pod líder de decodificación:
Reemplaza
YOUR_POD_NAMEpor el nombre del Pod líder de precompletado o el Pod líder de decodificación del resultado dekubectl get pods.En un inicio en frío, se necesitan aproximadamente entre 4 y 5 minutos para transmitir los 2,400,000,000,000 de pesos del modelo NVFP4 (~1.44 TB en 200 fragmentos) desde Cloud Storage a través de Cloud Storage FUSE y, luego, inicializar los servidores de SGLang de varios hosts. Antes de enviar cualquier solicitud, espera hasta que los Pods de frontend muestren
1/1y los Pods de precompletado y decodificación muestren2/2en la columnaREADYdekubectl get pods:NAME READY STATUS RESTARTS AGE qwen3-8-2-4t-a4-disagg-0-decode-0-decode-ldr-wz92h 2/2 Running 0 5m qwen3-8-2-4t-a4-disagg-0-decode-0-decode-wkr-fb8g6 2/2 Running 0 5m qwen3-8-2-4t-a4-disagg-0-frontend-jrx4s 1/1 Running 0 5m qwen3-8-2-4t-a4-disagg-0-prefill-0-prefill-ldr-7nz25 2/2 Running 0 5m qwen3-8-2-4t-a4-disagg-0-prefill-0-prefill-wkr-7d5cw 2/2 Running 0 5m
Envía solicitudes de inferencia
Envía una solicitud de finalización de chat al servicio Qwen3.8-2.4T implementado:
Redirecciona el puerto local
8000al servicioqwen3-8-2-4t-a4-disagg-frontend:Deja la redirección de puertos en ejecución en esta sesión de terminal o ejecuta el comando en segundo plano.
En una segunda sesión de terminal, envía una solicitud de finalización de chat al extremo
/v1/chat/completions:
Ejecuta una carga de trabajo de comparativas
Compara el servidor Qwen3.8-2.4T implementado desde el Pod de frontend de Dynamo con
sglang.bench_serving con una configuración de 1,024 tokens de entrada, 1,024 tokens de salida (1k/1k), 256 instrucciones y una simultaneidad máxima de 128:
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 usaste en este instructivo, borra las cargas de trabajo de Kubernetes, el clúster de GKE y el bucket de Cloud Storage:
Borra los recursos DynamoGraphDeployment y ResourceClaimTemplate:
Desinstala las versiones de Helm de la plataforma NVIDIA Dynamo y KAI Scheduler:
Borra el Secret de Kubernetes de Hugging Face:
Desde el directorio
cluster-toolkit, destruye el clúster de GKE y su infraestructura asociada con el comandogcluster destroy:Borra el bucket de Cloud Storage que almacena los pesos del modelo en etapa de pruebas y el estado de Terraform:
gcloud storage rm --recursive "gs://${GCS_BUCKET}"
¿Qué sigue?
- Obtén más información sobre NVIDIA Dynamo.
- Obtén más información sobre SGLang.
- Obtén más información sobre las VMs A4 con GPUs NVIDIA B200.
- Obtén más información sobre Cluster Toolkit.
- Obtén más información para administrar clústeres de GKE optimizados para IA.