Neste tutorial, mostramos como ajustar o modelo de linguagem grande (LLM) Gemma 3 em um cluster Slurm de vários nós que usa duas instâncias de máquina virtual (VM) A4. Neste tutorial, você vai:
Criar uma imagem personalizada.
Configurar uma rede RDMA.
Executar um job de ajuste fino distribuído. Para um treinamento eficiente em vários nós, use a biblioteca Hugging Face Accelerate com paralelismo de dados totalmente fragmentados (FSDP).
Este tutorial é destinado a engenheiros de machine learning (ML), administradores e operadores de plataforma, além de especialistas em dados e IA que têm interesse em usar os recursos de programação de jobs do Slurm para lidar com cargas de trabalho de ajuste.
Objetivos
Acesse o Gemma 3 usando o Hugging Face.
Prepare o ambiente.
Criar um cluster Slurm A4.
Prepare a carga de trabalho.
Executar um job de ajuste.
Monitorar o job.
Fazer a limpeza.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Google Cloud:
- Compute Engine
- Google Kubernetes Engine (GKE) Enterprise edition
- Filestore
- Cloud Storage
- Cloud Logging
Para gerar uma estimativa de custo baseada na sua projeção de uso,
use a calculadora de preços.
Antes de começar
-
Instale a CLI do Google Cloud.
-
Configure a CLI gcloud para usar sua identidade federada.
Para mais informações, consulte Fazer login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Crie ou selecione um projeto do Google Cloud .
Papéis necessários para selecionar ou criar um projeto
- Selecionar um projeto: para selecionar um projeto, não é necessário ter um papel específico do IAM. É possível selecionar qualquer projeto em que você tenha um papel.
-
Criar um projeto: para criar um projeto, é preciso ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto do Google Cloud que você está criando. -
Selecione o projeto do Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
Ative a API necessária, se 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 conseguir essa permissão pelo papel de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.gcloud services enable compute.googleapis.com file.googleapis.com logging.googleapis.com cloudresourcemanager.googleapis.com servicenetworking.googleapis.com
-
Conceda papéis à sua conta de usuário. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM:
roles/compute.admin, roles/iam.serviceAccountUser, roles/file.editor, roles/storage.admin, roles/serviceusage.serviceUsageAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Substitua:
PROJECT_ID: o ID do projeto.USER_IDENTIFIER: o identificador da sua conta de usuário . Para ver exemplos, consulte Representar usuários do pool de força de trabalho nas políticas do IAM.ROLE: o papel do IAM que você concede à sua conta de usuário.
- Ative a conta de serviço padrão do projeto do Google Cloud :
gcloud iam service-accounts enable PROJECT_NUMBER-compute@ \ --project=PROJECT_ID
Substitua PROJECT_NUMBER pelo número do projeto. Para conferir o número do projeto, consulte Acessar um projeto atual.
- Conceda o papel de Editor (
roles/editor) à conta de serviço padrão:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@" \ --role=roles/editor
- Crie 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
- Faça login ou crie uma conta do Hugging Face.
Acessar o Gemma 3 usando o Hugging Face
Para usar o Hugging Face para acessar o Gemma 3, siga estas etapas:
Crie um token de acesso do Hugging Face
read. Clique em Seu perfil > Configurações > Tokens de acesso > +Criar novo token.Copie e salve o valor do token de acesso do
read. Você vai usá-lo mais adiante neste tutorial.
Instalar o Cluster Toolkit
Para mais informações sobre como usar a
CLI gcluster e gerenciar
clusters, consulte a
visão geral do Cluster Toolkit.
Prepare a versão do Cluster Toolkit:
Baixe a versão:
Defina o caminho
gcluster:
Preparar o ambiente
Para preparar o ambiente, siga estas etapas:
Defina as variáveis de ambiente padrão:
Substitua:
YOUR_PROJECT_ID: o ID do projeto doGoogle Cloud em que você quer criar o bucket do Cloud Storage.YOUR_ZONE: a zona em que a reserva existe.YOUR_REGION: a região em que a reserva existe.YOUR_RESERVATION_NAME: o URL ou o nome da reserva que você quer usar para criar o cluster do Slurm.YOUR_CLUSTER_NAME: o nome do cluster do Slurm que você quer criar.YOUR_GCS_BUCKET: um nome para o bucket do Cloud Storage que segue os requisitos de nomenclatura de bucket.YOUR_HF_TOKEN: o token de acesso do Hugging Face que você criou na seção anterior.
Crie um bucket do Cloud Storage:
Criar um cluster do Slurm A4
Para criar um cluster do Slurm A4, siga estas etapas:
Crie o arquivo
a4high-slurm-deployment.yaml:Prepare os manifestos:
Use o comando
gcluster createpara criar os manifestos do Terraform:Aplique o patch nos manifestos:
Implante o cluster:
O comando
gcluster deployé um processo de duas fases, que é o seguinte:A primeira fase cria uma imagem personalizada com todo o software pré-instalado, o que pode levar até 45 minutos para ser concluído.
A segunda fase implanta o cluster usando essa imagem personalizada. Esse processo geralmente leva menos tempo para ser concluído do que a primeira fase.
Se a primeira fase for bem-sucedida, mas a segunda falhar, tente implantar o cluster do Slurm novamente pulando a primeira fase:
Preparar sua carga de trabalho
Para preparar a carga de trabalho, siga estas etapas:
Criar scripts de carga de trabalho
Para criar os scripts que a carga de trabalho de ajuste fino vai usar, siga estas etapas:
Para configurar o ambiente virtual do Python, crie o arquivo
install_environment.shcom o seguinte conteúdo:Para especificar as configurações do job de ajuste, crie o arquivo
accelerate_config.yamlcom o seguinte conteúdo:Para especificar as tarefas dos jobs que serão executados no cluster do Slurm, crie o arquivo
submit.slurmcom o seguinte conteúdo:Para especificar as dependências do job de ajuste, crie o arquivo
requirements.txtcom o seguinte conteúdo:Para especificar as instruções do job, crie o arquivo
train.pycom o seguinte conteúdo:
Fazer upload de scripts para o cluster do Slurm
Para fazer upload dos scripts criados na seção anterior para o cluster do Slurm, siga estas etapas:
Defina a variável
LOGIN_NODErecuperando o nome do nó de login do cluster:A variável
LOGIN_NODEarmazena um valor semelhante a${CLUSTER_NAME}-login-001.Faça upload dos scripts para o diretório inicial do nó de login:
Conectar-se ao cluster do Slurm
Conecte-se ao nó de login e propague o token do Hugging Face para a nova sessão:
Instalar frameworks e ferramentas
Depois de se conectar ao nó de login, configure um ambiente virtual do Python com as dependências necessárias:
Iniciar a carga de trabalho de ajuste fino
Para iniciar a carga de trabalho de ajuste, siga estas etapas:
Envie a tarefa para o escalonador do Slurm e colete o código da tarefa:
No nó de login do cluster do Slurm, é possível monitorar o progresso do job verificando os arquivos de saída criados no diretório
home:Se o job for iniciado, o arquivo
.errvai mostrar uma barra de progresso que é atualizada conforme o job avança.
Monitorar a carga de trabalho
É possível monitorar o uso das GPUs no cluster do Slurm para verificar se o job de ajuste está sendo executado de maneira eficiente. Para fazer isso, abra o seguinte link no navegador:
https://console.cloud.google.com/monitoring/metrics-explorer?project=PROJECT_ID&pageState=%7B%22xyChart%22%3A%7B%22dataSets%22%3A%5B%7B%22timeSeriesFilter%22%3A%7B%22filter%22%3A%22metric.type%3D%5C%22agent.googleapis.com%2Fgpu%2Futilization%5C%22%20resource.type%3D%5C%22gce_instance%5C%22%22%2C%22perSeriesAligner%22%3A%22ALIGN_MEAN%22%7D%2C%22plotType%22%3A%22LINE%22%7D%5D%7D%7D
Ao monitorar sua carga de trabalho, você pode ver o seguinte:
Uso da GPU: para um job de ajuste saudável, o uso de todas as 16 GPUs (oito GPUs para cada VM no cluster) deve aumentar e se estabilizar em um nível específico durante o treinamento.
Duração do job: o job leva cerca de uma hora para ser concluído.
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o cluster do Slurm
Para excluir o cluster do Slurm, execute o comando
gcluster destroy:
Se você precisar excluir todas as redes VPC, regras de firewall, roteadores, IPs e sub-redes associados ao projeto, faça o seguinte:
Excluir o projeto
Excluir um projeto do Google Cloud :
gcloud projects delete PROJECT_ID