Este guia usa uma carga de trabalho de treinamento do JAX que é executada até a conclusão no mesmo cluster que os componentes do controlador do Pathways para demonstrar como executar uma carga de trabalho em lote.
É possível executar cargas de trabalho em lote em um cluster do Google Kubernetes Engine (GKE) ou em um cluster do Cluster Director com o Slurm:
- No GKE, a conclusão da carga de trabalho do JAX encerra os componentes do cluster do Pathways.
- No Cluster Director, os componentes do controlador do Pathways são executados como um job separado do Slurm. Por isso, eles continuam em execução após a conclusão da carga de trabalho do JAX, até que você os interrompa.
Esta página tem instruções para as duas plataformas. Em cada seção, selecione a guia GKE ou Cluster Director.
Antes de começar
-
Selecione a guia para como planeja usar as amostras nesta página:
gcloud
Instale a Google Cloud CLI e faça login na CLI gcloud com sua identidade federada. Depois de fazer login, inicialize a Google Cloud CLI executando o seguinte comando:
gcloud initREST
Para usar as amostras da API REST desta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para a CLI gcloud.
Instale a Google Cloud CLI e faça login na CLI gcloud com sua identidade federada.
Saiba mais em Autenticar para usar REST na documentação de autenticação do Google Cloud .
Antes de começar
GKE
Siga os seguintes pré-requisitos:
- Crie um cluster do GKE.
- Configure o Cluster Toolkit.
- Instale as ferramentas do Kubernetes.
- Ative a API Kubernetes Engine.
- Crie um bucket do Cloud Storage para artefatos e saídas do Pathways.
Cluster Director
Siga os seguintes pré-requisitos:
- Crie um cluster do Cluster Director e configure o ambiente do Pathways.
- Crie um bucket do Cloud Storage em que seja possível gravar dados de rascunho e checkpoints do Pathways.
Criar uma imagem de treinamento usando o MaxText
O MaxText é um projeto de modelo de linguagem grande (LLM) de código aberto desenvolvido pelo Google. Ele é escrito em JAX e projetado para ser executado com eficiência em Google Cloud TPUs e GPUs.
GKE
Para criar uma imagem Docker do MaxText usando a versão estável mais recente do JAX do repositório de código aberto do GitHub, execute o seguinte comando:
git clone https://github.com/AI-Hypercomputer/maxtext cd maxtext gcloud config set project PROJECT_ID bash src/dependencies/scripts/docker_build_dependency_image.sh MODE=stable gcloud auth configure-docker # This script needs bash version >= 4.2 to execute. bash src/dependencies/scripts/docker_upload_runner.sh \ CLOUD_IMAGE_NAME=USER_runner
Substitua:
PROJECT_ID: o ID do projeto doGoogle Cloud .USER: seu ID de usuário doGoogle Cloud .
Esse comando envia a imagem do MaxText do Kubernetes para
gcr.io/PROJECT_ID/USER_runner.
É possível usar essa imagem Docker para executar o treinamento em TPUs usando o back-end do Pathways.
Cluster Director
Não é necessário criar uma imagem de treinamento: o setup_env.sh instalou o MaxText
no ambiente do Pathways em /home/pathways, e o run_maxtext.sh o
executa.
Executar uma carga de trabalho em lote
GKE
Se o binário
gclusternão estiver na variável de ambientePATH, adicione o diretório que contémgclusteraoPATH:export PATH="$PATH:CLUSTER_TOOLKIT_PATH"
Substitua
CLUSTER_TOOLKIT_PATHpelo caminho absoluto para o diretório que contém o bináriogcluster, como$HOME/cluster-toolkit.Envie a imagem Docker pré-criada do MaxText usando o comando
gcluster job submit:gcluster job submit \ --pathways \ --pathways-gcs-location="gs://BUCKET_NAME/pathways-artifacts" \ --name=WORKLOAD \ --cluster=CLUSTER \ --project=PROJECT_ID \ --location=LOCATION \ --num-slices=WORKLOAD_NODEPOOL_COUNT \ --compute-type=COMPUTE_TYPE \ --topology=TOPOLOGY \ --image="gcr.io/PROJECT_ID/USER_runner" \ --command="python3 -m maxtext.trainers.pre_train.train /deps/src/maxtext/configs/base.yml base_output_directory=gs://BUCKET_NAME per_device_batch_size=1 enable_checkpointing=false remat_policy=full global_parameter_scale=1 steps=20 max_target_length=2048 use_iota_embed=true reuse_example_batch=1 dataset_type=synthetic attention=flash gcs_metrics=True enable_single_controller=True run_name=RUN_NAME-pathways-job"
Substitua:
BUCKET_NAME: o bucket do Cloud Storage para saídas.WORKLOAD: um nome exclusivo para identificar sua carga de trabalho (22 caracteres ou menos devido aos limites de rótulo de DNS).CLUSTER: o nome do cluster do GKE.PROJECT_ID: o ID do projeto doGoogle Cloud .LOCATION: a região ou zona do cluster do GKE.WORKLOAD_NODEPOOL_COUNT: o número de pools de nós de fração de TPU.COMPUTE_TYPE: o tipo de máquina da TPU, por exemplo,ct6e-standard-4t. Para mais informações sobre os tipos de TPU compatíveis com cada versão de TPU, consulte Versões de TPU.TOPOLOGY: a topologia de posicionamento da TPU, por exemplo,2x4.USER: seu ID de usuário doGoogle Cloud .RUN_NAME: um nome atribuído pelo usuário para identificar a execução do fluxo de trabalho.
Para mais informações sobre as opções de envio de jobs, consulte o Guia de envio de jobs do Cluster Toolkit.
Acompanhe o progresso da carga de trabalho usando o comando
gcluster job logs:gcluster job logs WORKLOAD \ --cluster=CLUSTER \ --project=PROJECT_ID \ --location=LOCATION \ --main-only \ --follow
O resultado será o seguinte:
completed step: 0, seconds: 1.259, TFLOP/s/device: 10.792, Tokens/s/device: 1626.636, total_weights: 65536, loss: 10.876, lm_loss: 10.876, perplexity: 52906.090 completed step: 1, seconds: 3.366, TFLOP/s/device: 4.036, Tokens/s/device: 608.366, total_weights: 65536, loss: 10.876, lm_loss: 10.876, perplexity: 52906.090 completed step: 2, seconds: 0.264, TFLOP/s/device: 51.415, Tokens/s/device: 7749.885, total_weights: 65536, loss: 10.563, lm_loss: 10.563, perplexity: 38665.316 completed step: 3, seconds: 1.025, TFLOP/s/device: 13.257, Tokens/s/device: 1998.187, total_weights: 65536, loss: 9.983, lm_loss: 9.983, perplexity: 21646.125 completed step: 4, seconds: 1.194, TFLOP/s/device: 11.376, Tokens/s/device: 1714.750, total_weights: 65536, loss: 9.462, lm_loss: 9.462, perplexity: 12864.218 completed step: 5, seconds: 1.185, TFLOP/s/device: 11.465, Tokens/s/device: 1728.203, total_weights: 65536, loss: 8.961, lm_loss: 8.961, perplexity: 7791.373Opcional: para cancelar a carga de trabalho antes que ela seja concluída, use o comando
gcluster job cancel:gcluster job cancel WORKLOAD \ --cluster=CLUSTER \ --project=PROJECT_ID \ --location=LOCATION
Cluster Director
Execute os comandos a seguir no nó de login do cluster em ~/pathways.
Os scripts procuram uns aos outros e gravam os registros nesse diretório.
Inicie o serviço do Pathways:
cd ~/pathways SLICE_SHAPE=TOPOLOGY \ MIN_SLICES=MIN_SLICES \ MAX_SLICES=MAX_SLICES \ GCS_BUCKET=gs://BUCKET_NAME \ sbatch start_pathways.sh
Substitua:
TOPOLOGY: a topologia de TPU de cada fração. Ele precisa corresponder aoacceleratorTopologydo conjunto de nós da TPU, por exemplo,2x4.MIN_SLICES: o número mínimo de frações em execução necessárias para iniciar e continuar o treinamento.MAX_SLICES: o número máximo de frações a serem usadas, normalmente o número de frações no conjunto de nós.BUCKET_NAME: o bucket do Cloud Storage para dados temporários e checkpoints do Pathways.
Se a partição de TPU não for a padrão do cluster, defina
PARTITIONcomo o nome dela.O serviço estará pronto quando o registro,
pathways-service-JOB_ID.out(em queJOB_IDé o ID da tarefa do Slurm), mostrar uma saída semelhante a esta:Pathways Runtime Service is READY! Discovery file : /home/USER/pathways/cluster.env IFRT Proxy Target : grpc://RM_IP:29000 Running TPU Slices : 2 / 2 (min=2)Envie a carga de trabalho de treinamento do MaxText. É possível enviá-lo logo após o job de serviço: ele aguarda até uma hora para que o serviço esteja pronto.
sbatch run_maxtext.shO job do MaxText aguarda até que o serviço Pathways tenha pelo menos
MIN_SLICESfrações em execução antes de iniciar o treinamento. A carga de trabalho treina o Llama 3.1 8B em dados sintéticos. As configurações de fração e o bucket vêm do serviço, então não os defina neste job. É possível definir as seguintes variáveis opcionais:STEPS: o número de etapas de treinamento. O padrão é30.CHECKPOINT_PERIOD: o número de etapas entre os checkpoints. O padrão é5.BASE_OUTPUT_DIR: o caminho do Cloud Storage em que o MaxText grava checkpoints. O padrão égs://BUCKET_NAME/maxtext-runs.REDUCED_LAYERS=1: treina uma variante de 8 camadas em vez das 32 camadas completas, para frações2x2.
Acompanhe o progresso da carga de trabalho (substitua
JOB_IDpelo código da tarefa do Slurm do job do MaxText). O MaxText grava o registro no erro padrão:tail -f maxtext-llama31-JOB_ID.err
Cada etapa de treinamento imprime uma linha semelhante a esta:
completed step: 24, seconds: 0.326, live slice count: 2, TFLOP/s/device: 88.199, Tokens/s/device: 6289.27, total_weights: 32768, loss: 6.238É possível enviar
run_maxtext.shnovamente mais tarde sem reiniciar o serviço.Quando terminar, interrompa a carga de trabalho e o serviço do Pathways:
scancel -u ${USER} -n maxtext-llama31 scancel -u ${USER} -n pathways-serviceO cancelamento do serviço também cancela os jobs de worker do Pathways. As VMs de TPU são nós estáticos, então continuam em execução e ficam disponíveis para outros jobs do Slurm.
Se você tiver problemas, consulte Resolver problemas do Pathways no Cloud.