Neste tutorial, mostramos como implantar e disponibilizar o
Qwen3-Coder-480B (Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8),
um modelo de codificação de Mix de Especialistas, no Google Kubernetes Engine (GKE). A implantação
usa aceleradores TPU7x (Ironwood) de vários hosts e o
framework de disponibilização SGLang com
TorchTPU (torchtpu) e desagregação de pré-preenchimento e decodificação (DP).
Na configuração de implantação descrita neste tutorial, você provisiona
dois pools de nós tpu7x-standard-4t de vários hosts, cada um organizado em uma topologia 2x2x2 (oito chips TPU7x em dois nós por pool de nós, totalizando 16
chips TPU7x). Use a API LeaderWorkerSet do Kubernetes para fazer o seguinte:
- Execute servidores de pré-preenchimento e decodificação desagregados de vários hosts em frações de TPU7x separadas com paralelismo de tensor e paralelismo de especialista ativados.
- Encaminhe solicitações compatíveis com a OpenAI por um roteador de desagregação do SGLang.
Objetivos
- Configure o cluster do GKE e os pools de nós de TPU7x com vários hosts.
- Configurar credenciais e instalar o controlador LeaderWorkerSet.
- Implante as cargas de trabalho de pré-preenchimento, decodificação e roteador do SGLang de vários hosts.
- Envie uma solicitação de inferência ao serviço de roteador do SGLang.
- Executar uma carga de trabalho de comparativo de mercado de exibição.
- Fazer a limpeza.
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](https://cloud.google.com/products/calculator).
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Para mais informações, consulte Limpeza.
Antes de começar
- Instale e inicialize a
Google Cloud CLI e instale
kubectl. Se você usa o Cloud Shell, as duas ferramentas já estão pré-instaladas.
Você precisa de um token de acesso do Hugging Face para usar este tutorial. Você pode se inscrever em uma conta sem custo financeiro no Hugging Face. Depois de ter uma conta, gere um token de acesso:
- Na página Welcome to Hugging Face, clique no avatar da sua conta e selecione token 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.
- O token de acesso será exibido. Salve o token em um local seguro.
Ative as API Kubernetes Engine, API Compute Engine, Cloud TPU e Artifact Registry no projeto do Google Cloud :
Verifique se o projeto tem cota de disco e cota de endereço IP externo suficientes na região em que a capacidade da TPU está localizada:
No console do Google Cloud , acesse a página Cotas e limites do sistema.
Verifique se você tem pelo menos 2.800 GiB de cota disponível do Google Cloud Hyperdisk Balanced nos quatro volumes temporários de 700 GiB usados para armazenamento em cache de modelos pelos pods de preenchimento prévio e decodificação.
Filtre por Endereços IPv4 externos regionais em uso e verifique se você tem cota de endereço IP suficiente na região de destino.
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) - Usuário da conta de serviço (
roles/iam.serviceAccountUser)
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.
Verifique se a conta de serviço padrão do Compute Engine tem os seguintes papéis do Identity and Access Management (IAM) no projeto:
- Conta de serviço do nó padrão do Kubernetes Engine
(
roles/container.defaultNodeServiceAccount) - Leitor do Artifact Registry
(
roles/artifactregistry.reader)
Configurar as variáveis de ambiente
Exporte as variáveis de ambiente que você vai usar neste tutorial:
Substitua:
YOUR_CLUSTER_NAME: o nome do cluster do GKE.YOUR_PROJECT_ID: ID do seu projeto do Google Cloud.YOUR_REGION: a região em que você quer implantar o cluster, comous-central1.YOUR_ZONE: a zona em que você quer implantar os pools de nós da TPU7x, comous-central1-c.YOUR_RESERVATION_NAME: se você estiver usando uma reserva, o nome da sua reserva de TPU7x.YOUR_HF_TOKEN: seu token de acesso do Hugging Face.YOUR_SGLANG_TPU_IMAGE: se você estiver usando uma imagem de contêiner personalizada do SGLang TorchTPU, o URI da imagem. Caso contrário, a imagem padrão do SGLang TorchTPU.
Criar o cluster do GKE
Para criar um cluster do GKE no modo Standard e anexar dois pools de nós de TPU7x de vários hosts para desagregação de preenchimento prévio e decodificação, siga estas etapas:
Crie um cluster regional do GKE que use nós
e2-standard-4para o pool de nós padrão, que fornece recursos suficientes de CPU e memória para o controlador LeaderWorkerSet e o roteador de desagrupamento SGLang:Crie uma política de posicionamento de carga de trabalho de alta capacidade de processamento com uma topologia de acelerador
2x2x2, que é necessária para pools de nós de TPU7x de vários hosts:Crie dois pools de nós de TPU7x de vários hosts (
tpu7x-pool-0etpu7x-pool-1), cada um contendo dois nóstpu7x-standard-4t(oito chips de TPU7x em uma topologia2x2x2por pool de nós, totalizando 16 chips de TPU7x):Em vez de usar uma reserva específica, também é possível criar os pools de nós usando a capacidade spot ou as VMs flex-start transmitindo as seguintes flags:
- VMs spot: substitua
--reservation-affinity=specifice--reservation=${RESERVATION}por--spotpara usar a capacidade spot. As instâncias que usam a capacidade spot podem levar algum tempo para serem criadas após a criação do pool de nós e podem ser interrompidas durante as execuções da carga de trabalho. - VMs flex-start: substitua
--num-nodes=2,--reservation-affinity=specifice--reservation=${RESERVATION}por--flex-start,--enable-autoscaling,--num-nodes=0,--min-nodes=0e--max-nodes=2para provisionar o pool de nós usando a opção de consumo flex-start. Para mais informações, consulte Executar uma carga de trabalho em lote pequena com TPUs e VMs de início flexível.
- VMs spot: substitua
Configure as credenciais de
kubectlpara se comunicar com o cluster:
Configurar credenciais e instalar o LeaderWorkerSet
Para preparar o cluster para a implantação do SGLang em vários hosts, siga estas etapas:
Crie um Secret do Kubernetes chamado
hf-secretpara armazenar o token de acesso do Hugging Face:Instale o CustomResourceDefinition e o controlador do LeaderWorkerSet no cluster:
Implantar o servidor SGLang de vários hosts
O manifesto da carga de trabalho (qwen3-coder-480b-multihost-disagg-v7x.yaml) define os
seguintes recursos para coordenar a disponibilização de pré-preenchimento e decodificação desagregados
nos dois pools de nós TPU7x 2x2x2:
- StorageClass (
hyperdisk-balanced-tpu): provisiona volumes efêmeros de 700 GiB ReadWriteOnce com suporte do armazenamento do Google Cloud Hyperdisk Balanced. Cada um dos quatro pods de preenchimento prévio e decodificação monta o próprio volume em/datapara armazenar localmente o checkpointQwen/Qwen3-Coder-480B-A35B-Instruct-FP8transferido por download. - Pool de preenchimento prévio (
sglang-prefill-serviceesglang-tpu-prefill): executa um LeaderWorkerSet desize: 2(um pod líder e um pod de worker) fixado exclusivamente a um pool de nós TPU7x2x2x2(oito chips de TPU, que fornecem 16 TensorCores). O LeaderWorkerSet usa o conjunto de anotaçõesleaderworkerset.sigs.k8s.io/exclusive-topologydefinido como"cloud.google.com/gke-nodepool". Os pods iniciamsglang.launch_servercom as flags--disaggregation-mode=prefill,--tensor-parallel-size=16e--ep-size=16, expondo a porta HTTP8000e a porta de inicialização8998. - Pool de decodificação (
sglang-decode-serviceesglang-tpu-decode): executa um LeaderWorkerSet desize: 2fixado ao segundo pool de nós da TPU v5e2x2x2(oito chips de TPU, que fornecem 16 TensorCores). O LeaderWorkerSet iniciasglang.launch_servercom as sinalizações--disaggregation-mode=decode,--tensor-parallel-size=16e--ep-size=16. - Roteador de desagregação (
sglang-routeresglang-service): executa uma implantação de CPU que executa o módulosglang_router.launch_routercom a flag--pd-disaggregatione expõe um serviço ClusterIP na porta8000. O roteador direciona os comandos e coordena a transferência de cache de chave-valor entre os serviçossglang-prefill-serviceesglang-decode-service.
Para implantar e monitorar os servidores SGLang de vários hosts, siga estas etapas:
Faça o download do manifesto da carga de trabalho:
Como alternativa, crie um arquivo chamado
qwen3-coder-480b-multihost-disagg-v7x.yamlcom o seguinte conteúdo:Aplique o manifesto da carga de trabalho ao cluster:
Verifique se os pods de roteador, preenchimento prévio e decodificação foram criados:
Quando todos os pods estiverem prontos, a saída será semelhante a esta:
NAME READY STATUS RESTARTS AGE sglang-router-6d87cb8c7d-gv4wr 1/1 Running 0 39m sglang-tpu-decode-0 1/1 Running 0 40m sglang-tpu-decode-0-1 1/1 Running 0 40m sglang-tpu-prefill-0 1/1 Running 0 40m sglang-tpu-prefill-0-1 1/1 Running 0 40mMonitore os registros do pod líder de preenchimento prévio e decodificação até que a inicialização seja concluída:
O download do modelo inicial, o carregamento de peso e a compilação levam aproximadamente de 15 a 30 minutos na primeira execução.
Se você estiver usando capacidade preemptiva, como capacidade spot ou VMs flex-start, pode levar mais tempo após a criação do pool de nós para que os nós de fração de TPU sejam criados, e eles podem ser interrompidos durante as execuções de carga de trabalho. Para mais informações, consulte Instâncias de VM preemptivas. Para verificar se os nós de fração de TPU foram criados, consulte Verificar o status e as condições do nó.
Aguarde até que os registros do pod líder de preenchimento prévio e decodificação mostrem a seguinte mensagem e
kubectl get podsmostre1/1na colunaREADYpara todos os pods:The server is fired up and ready to roll!Abra uma segunda sessão de terminal e encaminhe a porta local
8000parasglang-service:Deixe o encaminhamento de portas em execução nessa sessão do terminal.
Enviar solicitações de inferência
Volte para a primeira sessão do terminal e envie uma solicitação de conclusão de chat para o endpoint /v1/chat/completions exposto pelo roteador do SGLang:
Executar uma carga de trabalho de comparativo de mercado
Para comparar o modelo Qwen3-Coder implantado usando uma carga de trabalho de entrada de 1.024 tokens e
saída de 1.024 tokens (1k/1k) do pod sglang-router, execute o
seguinte comando:
Limpar
Para evitar cobranças contínuas extras na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua os seguintes recursos:
Exclua as cargas de trabalho de preenchimento, decodificação e roteador do SGLang:
Exclua os pools de nós da TPU7x, a política de posicionamento de cargas de trabalho e o cluster do GKE:
A seguir
- Saiba mais sobre o SGLang.
- Saiba mais sobre a TPU7x (Ironwood).
- Saiba mais sobre o Cloud TPU.