Este tutorial mostra como ajustar um
Gemma 4
31B (google/gemma-4-31b-it) em um cluster do Google Kubernetes Engine (GKE) Autopilot de vários hosts e várias GPUs
Google Cloud. Esse cluster usa duas instâncias de máquina virtual (VM) A4 (a4-highgpu-8g) com um total de 16 GPUs NVIDIA B200.
Os três principais processos descritos neste tutorial são os seguintes:
- Implante um cluster do GKE de vários hosts no modo Autopilot.
- Crie uma imagem de contêiner personalizada com as dependências de ajuste fino necessárias usando o Cloud Build.
- Orquestre uma carga de trabalho de ajuste fino distribuída em vários hosts em todas as 16 GPUs usando o JobSet do Kubernetes e a biblioteca Accelerate do Hugging Face com o Fully Sharded Data Parallel v2 (FSDP v2), enviando checkpoints para o Hugging Face Hub.
Este tutorial é destinado a engenheiros de machine learning (ML), pesquisadores, administradores e operadores de plataforma e especialistas em dados e IA que implantam clusters do GKE em Google Cloud para ajustar LLMs em vários hosts.
Objetivos
Acesse o modelo Gemma 4 usando o Hugging Face.
Prepare o ambiente.
Crie e implante um cluster do GKE A4 de vários hosts.
Ajuste o modelo Gemma 4 31B em 16 GPUs usando o
JobSetdo Kubernetes e o Hugging Face Accelerate com o FSDP v2.Monitore o job.
Confira os pesos do adaptador ajustado no Hugging Face Hub.
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,
use a calculadora de preços.
Antes de começar
Para conseguir as permissões que você precisa para concluir este 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 do Storage (
roles/storage.admin) - Administrador do Artifact Registry (
roles/artifactregistry.admin) - Editor do Cloud Build (
roles/cloudbuild.builds.editor) - Usuário da conta de serviço (
roles/iam.serviceAccountUser) - Administrador da conta de serviço (
roles/iam.serviceAccountAdmin) - Administrador do IAM do projeto (
roles/resourcemanager.projectIamAdmin) - Administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin)
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 com papéis personalizados ou outros papéis predefinidos.
Instale e inicialize a Google Cloud CLI e instale
kubectl. Se você usa o Cloud Shell, as duas ferramentas já estão instaladas.Ative as APIs necessárias, se alguma ainda não estiver ativada:
Funções necessárias para ativar APIs
Para ativar as APIs, é necessário ter a permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel Proprietário (roles/owner). Caso contrário, você pode receber essa permissão pelo papel Administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.gcloud services enable compute.googleapis.com
container.googleapis.com artifactregistry.googleapis.com cloudbuild.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com Ative a conta de serviço padrão do Compute Engine para seu Google Cloud projeto:
export PROJECT_NUMBER="$(gcloud projects describe "YOUR_PROJECT_ID" --format "value(project_number)")" gcloud iam service-accounts enable "${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --project=YOUR_PROJECT_IDConceda os papéis do IAM de menor privilégio que a conta de serviço padrão do Compute Engine precisa para criar a imagem do contêiner e executar a carga de trabalho de ajuste fino:
ROLES=( "roles/artifactregistry.writer" "roles/cloudbuild.builds.builder" "roles/logging.logWriter" "roles/monitoring.metricWriter" "roles/monitoring.viewer" "roles/stackdriver.resourceMetadata.writer" "roles/storage.objectViewer" ) for role in "${ROLES[@]}"; do gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \ --member="serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --role="${role}" 1>/dev/null done unset ROLESVerifique se os papéis foram concedidos à conta de serviço padrão do Compute Engine:
echo "Displaying roles for ${PROJECT_NUMBER}-compute@developer.gserviceaccount.com:" gcloud projects get-iam-policy YOUR_PROJECT_ID \ --flatten="bindings[].members" \ --filter="bindings.members:serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com" \ --format="table(bindings.role)"Crie credenciais de autenticação local para sua conta de usuário:
gcloud auth application-default login
Ative o Login do SO para seu projeto:
gcloud compute project-info add-metadata \ --metadata=enable-oslogin=TRUE \ --project=YOUR_PROJECT_ID
Acessar o Gemma 4 usando o Hugging Face
Para usar o Hugging Face para acessar o Gemma 4, siga estas etapas:
- Faça login no Hugging Face e aceite o contrato de licença do Gemma 4.
- Crie um token de acesso
writedo Hugging Face.
Clique em Seu perfil > Configurações > Tokens de acesso > +Criar novo token. - Copie e salve o valor do token de acesso
write. Você usa esse token para fazer o download do modelo base e enviar checkpoints do adaptador ajustado para o Hugging Face Hub antes que o GKE reduza os nós da GPU.
Preparar o ambiente
Para preparar o ambiente, defina as seguintes variáveis de ambiente:
Substitua:
YOUR_PROJECT_ID: o ID do Google Cloud projeto em que você quer criar o cluster do GKE.
YOUR_CLUSTER_NAME: o nome do cluster do GKE a ser criado. Esse nome precisa ter 40 caracteres ou menos e ser composto de caracteres alfanuméricos minúsculos e hífens.
YOUR_REGION: a região em que você quer criar o cluster do GKE. Só é possível criar o cluster na região em que a reserva existe.
YOUR_RESERVATION_NAME: o identificador da capacidade reservada.
YOUR_HF_TOKEN: o token de acesso do Hugging Face
writeque você criou na seção anterior.YOUR_ARTIFACT_REGISTRY_LOCATION: a Google Cloud região (por exemplo,
us-central1) em que você quer criar o repositório do Artifact Registry. Para minimizar a latência de extração de imagens, use a mesma região que você especificou para YOUR_REGION.YOUR_NUMBER_OF_NODES: o número de nós de VM A4 no seu job de ajuste fino. Para este tutorial de vários hosts com 16 GPUs NVIDIA B200 em duas instâncias
a4-highgpu-8g, defina esse valor como2.
Criar um cluster do GKE de vários hosts no modo Autopilot
Crie um cluster do GKE de vários hosts no modo Autopilot:
A criação do cluster do GKE pode levar vários minutos para ser concluída. Para verificar se o Google Cloud cluster foi criado, acesse Clusters do Kubernetes no Google Cloud console.
Configurar o kubectl para se comunicar com o cluster do GKE
Configure kubectl para se comunicar com o cluster do GKE:
Criar um secret do Kubernetes para as credenciais do Hugging Face
Crie um secret do Kubernetes para armazenar o token do Hugging Face:
Preparar sua carga de trabalho
Para preparar sua carga de trabalho, faça o seguinte:
Criar scripts de carga de trabalho
Para criar os arquivos de configuração e scripts usados pela carga de trabalho de ajuste fino, siga estas etapas:
Crie um diretório para os scripts de carga de trabalho. Use esse diretório como diretório de trabalho.
Crie o arquivo
cloudbuild.yamlpara criar a imagem do contêiner de carga de trabalho com o Cloud Build e envie-o para o Artifact Registry:Crie um arquivo
Dockerfilepara definir o ambiente e instalar as dependências necessárias para concluir o job de ajuste fino:Crie o arquivo
accel_fsdp_gemma4_config.yaml. Essa configuração direciona o Hugging Face Accelerate para fragmentarGemma4TextDecoderLayerem 16 GPUs em dois hosts usando o FSDP v2:Crie o manifesto
JobSetdo Kubernetesfinetune.yaml:Crie o script de ajuste supervisionado
finetune.py:
Usar o Docker e o Cloud Build para criar um contêiner de ajuste fino
Criar um repositório Docker do Artifact Registry:
Instale as definições de recursos personalizados (CRDs)
JobSetnecessárias para orquestrar cargas de trabalho de vários hosts:No diretório
llm-finetuning-gemmacriado em uma etapa anterior, envie a criação do contêiner para o Cloud Build:Exporte o URL da imagem do contêiner de vários hosts. Você o usará em uma etapa posterior deste tutorial, ao implantar o manifesto
JobSet:
Iniciar a carga de trabalho de ajuste fino
Para implantar e monitorar a carga de trabalho de ajuste fino distribuída, siga estas etapas:
Substitua as variáveis de ambiente no manifesto de ajuste fino para criar o job de ajuste fino:
Como o cluster é executado no modo Autopilot do GKE, pode levar alguns minutos para provisionar os dois nós A4 ativados para GPU e extrair a imagem do contêiner.
Observe os pods de worker até que os dois pods façam a transição para o status
Running:Depois que os pods de worker fizerem a transição para
Running, transmita os registros de treinamento:
Monitorar a carga de trabalho
É possível monitorar a utilização da GPU no cluster do GKE para verificar se todas as 16 GPUs nos dois hosts A4 estão processando ativamente as etapas de treinamento. Gere e abra o link de observabilidade no navegador:
Ao monitorar a carga de trabalho, espere o seguinte comportamento:
- Utilização da GPU: para um job de ajuste fino distribuído normal, você pode esperar ver a utilização da GPU em todas as 16 GPUs NVIDIA B200 aumentar e estabilizar perto de 95% a 100% durante as etapas de treinamento.
- Duração do job: em dois nós
a4-highgpu-8g(16 GPUs B200), o job de ajuste fino de 3 épocas leva aproximadamente 2 horas e meia para ser concluído.
Conferir os pesos do adaptador ajustado
Quando o treinamento terminar, confira os pesos e
checkpoints do adaptador LoRA ajustado no Hugging Face Hub em
https://huggingface.co/YOUR_HF_USERNAME/gemma-31b-text-to-sql.
Limpar
Para evitar cobranças adicionais, exclua os recursos criados durante este tutorial.
Excluir os recursos
Exclua o
JobSetde ajuste fino:Exclua seu Cluster do GKE:
Exclua o repositório do Artifact Registry: