Neste tutorial, mostramos como implantar e disponibilizar o
Qwen3.8-2.4T (nvidia/Qwen3.8-2.4T-A95B-NVFP4),
um modelo de Mix de Especialistas de 2,4 trilhões de parâmetros com 95 bilhões de
parâmetros ativos quantizados para NVFP4, no Google Kubernetes Engine (GKE) em
Google Cloud. A implantação usa o Cluster Toolkit, quatro instâncias de máquina virtual (VM)
A4 (a4-highgpu-8g)
com vários hosts e um total de 32 GPUs NVIDIA B200,
NVIDIA Dynamo e o
framework de exibição SGLang com
desagregação de pré-preenchimento e decodificação (DP).
Na configuração de implantação descrita neste tutorial, use o
Cluster Toolkit para provisionar um cluster do GKE no
modo Standard. O cluster contém quatro nós a4-highgpu-8g
conectados pela rede de acesso direto à memória remota (RDMA, na sigla em inglês) do GPUDirect. Em seguida,
instale o programador KAI e a plataforma NVIDIA Dynamo com a programação de gangues do Grove
e prepare os pesos do modelo no Cloud Storage. Em seguida, implante um recurso personalizado DynamoGraphDeployment que monta o bucket com o Cloud Storage FUSE e separa o preenchimento prévio e a decodificação em dois pools de workers de vários hosts de 16 GPUs com paralelismo de tensor, paralelismo de especialista e um cache KV FP8.
Objetivos
- Instale o Cluster Toolkit e provisione um cluster do GKE A4 de vários hosts no modo padrão.
- Instale o programador KAI e a plataforma NVIDIA Dynamo com a programação de gangues do Grove no cluster.
- Armazene os pesos do modelo Qwen3.8-2.4T em um bucket do Cloud Storage.
- Implantar um servidor de inferência SGLang com vários hosts e DP desagregado em quatro nós A4, com um total de 32 GPUs NVIDIA B200.
- Envie uma solicitação de conclusão de chat para o roteador de front-end do Dynamo.
- Executar uma carga de trabalho de comparativo de mercado de exibição.
- Limpe os recursos implantados.
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
Configure o ambiente para o tutorial:
- Instale e inicialize a
Google Cloud CLI e instale
kubectle Helm (versão 3.10 ou mais recente). Se você usa o Cloud Shell, essas ferramentas já estão pré-instaladas. - Se você estiver executando este tutorial em uma estação de trabalho Linux ou macOS em vez do Cloud Shell, instale as dependências necessárias do Cluster Toolkit, como o Terraform e o Git.
Ative as API Kubernetes Engine, Compute Engine, Cloud Storage, Identity and Access Management, Cloud Resource Manager e Service Usage no projeto do Google Cloud :
Receber um token de acesso do Hugging Face
Você precisa de um token de acesso do Hugging Face para usar este tutorial. Você pode se inscrever para uma conta sem custo financeiro no Hugging Face. Depois de criar uma conta, gere um token de acesso:
- Na página Welcome to Hugging Face, clique no avatar da sua conta e selecione Tokens de acesso.
- Na página Tokens de acesso, clique em Criar novo token.
- Selecione o tipo de token Read e insira um nome para ele.
- Seu token de acesso será exibido. Salve o token em um local seguro.
Funções exigidas
Para conseguir as permissões necessárias para concluir o tutorial, peça ao administrador para conceder a você os seguintes papéis do IAM no seu projeto:
- Administrador do Kubernetes Engine (
roles/container.admin) - Administrador do Compute (
roles/compute.admin) - Administrador de armazenamento (
roles/storage.admin) - Administrador de projetos do IAM (
roles/resourcemanager.projectIamAdmin) - Administrador da conta de serviço (
roles/iam.serviceAccountAdmin) - Usuário da conta de serviço (
roles/iam.serviceAccountUser) - Consumidor do Service Usage (
roles/serviceusage.serviceUsageConsumer)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.
Configurar as variáveis de ambiente
Exporte as variáveis de ambiente que você vai usar neste tutorial:
Substitua:
YOUR_PROJECT_ID: ID do seu projeto do Google Cloud.YOUR_REGION: a região em que a capacidade do A4 está localizada e em que você quer implantar o cluster, comous-central1.YOUR_ZONE: a zona em que sua capacidade de A4 está localizada, comous-central1-b.YOUR_CLUSTER_NAME: o nome do cluster do GKE e da implantação do Cluster Toolkit. Use um nome com até 20 caracteres para que o ID da conta de serviço do pool de nós gerado (YOUR_CLUSTER_NAME-gke-np-sa) permaneça dentro do limite de 30 caracteres do Identity and Access Management (IAM).YOUR_RESERVATION_NAME: o nome da sua reserva de A4 ou o caminho do bloco de reserva estendido no formatoRESERVATION_NAME/reservationBlocks/RESERVATION_BLOCK_NAME.YOUR_BUCKET_NAME: um nome globalmente exclusivo para o bucket do Cloud Storage que armazena o estado do Terraform para o Cluster Toolkit e os pesos do modelo Qwen3.8-2.4T em etapas.YOUR_HF_TOKEN: seu token de acesso do Hugging Face.
Criar o cluster do GKE
Faça o download do Cluster Toolkit e provisione um cluster do GKE no
modo Standard com quatro nós a4-highgpu-8g, rede GPUDirect RDMA
e suporte a DRA:
Faça login na Google Cloud CLI e gere o Application Default Credentials para o Terraform:
Faça o download e extraia o pacote pré-criado do Cluster Toolkit para a versão especificada em
CLUSTER_TOOLKIT_VERSION(v1.104.0):Se você executar esse comando no macOS ou em uma estação de trabalho
arm64, definaOS="mac"ouARCH="arm64"para corresponder à sua plataforma.Para armazenar o estado do Terraform para a implantação do Cluster Toolkit e os pesos do modelo em etapas, crie um bucket do Cloud Storage na mesma região da reserva A4 com acesso uniforme no nível do bucket e controle de versões de objetos ativado:
Crie o arquivo de configuração de implantação
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yamlpara quatro nósa4-highgpu-8g:Por padrão, o arquivo de implantação é configurado para consumir uma reserva específica. Se você não tiver uma reserva específica, antes de implantar o cluster, atualize
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yamlpara usar uma opção de consumo alternativa, como VMs spot ou VMs flex-start. Para instruções de configuração, consulte Opções de consumo do GKE.Mude para o diretório
cluster-toolkit, implante o cluster do GKE usando o comandogcluster deploye volte para o diretório de trabalho:A criação do cluster leva aproximadamente de 20 a 30 minutos. Se você executar
./gcluster deploysem a flag--auto-approve, para aplicar as mudanças propostas, insiraaquando solicitado.Configure as credenciais de
kubectlpara se comunicar com o cluster:
Instalar o KAI Scheduler e o NVIDIA Dynamo
Prepare o cluster criando um Secret do Hugging Face e instalando o programador do KAI e a plataforma NVIDIA Dynamo com a programação de gangues do Grove:
Crie um Secret do Kubernetes chamado
hf-secretpara armazenar o token de acesso do Hugging Face:Faça o download do gráfico do Helm da plataforma NVIDIA Dynamo (
v1.5.0), instale o programador KAI e instale a plataforma Dynamo com o Grove ativado:
Organizar os pesos do modelo no Cloud Storage
Prepare o checkpoint nvidia/Qwen3.8-2.4T-A95B-NVFP4 no bucket do Cloud Storage
na região (gs://${GCS_BUCKET}) para que os pods de worker de inferência
possam montar os pesos com o Cloud Storage FUSE em vez de
fazer o download deles do Hugging Face em cada inicialização a frio:
Conceda o papel de Usuário de objetos do Storage (
roles/storage.objectUser) no bucketgs://${GCS_BUCKET}que você criou em Criar o cluster do GKE à conta de serviço do Google vinculada à conta de serviço do Kubernetesworkload-identity-k8s-sa:Faça o download dos manifestos
qwen3.8-2.4t-nvfp4-stage-weights-job.yamleqwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yaml:Como alternativa, crie um arquivo chamado
qwen3.8-2.4t-nvfp4-stage-weights-job.yamlcom o conteúdo a seguir. Esse job indexado executa quatro pods paralelos nos quatro nós A4. Cada pod faz o download de uma fração de tamanho equilibrado do checkpointnvidia/Qwen3.8-2.4T-A95B-NVFP4para o SSD NVMe local do nó e o envia parags://${GCS_BUCKET}/hf_models/models--nvidia--qwen3_8-2_4t-a95b-nvfp4usandogcloud storage rsync:Substitua o nome do bucket do Cloud Storage em
qwen3.8-2.4t-nvfp4-stage-weights-job.yaml, inicie o job de preparo, aguarde todos os quatro pods terminarem de fazer upload dos pesos e exclua o job concluído:O download dos pesos do modelo para o SSD NVMe local e o upload deles para o Cloud Storage levam aproximadamente 25 minutos.
Opcional: enquanto o job de preparo estiver em execução, transmita os registros de um pod de preparo em uma segunda sessão de terminal para monitorar o progresso do download:
Substitua
YOUR_POD_NAMEpelo nome de um dos podsqwen3-8-2-4t-stage-weightsdekubectl get pods.
Implantar o servidor SGLang desagregado de vários hosts
O manifesto da carga de trabalho (qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yaml) define um
ResourceClaimTemplate do Kubernetes (all-mrdma), que aloca os dispositivos RDMA
com várias NICs do nó (mrdma.google.com) por meio de recursos de DRA, papel e RoleBinding
para a conta de serviço workload-identity-k8s-sa, e um
DynamoGraphDeployment da NVIDIA (qwen3-8-2-4t-a4-disagg) com a programação de gangues do Grove
ativada. A implantação consiste no seguinte:
Front-end (
Frontend): executa uma réplica de roteador que aceita solicitações de clientes, descobre workers de preenchimento prévio e decodificação registrados e coordena o roteamento de solicitações desagregadas.Worker de preenchimento prévio (
Prefill): executa um pool de workers de dois nós em dois nósa4-highgpu-8gcom um total de 16 GPUs NVIDIA B200. Cada pod monta os pesosnvidia/Qwen3.8-2.4T-A95B-NVFP4preparados do seu bucket do Cloud Storage em/model-weightsusando o driver CSI do Cloud Storage FUSE (gcsfuse.csi.storage.gke.io) com armazenamento em cache de arquivos SSD NVMe local, origina o ambiente NCCL/gIB e iniciapython3 -m dynamo.sglangem--disaggregation-mode prefillcom as seguintes flags:--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
Worker de decodificação (
Decode): executa um pool de workers de dois nós nos dois nósa4-highgpu-8grestantes, com um total de 16 GPUs NVIDIA B200. Cada pod monta os pesos do modelo em etapas do Cloud Storage em/model-weightspor meio do driver CSI do Cloud Storage FUSE e iniciapython3 -m dynamo.sglangem--disaggregation-mode decodecom as seguintes flags:--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
Implante e monitore o servidor de inferência desagregado:
Revise o manifesto de carga de trabalho
qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yamlque você salvou anteriormente ou crie um arquivo chamadoqwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yamlcom o seguinte conteúdo:Substitua o nome do bucket do Cloud Storage em
qwen3.8-2.4t-nvfp4-multihost-a4-gcsfuse.yamle aplique o manifesto da carga de trabalho ao cluster:Para monitorar o carregamento de pesos e a inicialização do servidor, liste os pods no cluster e transmita os registros do pod líder de preenchimento prévio e do pod líder de decodificação:
Substitua
YOUR_POD_NAMEpelo nome do pod líder de preenchimento prévio ou do pod líder de decodificação da saídakubectl get pods.Em uma inicialização a frio, leva aproximadamente de 4 a 5 minutos para transmitir os 2.400.000.000.000 de pesos do modelo NVFP4 (~1,44 TB em 200 fragmentos) do Cloud Storage pelo Cloud Storage FUSE e inicializar os servidores SGLang de vários hosts. Antes de enviar solicitações, aguarde até que os pods de front-end mostrem
1/1e os pods de preenchimento prévio e decodificação mostrem2/2na colunaREADYdekubectl 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
Enviar solicitações de inferência
Envie uma solicitação de conclusão de chat para o serviço Qwen3.8-2.4T implantado:
Encaminhe a porta local
8000para o serviçoqwen3-8-2-4t-a4-disagg-frontend:Deixe o encaminhamento de portas em execução nesta sessão do terminal ou execute o comando em segundo plano.
Em uma segunda sessão de terminal, envie uma solicitação de conclusão de chat para o endpoint
/v1/chat/completions:
Executar uma carga de trabalho de comparativo de mercado
Faça um comparativo do servidor Qwen3.8-2.4T implantado no pod de front-end do Dynamo usando
sglang.bench_serving com uma configuração de 1.024 tokens de entrada, 1.024 tokens de saída (1k/1k), 256 comandos e uma simultaneidade máxima de 128:
Depois que o comparativo de mercado for concluído, procure uma saída que contenha métricas como as seguintes:
Output token throughputTotal Token throughputTTFTTPOT
Limpar
Para evitar cobranças contínuas adicionais na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua as cargas de trabalho do Kubernetes, o cluster do GKE e o bucket do Cloud Storage:
Exclua os recursos DynamoGraphDeployment e ResourceClaimTemplate:
Desinstale as versões do Helm da plataforma NVIDIA Dynamo e do KAI Scheduler:
Exclua o Secret do Kubernetes do Hugging Face:
No diretório
cluster-toolkit, destrua o cluster do GKE e a infraestrutura associada usando o comandogcluster destroy:Exclua o bucket do Cloud Storage que armazena os pesos do modelo em etapas e o estado do Terraform:
gcloud storage rm --recursive "gs://${GCS_BUCKET}"
A seguir
- Saiba mais sobre o NVIDIA Dynamo.
- Saiba mais sobre o SGLang.
- Saiba mais sobre as VMs A4 com GPUs NVIDIA B200.
- Saiba mais sobre o Cluster Toolkit.
- Saiba mais sobre como gerenciar clusters do GKE otimizados para IA.