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. Como parte deste tutorial, você vai fazer o seguinte:
Criar uma imagem personalizada.
Configure uma rede RDMA.
Execute um job de ajuste 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 e especialistas em dados e IA interessados em usar os recursos de programação de jobs do Slurm para lidar com cargas de trabalho de ajuste refinado.
Objetivos
Acesse o Gemma 3 usando o Hugging Face.
Prepare seu ambiente.
Crie um cluster Slurm A4.
Prepare a carga de trabalho.
Execute 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 projeção de uso deste tutorial, 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 Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário 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 Google Cloud que você está criando. -
Selecione o projeto 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:
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 com o papel de Proprietário (roles/owner). Caso contrário, é possível receber essa permissão com o 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
-
Atribua 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 conta. Para exemplos, consulte Representar usuários do pool de força de trabalho nas políticas do IAM.ROLE: o papel do IAM concedido à sua conta de usuário.
- Ative a conta de serviço padrão para seu projeto do Google Cloud :
gcloud iam service-accounts enable PROJECT_NUMBER-compute@ \ --project=PROJECT_ID
Substitua PROJECT_NUMBER pelo número do projeto. Para revisar o número do projeto, consulte Receber 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 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
- Faça login ou crie uma conta do Hugging Face.
Acessar o Gemma 3 usando o Hugging Face
Para usar o Hugging Face e acessar o Gemma 3, siga estas etapas:
Crie um token de acesso
readdo Hugging Face. Clique em Seu perfil > Configurações > Tokens de acesso > +Criar novo tokenCopie e salve o valor do token
read access. Você vai usar esse valor mais tarde neste tutorial.
Instalar o Cluster Toolkit
Para mais informações sobre como usar gcluster e gerenciar clusters, consulte a visão geral do Cluster Toolkit.
Prepare a versão do Cluster Toolkit:
Faça o download da 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 projetoGoogle 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 sua reserva existe.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 Slurm A4
Para criar um cluster do Slurm A4, siga estas etapas:
Crie o arquivo
a4high-slurm-deployment.yaml:Prepare os manifestos:
Crie os manifestos do Terraform:
Adicione patches aos manifestos:
Implante o cluster:
O comando
gcluster deployé um processo de duas fases:A primeira fase cria uma imagem personalizada com todo o software pré-instalado, o que pode levar até 45 minutos.
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 concluída, mas a segunda falhar, tente implantar o cluster do Slurm novamente pulando a primeira fase:
Preparar sua carga de trabalho
Para preparar sua carga de trabalho, siga estas etapas:
Criar scripts de carga de trabalho
Para criar os scripts que sua carga de trabalho de ajuste refinado vai usar, siga estas etapas:
Para configurar o ambiente virtual Python, crie o arquivo
install_environment.shcom o seguinte conteúdo:Para especificar as configurações do job de ajuste refinado, crie o arquivo
accelerate_config.yamlcom o seguinte conteúdo:Para especificar as tarefas que os jobs vão executar no cluster Slurm, crie o arquivo
submit.slurmcom o seguinte conteúdo:Para especificar as dependências do job de ajuste refinado, crie o arquivo
requirements.txtcom o seguinte conteúdo:Para especificar as instruções do seu job, crie o arquivo
train.pycom o seguinte conteúdo:
Fazer upload de scripts para o cluster 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 principal do nó de login:
Conectar-se ao cluster do Slurm
Conecte-se ao nó de login e propague seu 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 refinado
Para iniciar sua carga de trabalho de ajuste refinado, 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, monitore o progresso do job verificando os arquivos de saída criados no diretório
home:Se o job for iniciado com sucesso, o arquivo
.errvai mostrar uma barra de progresso que é atualizada conforme o job avança.
Monitore sua carga de trabalho
É possível monitorar o uso das GPUs no cluster do Slurm para verificar se o job de ajuste refinado 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 de GPUs: para um job de ajuste refinado saudável, é esperado que o uso de todas as 16 GPUs (oito GPUs para cada VM no cluster) aumente e se estabilize em um nível específico durante todo o treinamento.
Duração do job: o job leva aproximadamente 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:
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