Neste tutorial, mostramos como implantar e disponibilizar o
Qwen3-Coder-30B-A3B (Qwen/Qwen3-Coder-30B-A3B-Instruct-FP8),
um modelo de codificação de mix de especialistas, no Google Kubernetes Engine (GKE). A implantação
usa aceleradores TPU v6e (Trillium) de vários hosts e o
framework de veiculaçã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 ct6e-standard-4t de vários hosts, cada um organizado em uma topologia 2x4
(oito chips de TPU v6e em dois nós por pool de nós, totalizando 16
chips de TPU v6e). 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 TPU v6e separadas com o paralelismo de tensor e o paralelismo de especialistas ativados.
- Encaminhe solicitações por um roteador de desagregação do SGLang.
Para executar um fluxo de trabalho de disponibilização de TorchTPU do SGLang de vários hosts semelhante em aceleradores TPU7x (Ironwood) com o modelo Qwen3-Coder-480B maior, consulte Disponibilizar o Qwen3-Coder-480B no GKE com TorchTPU do SGLang de vários hosts e desagregação DP em aceleradores TPU7x.
Objetivos
- Configure o cluster do GKE e os pools de nós de TPU v6e de 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.
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
Configure o ambiente para o tutorial:
Instale e inicialize a Google Cloud CLI e instale
kubectl. Se você usa o Cloud Shell, as duas ferramentas já estão pré-instaladas.Ative as API Kubernetes Engine, API Compute Engine, Cloud TPU e API Artifact Registry no projeto do Google Cloud :
Verifique se o projeto tem cota de disco e 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 400 GiB de cota disponível do Google Cloud Hyperdisk Balanced nos quatro volumes temporários de 100 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.
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) - 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 TPU v6e, comous-central1-b.YOUR_RESERVATION_NAME: se você estiver usando uma reserva, o nome da sua reserva de TPU v6e.YOUR_HF_TOKEN: seu token de acesso do Hugging Face.
Se você estiver usando uma imagem de contêiner personalizada do SGLang TorchTPU, substitua
lmsysorg/sglang:v0.1.0-tpu na variável SGLANG_IMAGE pelo URI da
imagem.
Criar o cluster do GKE
Para criar um cluster do GKE no modo Standard e anexar dois pools de nós de TPU v6e de vários hosts para desagregação de pré-preenchimento 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 dois pools de nós de TPU v6e de vários hosts, cada um contendo dois nós
ct6e-standard-4t(oito chips de TPU v6e em uma topologia2x4por pool de nós, totalizando 16 chips de TPU v6e):Em vez de usar uma reserva específica, também é possível criar os pools de nós usando a capacidade do Spot ou as VMs flex-start:
VMs spot
Provisione os pools de nós usando a capacidade de spot substituindo as flags
--reservation-affinity=specifice--reservation="${RESERVATION}"pela flag--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
Provisione os pools de nós usando a opção de consumo Início flexível:
Para mais informações, consulte Executar uma carga de trabalho em lote pequena com TPUs e VMs de início flexível.
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-30b-multihost-disagg-v6e-2x4.yaml) define
os seguintes recursos para coordenar a disponibilização de pré-preenchimento e decodificação desagregados
nos dois pools de nós da TPU v6e 2x4:
StorageClass (
hyperdisk-balanced-tpu): provisiona volumes efêmeros de 100 GiB ReadWriteOnce com suporte do armazenamento do Google Cloud Hyperdisk Balanced. Cada um dos quatro pods de pré-preenchimento e decodificação monta o próprio volume em/datapara armazenar localmente os checkpointsQwen/Qwen3-Coder-30B-A3B-Instruct-FP8baixados.Pool de preenchimento (
sglang-prefill-serviceesglang-tpu-prefill): executa um LeaderWorkerSet, que contém um pod líder e um pod de worker, fixados exclusivamente em um pool de nós da TPU v6e2x4. Esse pool de nós tem oito chips de TPU, que fornecem oito TensorCores. O LeaderWorkerSet usa a anotaçãoleaderworkerset.sigs.k8s.io/exclusive-topologydefinida como"cloud.google.com/gke-nodepool". Os pods iniciamsglang.launch_servercom as seguintes flags, expondo a porta8000e a porta de inicialização8998:--disaggregation-mode=prefill--tensor-parallel-size=8--ep-size=8
Pool de decodificação (
sglang-decode-serviceesglang-tpu-decode): executa um LeaderWorkerSet desize: 2fixado ao segundo pool de nós de TPU v6e2x4(oito chips de TPU, que fornecem oito TensorCores). O LeaderWorkerSet iniciasglang.launch_servercom as seguintes flags:--disaggregation-mode=decode--tensor-parallel-size=8--ep-size=8
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:
Baixe o manifesto da carga de trabalho:
Como alternativa, crie um arquivo chamado
qwen3-coder-30b-multihost-disagg-v6e-2x4.yamlcom o seguinte conteúdo:Aplique o manifesto de 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 inicial do modelo, o carregamento de pesos e a compilação levam de sete a dez 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 preenchimento 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-30B-A3B 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:
Depois que o comparativo de mercado for concluído, procure uma saída que contenha métricas como
as seguintes:
Output token throughput
Total token throughput
TTFT
TPOT
Limpar
Para evitar cobranças contínuas adicionais 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 TPU v6e e o cluster do GKE:
A seguir
- Saiba mais sobre o SGLang.
- Saiba mais sobre a TPU v6e (Trillium).
- Saiba mais sobre o Cloud TPU.
Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2026-11-03 UTC.