Se você não conhece muito bem o Cloud TPU, é altamente recomendável que você siga o guia de início rápido para saber como criar uma VM da TPU.
Neste tutorial, mostramos como treinar o modelo HuggingFace GPT2 no Cloud TPU.
Objetivos
- Criar uma Cloud TPU
- Instalar dependências
- Executar o job de treinamento
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- Compute Engine
- Cloud TPU
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
Antes de começar o tutorial, verifique se o projeto do Google Cloud foi configurado corretamente.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
Este tutorial usa componentes faturáveis do Google Cloud. Consulte a página de preços da Cloud TPU para fazer uma estimativa dos custos. Para evitar cobranças desnecessárias, não se esqueça de apagar os recursos criados ao terminar de usá-los.
Treinar o HuggingFace GPT2 com Cloud TPUs
Abra uma janela do Cloud Shell.
Crie uma variável de ambiente para o ID do projeto.
export PROJECT_ID=your-project-id
Configure a Google Cloud CLI para usar o projeto do Google Cloud em que você quer criar uma Cloud TPU.
gcloud config set project ${PROJECT_ID}
Na primeira vez que você executar esse comando em uma nova VM do Cloud Shell, uma A página
Authorize Cloud Shell
é exibida. Clique emAuthorize
no parte inferior da página para permitir quegcloud
faça chamadas de API do Google Cloud com suas credenciais do Google Cloud.Crie uma conta de serviço para o projeto da Cloud TPU.
As contas de serviço permitem que o serviço do Cloud TPU acesse outros Google Cloud serviços.
$ gcloud beta services identity create --service tpu.googleapis.com --project $PROJECT_ID
O comando retorna uma conta de serviço do Cloud TPU com o formato a seguir:
service-PROJECT_NUMBER@cloud-tpu.iam.gserviceaccount.com
Criar uma Cloud TPU
Crie uma VM do Cloud TPU usando o comando
gcloud
. O comando a seguir cria uma TPUv4-8
. Também é possível criar uma fração de pod de TPU definindo a flag--accelerator-type
como um tipo de fração de pod, por exemplo,v4-32
.$ gcloud compute tpus tpu-vm create hf-gpt2 \ --zone=us-central2-b \ --accelerator-type=v4-8 \ --version=tpu-vm-tf-2.17.0-pjrt
Descrições de sinalizações de comando
zone
- A zona em que você planeja criar a Cloud TPU.
accelerator-type
- O tipo de acelerador especifica a versão e o tamanho da Cloud TPU que você quer criar. Para mais informações sobre os tipos de aceleradores compatíveis com cada versão de TPU, consulte Versões de TPU.
version
- A versão do software do Cloud TPU.
Conecte-se à VM da TPU usando SSH. Quando você está conectado à VM, o prompt do shell muda de
username@projectname
parausername@vm-name
:gcloud compute tpus tpu-vm ssh hf-gpt2 --zone=us-central2-b
Instalar dependências
Clone o repositório HuggingFace Transformers:
(vm)$ cd /tmp (vm)$ git clone https://github.com/huggingface/transformers.git (vm)$ cd transformers
Instale as dependências:
(vm)$ pip install . (vm)$ pip install -r examples/tensorflow/_tests_requirements.txt (vm)$ cd /tmp/transformers/examples/tensorflow/language-modeling (vm)$ pip install -r requirements.txt
Crie um diretório temporário:
(vm)$ mkdir /tmp/gpt2-wikitext
Ao criar sua TPU, se você definir o parâmetro
--version
como uma versão que termina com-pjrt
, defina as seguintes variáveis de ambiente para ativar o ambiente de execução PJRT:(vm)$ export NEXT_PLUGGABLE_DEVICE_USE_C_API=true (vm)$ export TF_PLUGGABLE_DEVICE_LIBRARY_PATH=/lib/libtpu.so
Executar script de treinamento
(vm)$ python3 run_clm.py \ --model_name_or_path distilgpt2 \ --max_train_samples 1000 \ --max_eval_samples 100 \ --num_train_epochs 1 \ --output_dir /tmp/gpt2-wikitext \ --dataset_name wikitext \ --dataset_config_name wikitext-103-raw-v1
Descrições de sinalizações de comando
model_name_or_path
- O nome do modelo a ser treinado.
max_train_samples
- O número máximo de amostras a serem usadas no treinamento.
max_eval_samples
- O número máximo de amostras a serem usadas para avaliação.
num_train_epochs
- O número de períodos para treinar o modelo.
output_dir
- O diretório de saída do script de treinamento.
dataset_name
- O nome do conjunto de dados a ser usado.
dataset_config_name
- O nome da configuração do conjunto de dados
Quando o treinamento terminar, uma mensagem semelhante a esta será exibida:
125/125 [============================] - ETA: 0s - loss: 3.61762023-07-07 21:38:17.902850: W tensorflow/core/framework/dataset.cc:956] Input of GeneratorDatasetOp::Dataset will not be optimized because the dataset does not implement the AsGraphDefInternal() method needed to apply optimizations. 125/125 [============================] - 763s 6s/step - loss: 3.6176 - val_loss: 3.4233 Configuration saved in /tmp/gpt2-wikitext/config.json Configuration saved in /tmp/gpt2-wikitext/generation_config.json Model weights saved in /tmp/gpt2-wikitext/tf_model.h5 D0707 21:38:45.640973681 12027 init.cc:191] grpc_shutdown starts clean-up now
Limpar
Desconecte-se da instância da VM da TPU:
(vm)$ exit
Agora, o prompt precisa ser
username@projectname
, mostrando que você está no Cloud Shell.Exclua o recurso da TPU.
$ gcloud compute tpus tpu-vm delete hf-gpt2 \ --zone=us-central2-b
A seguir
Teste um dos outros modelos de referência compatíveis.