Neste tutorial, você vai aprender a ajustar um modelo de linguagem grande (google/gemma-4-31b-it) Gemma 4 de 31 bilhões de parâmetros em um cluster do Autopilot do Google Kubernetes Engine (GKE) com vários hosts e GPUs no 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 processos principais descritos neste tutorial são:
- 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 refinado 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 Hugging Face Accelerate com o paralelismo de dados totalmente fragmentados 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 no Google Cloud para ajustar LLMs em vários hosts.
Objetivos
Acesse o modelo Gemma 4 usando o Hugging Face.
Prepare seu ambiente.
Crie e implante um cluster do GKE A4 de vários hosts.
Ajuste o modelo Gemma 4 31B em 16 GPUs usando o Kubernetes
JobSete o Hugging Face Accelerate com FSDP v2.Monitorar o job.
Confira os pesos do adaptador ajustado no Hugging Face Hub.
Fazer a limpeza.
Custos
Neste documento, você vai 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
Para conseguir as permissões necessárias a fim de concluir o tutorial, peça ao administrador para conceder a você os seguintes papéis do IAM no 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 de projetos do IAM (
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 usando papéis personalizados ou outros papéis predefinidos.
Ative as APIs necessárias, se alguma ainda não estiver ativada:
Funções necessárias para ativar APIs
Para ativar APIs, você precisa da permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de Proprietário (roles/owner). Caso contrário, é possível receber essa permissão pelo papel de 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 projetoGoogle Cloud :
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 com privilégio mínimo 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 refinado:
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 as credenciais de autenticação local para sua conta de usuário:
gcloud auth application-default login
Ative o Login do SO no 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 e 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. Use esse token para fazer o download do modelo de base e enviar checkpoints de adaptadores ajustados para o Hugging Face Hub antes que o GKE reduza os nós de 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.
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 está.
YOUR_RESERVATION_NAME: o identificador da capacidade reservada.
YOUR_HF_TOKEN: o token de acesso
writedo Hugging Face que 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 especificada para YOUR_REGION.YOUR_NUMBER_OF_NODES: o número de nós de VM A4 no seu job de ajuste refinado. 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 terminou de criar o cluster, acesse Clusters do Kubernetes no console Google Cloud .
Configure 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 seu 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 sua carga de trabalho de ajuste refinado, siga estas etapas:
Crie um diretório para os scripts de carga de trabalho. Use este diretório como seu diretório de trabalho.
Crie o arquivo
cloudbuild.yamlpara criar a imagem do contêiner da carga de trabalho com o Cloud Build e envie-a para o Artifact Registry:Crie um arquivo
Dockerfilepara definir o ambiente e instalar as dependências necessárias para concluir o job de ajuste refinado: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 do
finetune.yamlKubernetesJobSet:Crie o script de ajuste supervisionado
finetune.py:
Usar o Docker e o Cloud Build para criar um contêiner de ajuste fino
Crie um repositório Docker do Artifact Registry:
Instale as definições de recursos personalizados (CRDs) do
JobSetnecessárias para orquestrar cargas de trabalho de vários hosts:No diretório
llm-finetuning-gemmacriado em uma etapa anterior, envie a build do contêiner para o Cloud Build:Exporte o URL da imagem de contêiner de vários hosts. Você vai usá-lo em uma etapa posterior deste tutorial, ao implantar o manifesto
JobSet:
Iniciar a carga de trabalho de ajuste refinado
Para implantar e monitorar sua carga de trabalho de ajuste refinado distribuído, siga estas etapas:
Substitua as variáveis de ambiente no manifesto de ajuste para criar o job de ajuste:
Como o cluster é executado no modo GKE Autopilot, pode levar alguns minutos para provisionar os dois nós A4 habilitados para GPU e extrair a imagem do contêiner.
Aguarde até que os dois pods de worker 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:
Monitore sua 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 sua carga de trabalho, espere o seguinte comportamento:
- Utilização da GPU: para um job de ajuste refinado distribuído saudável, é esperado que a utilização da GPU em todas as 16 GPUs NVIDIA B200 aumente e se estabilize 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 refinado de 3 épocas leva aproximadamente 2 horas e meia para ser concluído.
Ver os pesos do adaptador refinado
Quando o treinamento terminar, confira os pesos e os pontos de verificação 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 extras, exclua os recursos criados durante este tutorial.
Excluir os recursos
Exclua o ajuste
JobSet:Exclua seu Cluster do GKE:
Exclua o repositório do Artifact Registry: