En este instructivo, se muestra cómo implementar y entregar
Llama 3.1 405B (nvidia/Llama-3.1-405B-Instruct-FP8),
un modelo ajustado por instrucciones de 405,000 millones de parámetros cuantificado a FP8, en
Google Kubernetes Engine (GKE) en Google Cloud. La implementación usa
Cluster Toolkit, dos
instancias de máquina virtual (VM) A4 (a4-highgpu-8g)
con un total de 16 GPUs NVIDIA B200,
NVIDIA Dynamo y el
framework de entrega de SGLang con
desagregación de precompletado y decodificación (PD) de un solo host.
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 dos nodos a4-highgpu-8g conectados
a través de las herramientas de redes de acceso remoto directo a memoria (RDMA) de GPUDirect. Luego, instala
el programador de KAI y la plataforma NVIDIA Dynamo con la programación de Grove gang.
Por último, implementas un recurso personalizado de DynamoGraphDeployment que separa
el prellenado y la decodificación en dos trabajadores de ocho GPU de host único con paralelismo
de tensores y una caché de KV de FP8.
Objetivos
- Instalar Cluster Toolkit y aprovisionar un clúster de GKE A4 de dos nodos en modo estándar
- Instala el programador de KAI y la plataforma NVIDIA Dynamo con la programación de Grove gang en tu clúster.
- Implementa un servidor de inferencia de SGLang desagregado de PD con un trabajador de precompletado de A4 de host único y un trabajador de decodificación de A4 de host único.
- 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.YOUR_BUCKET_NAME: un nombre único a nivel global para el bucket de Cloud Storage que almacena el estado de Terraform para Cluster Toolkit.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 dos 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, crea un bucket de Cloud Storage con el control de versiones de objetos habilitado:
Crea el archivo de configuración de implementación
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yamlpara dos 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:
Implementa el servidor de SGLang desagregado de host único
El manifiesto de la carga de trabajo (llama3.1-405b-singlehost-a4.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, y un DynamoGraphDeployment
de NVIDIA Dynamo (llama3-405b-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 trabajador de host único en un nodoa4-highgpu-8gcon ocho GPUs NVIDIA B200. Cuando se inicia, el Pod obtiene el entorno de NCCL/gIB, descarga el punto de controlnvidia/Llama-3.1-405B-Instruct-FP8de Hugging Face Hub en la SSD de NVMe local del nodo y, luego, iniciapython3 -m dynamo.sglangen--disaggregation-mode prefillcon las siguientes marcas:--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
- Trabajador de decodificación (
Decode): Ejecuta un trabajador de un solo host en el segundo nodoa4-highgpu-8gcon ocho GPU NVIDIA B200. Durante el inicio, el Pod almacena en caché los pesos del modelo en la SSD de NVMe local del nodo y, luego, iniciapython3 -m dynamo.sglangen--disaggregation-mode decodecon las siguientes marcas:--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
Implementa y supervisa el servidor de inferencia desagregado:
Descarga el manifiesto de la carga de trabajo de
llama3.1-405b-singlehost-a4.yaml:Como alternativa, crea un archivo llamado
llama3.1-405b-singlehost-a4.yamlcon el siguiente contenido:Aplica el manifiesto de la carga de trabajo a tu clúster:
Para supervisar la descarga de pesos y la inicialización del servidor, enumera los Pods en tu clúster y transmite los registros de los Pods de precompletado y decodificación:
Reemplaza
YOUR_POD_NAMEpor el nombre del Pod de precompletado o el Pod de decodificación del resultado dekubectl get pods.En la primera ejecución, se tarda aproximadamente entre 10 y 20 minutos en descargar los pesos del modelo FP8 de 405B y, luego, inicializar los servidores de SGLang. Antes de enviar cualquier solicitud, espera hasta que los Pods de frontend, prefill y decode muestren
1/1en la columnaREADYdekubectl get pods:NAME READY STATUS RESTARTS AGE llama3-405b-a4-disagg-0-decode-tgl7q 1/1 Running 0 15m llama3-405b-a4-disagg-0-frontend-wrxq5 1/1 Running 0 15m llama3-405b-a4-disagg-0-prefill-67h5s 1/1 Running 0 15m
Envía solicitudes de inferencia
Envía una solicitud de finalización de chat al servicio de Llama 3.1 405B implementado:
Redirecciona el puerto local
8000al serviciollama3-405b-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 de Llama 3.1 405B implementado desde el Pod de frontend de Dynamo con
sglang.bench_serving. Configura la comparativa para 1,024 tokens de entrada,
1,024 tokens de salida (1k/1k), 2,048 instrucciones y una simultaneidad máxima de 512:
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:
En el directorio
cluster-toolkit, destruye el clúster de GKE y su infraestructura asociada con el comandogcluster destroy:Para borrar el bucket de Cloud Storage que almacena el estado de Terraform, usa el comando
gcloud storage rm: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.