Neste tutorial, mostramos como implantar e disponibilizar o
Llama 3.1 405B (nvidia/Llama-3.1-405B-Instruct-FP8),
um modelo ajustado por instruções de 405 bilhões de parâmetros quantizado para FP8, no
Google Kubernetes Engine (GKE) no Google Cloud. A implantação usa o
Cluster Toolkit, duas instâncias de máquina virtual (VM)
A4 (a4-highgpu-8g)
com um total de 16 GPUs NVIDIA B200,
NVIDIA Dynamo e o
framework de exibição SGLang com
desagregação de preenchimento e decodificação (DP) de host único.
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 dois nós a4-highgpu-8g conectados
pela rede de acesso direto à memória remota (RDMA) do GPUDirect. Em seguida, instale
o KAI Scheduler e a plataforma NVIDIA Dynamo com o agendamento de gangues do Grove.
Por fim, implante um recurso personalizado DynamoGraphDeployment que separa
a pré-preenchimento e a decodificação em dois workers de oito GPUs de host único com paralelismo
de tensor e um cache de KV FP8.
Objetivos
- Instale o Cluster Toolkit e provisione um cluster do GKE A4 de dois nós no modo Standard.
- Instale o programador KAI e a plataforma NVIDIA Dynamo com a programação de gangues do Grove no cluster.
- Implante um servidor de inferência SGLang desagregado por DP com um worker de pré-preenchimento A4 de host único e um worker de decodificação A4 de host único.
- 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 A4.YOUR_BUCKET_NAME: um nome globalmente exclusivo para o bucket do Cloud Storage que armazena o estado do Terraform para o Cluster Toolkit.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 dois 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, crie um bucket do Cloud Storage com o controle de versões de objeto ativado:
Crie o arquivo de configuração de implantação
cluster-toolkit/examples/gke-a4/gke-a4-deployment.yamlpara dois 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:
Implantar o servidor SGLang desagregado de host único
O manifesto da carga de trabalho (llama3.1-405b-singlehost-a4.yaml) define um ResourceClaimTemplate do Kubernetes (all-mrdma), que aloca os dispositivos RDMA de várias NICs do nó (mrdma.google.com) por meio de DRA, e um DynamoGraphDeployment do NVIDIA Dynamo (llama3-405b-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 worker de host único em um nóa4-highgpu-8gcom oito GPUs NVIDIA B200. Na inicialização, o pod usa o ambiente NCCL/gIB, faz o download do checkpointnvidia/Llama-3.1-405B-Instruct-FP8do Hugging Face Hub para o SSD NVMe local do nó e iniciapython3 -m dynamo.sglangem--disaggregation-mode prefillcom as seguintes flags:--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
- Worker de decodificação (
Decode): executa um worker de host único no segundo nóa4-highgpu-8gcom oito GPUs NVIDIA B200. Na inicialização, o pod armazena em cache os pesos do modelo no SSD NVMe local do nó e iniciapython3 -m dynamo.sglangem--disaggregation-mode decodecom as seguintes flags:--tensor-parallel-size 8--kv-cache-dtype fp8_e4m3--context-length 16384--mem-fraction-static 0.85
Implante e monitore o servidor de inferência desagregado:
Faça o download do manifesto de carga de trabalho
llama3.1-405b-singlehost-a4.yaml:Como alternativa, crie um arquivo chamado
llama3.1-405b-singlehost-a4.yamlcom o seguinte conteúdo:Aplique o manifesto da carga de trabalho ao cluster:
Para monitorar o download de pesos e a inicialização do servidor, liste os pods no cluster e transmita os registros dos pods de preenchimento prévio e decodificação:
Substitua
YOUR_POD_NAMEpelo nome do pod de pré-preenchimento ou de decodificação da saídakubectl get pods.Na primeira execução, leva de 10 a 20 minutos para baixar os pesos do modelo 405B FP8 e inicializar os servidores SGLang. Antes de enviar solicitações, aguarde até que os pods de front-end, preenchimento prévio e decodificação mostrem
1/1na colunaREADYdekubectl 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
Enviar solicitações de inferência
Envie uma solicitação de preenchimento de chat para o serviço Llama 3.1 405B implantado:
Encaminhe a porta local
8000para o serviçollama3-405b-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 Llama 3.1 405B implantado no pod de front-end do Dynamo usando sglang.bench_serving. Configure o comparativo de mercado para 1.024 tokens de entrada,
1.024 tokens de saída (1k/1k), 2.048 comandos e uma simultaneidade máxima de 512:
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:Para excluir o bucket do Cloud Storage que armazena o estado do Terraform, use o comando
gcloud storage rm: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.