Neste tutorial, você vai aprender a treinar um modelo de linguagem grande (LLM) em um cluster Slurm de vários nós e várias GPUs no Google Cloud. O modelo que você vai usar neste tutorial é baseado em um modelo Qwen2 de 1,5 bilhão de parâmetros. O cluster Slurm usa duas máquinas virtuais (VMs) a4-highgpu-8g, cada uma com 8 GPUs NVIDIA B200.
Os dois processos principais descritos neste tutorial são os seguintes:
- Implante um cluster Slurm de alto desempenho e nível de produção usando o Google Cloud Cluster Toolkit. Como parte dessa implantação, você cria uma imagem de VM personalizada com o software necessário pré-instalado. Você também configura uma instância compartilhada do Filestore e uma rede RDMA de alta velocidade.
- Depois que o cluster for implantado, execute um job de pré-treinamento distribuído usando o conjunto de scripts que acompanham este tutorial. O job usa a biblioteca Accelerate do Hugging Face.
Este tutorial é destinado a engenheiros e pesquisadores de machine learning (ML), administradores e operadores de plataforma e especialistas em dados e IA interessados em implantar clusters Slurm de alta performance no Google Cloud para treinar LLMs.
Objetivos
- Acesse o modelo Qwen2 usando o Hugging Face.
- Prepare seu ambiente.
- Crie e implante um cluster Slurm A4 de nível de produção.
- Treine o modelo Qwen2 usando a biblioteca Accelerate .
- Monitorar o job.
- 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
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça 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
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça 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.serviceUsageAdmin, roles/compute.osAdminLogin, roles/iap.tunnelResourceAccessorgcloud 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 . Por exemplo,myemail@example.com.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@developer.gserviceaccount.com \ --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@developer.gserviceaccount.com" \ --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 Qwen2 usando o Hugging Face
Para usar o Hugging Face e acessar o Qwen2, faça o seguinte:
Instalar o Cluster Toolkit
O Cluster Toolkit é uma ferramenta de código aberto que simplifica a implantação de cargas de trabalho de computação de alto desempenho (HPC), inteligência artificial (IA) e machine learning (ML) no Google Cloud. 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 nome do Google Cloud projeto em que você quer criar o cluster do GKE.YOUR_CLUSTER_NAME: o nome do cluster do Slurm que você quer criar.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_BUCKET_NAME: o nome do bucket em que você armazena os resultados do checkpoint de treinamento. Antes de criar, familiarize-se com os requisitos de nomenclatura de bucket.HUGGING_FACE_TOKEN: o token do Hugging Face que você criou em uma etapa 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: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é 50 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 treinamento 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 um arquivo
requirements.txtcom o seguinte conteúdo:
Observação: este tutorial não usa as versões mais recentes das dependências do NVIDIA e do PyTorch. Se você precisar de dependências mais recentes, consulte a documentação da NVIDIA e a documentação do Pytorch.Para fazer o download, tokenizar e pré-processar o conjunto de dados em um formato pronto para treinamento, crie um arquivo
preprocess_data.pycom o seguinte conteúdo:Para especificar as instruções do job, crie um 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.Crie uma regra de firewall:
Faça upload dos scripts para o diretório principal do nó de login:
Conectar-se ao cluster do Slurm
Conecte-se ao cluster do Slurm conectando-se ao nó de login por SSH:
Instalar frameworks e ferramentas
Depois de se conectar ao nó de login, instale frameworks e ferramentas fazendo o seguinte:
Configure um ambiente virtual do Python com todas as dependências necessárias:
Começar o pré-treinamento da carga de trabalho
Para iniciar o treinamento da sua carga de trabalho, faça o seguinte:
Envie o job para o programador do Slurm:
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
Como alternativa, insira o comando diretamente no terminal:
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. TESTAR
Duração do job: o job leva aproximadamente uma hora para ser concluído.
Baixar o modelo
Depois que o job for executado, o modelo treinado será salvo no diretório
~/qwen2-from-scratch-on-smollm-fineweb/ no nó de login. Como esse diretório compartilhado persistente é montado em todos os nós do cluster, os pontos de verificação do modelo permanecem disponíveis mesmo depois que o job é concluído ou que os nós de computação são desalocados.
É possível fazer o download do modelo salvo do nó de login para sua máquina local usando o comando gcloud compute scp, conforme mostrado no exemplo a seguir:
Depois de baixar o modelo, você pode fazer o seguinte:
- Carregue o modelo para inferência: use a estrutura Transformers do Hugging Face
para carregar o diretório
qwen2-trained-model/e realizar a inferência com seu modelo Qwen2 recém-treinado. - Ajuste refinado adicional: use o ponto de verificação salvo como ponto de partida para um ajuste refinado adicional em um conjunto de dados mais específico.
- Envie o modelo para o Hugging Face Hub: compartilhe seu modelo treinado enviando-o para o Hugging Face Hub.
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 os recursos
Para excluir o cluster do Slurm, siga estas etapas:
Para excluir o bucket do Cloud Storage, siga estas etapas:
Para excluir uma imagem do Packer, abra o navegador da Web, navegue até a página a seguir, pesquise sua imagem específica e clique em "Excluir".
Para 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