Se você não conhece o Cloud TPU, consulte os guias de início da TPU.
Neste tutorial, mostramos como treinar um modelo do Transformer no Cloud TPU. O Transformer é uma arquitetura de rede neural que resolve problemas de sequência usando mecanismos de atenção. Ao contrário dos modelos neurais tradicionais seq2seq, o Transformer não envolve conexões recorrentes. O mecanismo de atenção aprende as dependências entre tokens em duas sequências. Como os pesos de atenção se aplicam a todos os tokens nas sequências, o modelo Transformer pode facilmente capturar dependências de longa distância.
A estrutura geral do Transformer segue o padrão de codificador-decodificador. O codificador usa a atenção própria para calcular uma representação da sequência de entrada. O decodificador gera a sequência de saída um token por vez, considerando a saída do codificador e os tokens anteriores do decodificador-saída como entradas.
O modelo também aplica embeddings aos tokens de entrada e saída e adiciona uma codificação posicional constante. A codificação posicional adiciona informações sobre a posição de cada token.
Objetivos
- Criar um bucket do Cloud Storage para armazenar o conjunto de dados e a saída do modelo.
- Faça o download e pré-processe o conjunto de dados usado para treinar o modelo.
- Executar o job de treinamento.
- Verificar os resultados da saída.
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.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Verifique se a cobrança está ativada para o seu projeto do Google Cloud.
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 com um único dispositivo Cloud TPU
.Esta seção fornece informações sobre como configurar um bucket do Cloud Storage e uma VM TPU para treinamento em um único dispositivo.
Abra uma janela do Cloud Shell.
Crie uma variável de ambiente para o ID do projeto.
export PROJECT_ID=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, será exibida uma página
Authorize Cloud Shell
. Clique emAuthorize
na parte de baixo da página para permitir quegcloud
faça chamadas de API do Google Cloud com suas credenciais.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
Crie um bucket do Cloud Storage usando o seguinte comando:
$ gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=us-central2
Esse bucket do Cloud Storage armazena os dados usados para treinar o modelo e os resultados do treinamento. O comando
gcloud
usado neste tutorial para configurar a TPU também configura permissões padrão para a conta de serviço do Cloud TPU configurada na etapa anterior. Caso queira permissões mais específicas, consulte as permissões de nível de acesso.
Treinar o modelo Transformer em um único Cloud TPU
Inicie uma VM do Cloud TPU usando o comando
gcloud
.$ gcloud compute tpus tpu-vm create transformer-tutorial \ --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 transformer-tutorial --zone=us-central2-b
Exporte variáveis de ambiente.
(vm)$ export STORAGE_BUCKET=gs://bucket-name (vm)$ export SENTENCEPIECE_MODEL=sentencepiece (vm)$ export SENTENCEPIECE_MODEL_PATH=${STORAGE_BUCKET}/${SENTENCEPIECE_MODEL}.model (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds (vm)$ export PARAM_SET=big (vm)$ export TPU_NAME=local (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET} (vm)$ export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH"
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
Instale os requisitos do TensorFlow.
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Fazer o download e pré-processar o conjunto de dados
(vm)$ python3 -c "import tensorflow_datasets as tfds; tfds.load('wmt14_translate/de-en', split='train+validation', shuffle_files=True, download=True)" (vm)$ python3 /usr/share/tpu/models/official/nlp/data/train_sentencepiece.py --output_model_path=${SENTENCEPIECE_MODEL}
Copie o conjunto de dados para o bucket do Cloud Storage
(vm)$ gcloud storage cp ${SENTENCEPIECE_MODEL}.model ${STORAGE_BUCKET} (vm)$ gcloud storage cp ${SENTENCEPIECE_MODEL}.vocab ${STORAGE_BUCKET} (vm)$ gcloud storage cp tensorflow_datasets/wmt14_translate ${TFDS_DIR}/wmt14_translate --recursive
Navegue até o diretório de treinamento
(vm)$ cd /usr/share/tpu/models/
Executar o script de treinamento
(vm)$ python3 official/nlp/train.py \ --tpu=${TPU_NAME} \ --experiment=wmt_transformer/large \ --mode=train_and_eval \ --model_dir=${MODEL_DIR} \ --params_override="runtime.distribution_strategy=tpu, task.train_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.sentencepiece_model_path=${SENTENCEPIECE_MODEL_PATH}, trainer.train_steps=10000, trainer.validation_interval=10000"
Descrições de sinalizações de comando
tpu
- O nome da Cloud TPU. Para isso, especifique
a variável de ambiente (
TPU_NAME
). experiment
- O modelo a ser treinado.
mode
- O modo de execução do script.
model_dir
- O bucket do Cloud Storage em que os checkpoints e os resumos são armazenados durante o treinamento. Use uma pasta atual para carregar os checkpoints gerados anteriormente criados em uma TPU do mesmo tamanho e versão do TensorFlow.
params_override
- Definir os parâmetros do modelo.
Por padrão, o modelo será avaliado após cada 10.000 etapas. Você pode aumentar o número de etapas de treinamento ou especificar a frequência de execução de avaliações definindo estes parâmetros:
train.train_steps
: o número total de etapas de treinamento a serem executadas.trainer.validation_interval
: o número de etapas de treinamento a serem executadas entre as avaliações.
O treinamento e a avaliação levam aproximadamente 20 minutos em um Cloud TPU v4-8. Quando o treinamento e a avaliação forem concluídos, uma mensagem semelhante a esta será exibida:
I0208 20:57:19.309512 140039467895872 controller.py:310] eval | step: 10000 | eval time: 69.2 sec | output: {'bleu_score': 19.204771518707275, 'sacrebleu_score': 18.307039308307356, 'validation_loss': 2.0654342} eval | step: 10000 | eval time: 69.2 sec | output: {'bleu_score': 19.204771518707275, 'sacrebleu_score': 18.307039308307356, 'validation_loss': 2.0654342}
Você concluiu o treinamento para dispositivos únicos. Use as etapas a seguir para excluir os recursos da TPU de dispositivo único.
Desconecte-se da instância do Compute Engine:
(vm)$ exit
Agora, o prompt será
username@projectname
, mostrando que você está no Cloud Shell.Exclua o recurso da TPU.
$ gcloud compute tpus tpu-vm delete transformer-tutorial \ --zone=us-central2-b
Descrições de sinalizações de comando
zone
- A zona onde o Cloud TPU residia.
Neste ponto, é possível concluir este tutorial e limpar ou continuar executando o modelo nos Pods do Cloud TPU.
Escalone seu modelo com os pods da Cloud TPU
O treinamento do modelo em pods do Cloud TPU pode exigir algumas mudanças no script de treinamento. Para mais informações, consulte Treinamento em pods de TPU.
Treinamento do pod de TPU
Abra uma janela do Cloud Shell.
Crie uma variável para o ID do projeto.
export PROJECT_ID=project-id
Configure a CLI do Google Cloud para usar o projeto 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, será exibida uma página
Authorize Cloud Shell
. Clique emAuthorize
na parte de baixo da página. para permitir quegcloud
faça chamadas de API com suas credenciais.Crie uma conta de serviço para o projeto da Cloud TPU.
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
Crie um bucket do Cloud Storage usando o comando a seguir ou use um bucket criado anteriormente para o projeto:
gcloud storage buckets create gs://bucket-name --project=${PROJECT_ID} --location=us-central1
Esse bucket do Cloud Storage armazena os dados usados para treinar o modelo e os resultados do treinamento. O comando
gcloud
usado neste tutorial configura permissões padrão para a conta de serviço da Cloud TPU que você configurou no etapa anterior. Para mais informações sobre permissões mais específicas, consulte permissões de nível de acesso.
Iniciar os recursos de VM da TPU
Inicie um pod de VM de TPU usando o comando
gcloud
. Isso especifica um pod v4-32. Para outras opções de pods, consulte Tipos de TPU página de tipos de TPU disponíveis.$ gcloud compute tpus tpu-vm create transformer-tutorial \ --zone=us-central2-b \ --accelerator-type=v3-32 \ --version=tpu-vm-tf-2.17.0-pod-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 do 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 à instância do Compute Engine usando SSH. Quando você estiver conectado para a VM, o prompt do shell muda de
username@projectname
parausername@vm-name
:gcloud compute tpus tpu-vm ssh transformer-tutorial --zone=us-central2-b
Instale os requisitos do TensorFlow.
(vm)$ pip3 install -r /usr/share/tpu/models/official/requirements.txt
Configurar e iniciar o treinamento do pod
Exporte as variáveis de configuração do Cloud TPU:
(vm)$ export PYTHONPATH="/usr/share/tpu/models:$PYTHONPATH" (vm)$ export STORAGE_BUCKET=gs://bucket-name (vm)$ export SENTENCEPIECE_MODEL=sentencepiece (vm)$ export SENTENCEPIECE_MODEL_PATH=${STORAGE_BUCKET}/${SENTENCEPIECE_MODEL}.model (vm)$ export TFDS_DIR=${STORAGE_BUCKET}/tfds (vm)$ export TPU_NAME=transformer-tutorial (vm)$ export PARAM_SET=big (vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer/model_${PARAM_SET} (vm)$ export TPU_LOAD_LIBRARY=0
Faça o download do conjunto de dados
(vm)$ python3 -c "import tensorflow_datasets as tfds; tfds.load('wmt14_translate/de-en', split='train+validation', shuffle_files=True, download=True)" (vm)$ python3 /usr/share/tpu/models/official/nlp/data/train_sentencepiece.py --output_model_path=${SENTENCEPIECE_MODEL}
Copie o conjunto de dados para o bucket do Cloud Storage
(vm)$ gcloud storage cp ${SENTENCEPIECE_MODEL}.model ${STORAGE_BUCKET} (vm)$ gcloud storage cp ${SENTENCEPIECE_MODEL}.vocab ${STORAGE_BUCKET} (vm)$ gcloud storage cp tensorflow_datasets/wmt14_translate ${TFDS_DIR}/wmt14_translate --recursive
Mude para o diretório de treinamento:
(vm)$ cd /usr/share/tpu/models/
Execute o script de treinamento:
(vm)$ python3 official/nlp/train.py \ --tpu=${TPU_NAME} \ --experiment=wmt_transformer/large \ --mode=train_and_eval \ --model_dir=${MODEL_DIR} \ --params_override="runtime.distribution_strategy=tpu, task.train_data.tfds_data_dir=${TFDS_DIR}, task.validation_data.tfds_data_dir=${TFDS_DIR}, task.sentencepiece_model_path=${SENTENCEPIECE_MODEL_PATH}, trainer.train_steps=10000, trainer.validation_interval=10000"
Descrições de sinalizações de comando
tpu
- O nome da Cloud TPU. Para isso, especifique
a variável de ambiente (
TPU_NAME
). experiment
- O modelo a ser treinado.
mode
- O modo de execução do script.
model_dir
- O bucket do Cloud Storage em que os checkpoints e os resumos são armazenados durante o treinamento. Use uma pasta atual para carregar os checkpoints gerados anteriormente criados em uma TPU do mesmo tamanho e versão do TensorFlow.
params_override
- Defina os parâmetros do modelo.
Por padrão, o modelo será avaliado a cada 10.000 etapas. Para treinar
para convergência, mude train_steps
para 200.000. Você pode aumentar o número de etapas de treinamento ou especificar com que frequência executar avaliações definindo estes parâmetros:
trainer.train_steps
: define o número total de etapas de treinamento a serem executadas.trainer.validation_interval
: define o número de etapas de treinamento a serem executadas entre as avaliações.
O treinamento e a avaliação levam aproximadamente 14 minutos em um Cloud TPU v4-32. Quando o treinamento e a avaliação forem concluídos, mensagens semelhantes às seguintes serão exibidas:
I0209 22:19:49.143219 139751309618240 controller.py:310] eval | step: 10000 | eval time: 73.6 sec | output: {'bleu_score': 19.401752948760986, 'sacrebleu_score': 18.442741330886378, 'validation_loss': 2.0558002} eval | step: 10000 | eval time: 73.6 sec | output: {'bleu_score': 19.401752948760986, 'sacrebleu_score': 18.442741330886378, 'validation_loss': 2.0558002}
Esse script de treinamento é treinado por 20.000 etapas e executa a avaliação a cada 2.000 etapas. Esse treinamento e avaliação específicos levam aproximadamente oito minutos em um pod do Cloud TPU v3-32. Quando o treinamento e a avaliação forem concluídos, uma mensagem semelhante a esta será exibida:
INFO:tensorflow:Writing to file /tmp/tmpdmlanxcf I0218 21:09:19.100718 140509661046592 translate.py:184] Writing to file /tmp/tmpdmlanxcf I0218 21:09:28.043537 140509661046592 transformer_main.py:118] Bleu score (uncased): 1.799112930893898 I0218 21:09:28.043911 140509661046592 transformer_main.py:119] Bleu score (cased): 1.730366237461567
Para treinar para a convergência, altere train_steps
para 200.000. Você
pode aumentar o número de etapas de treinamento ou especificar com que frequência executar
avaliações definindo estes parâmetros:
--train_steps
: define o número total de etapas de treinamento a serem executadas.--steps_between_evals
: número de etapas de treinamento a serem executadas entre as avaliações.
Quando o treinamento e a avaliação forem concluídos, uma mensagem semelhante à seguinte será exibida:
0509 00:27:59.984464 140553148962624 translate.py:184] Writing to file /tmp/tmp_rk3m8jp I0509 00:28:11.189308 140553148962624 transformer_main.py:119] Bleu score (uncased): 1.3239131309092045 I0509 00:28:11.189623 140553148962624 transformer_main.py:120] Bleu score (cased): 1.2855342589318752
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.
Desconecte-se da instância do Compute Engine, caso ainda não tenha feito isso:
(vm)$ exit
Agora, o prompt precisa ser
username@projectname
, mostrando que você está no Cloud Shell.Exclua os recursos do Cloud TPU e do Compute Engine.
$ gcloud compute tpus tpu-vm delete transformer-tutorial \ --zone=us-central2-b
Execute a CLI gcloud conforme mostrado, substituindo bucket-name pelo nome do bucket do Cloud Storage criado para este tutorial:
$ gcloud storage rm gs://bucket-name --recursive
A seguir
Geralmente, os tutoriais do Cloud TPU do TensorFlow treinam o modelo usando um conjunto de dados de amostra. Os resultados deste treinamento não podem ser usados para inferência. Para usar um modelo para inferência, é possível treinar os dados em uma conjunto de dados ou seu próprio conjunto de dados. Os modelos do TensorFlow treinados em Cloud TPUs geralmente exigem que os conjuntos de dados estejam no formato TFRecord.
Você pode usar a ferramenta de conversão do conjunto de dados sample para converter uma imagem conjunto de dados de classificação no formato TFRecord. Se você não estiver usando uma imagem modelo de classificação, você terá que converter seu conjunto de dados para Formato do TFRecord você mesmo. Para mais informações, consulte TFRecord e tf.Example
Ajuste de hiperparâmetros
Para melhorar o desempenho do modelo com o conjunto de dados, é possível ajustar a e ajustar os hiperparâmetros. Encontre informações sobre hiperparâmetros comuns a todos os modelos compatíveis com a TPU no GitHub. As informações sobre hiperparâmetros específicos do modelo podem ser encontradas na fonte para cada um modelo de machine learning. Para mais informações sobre o ajuste de hiperparâmetros, consulte Visão geral do ajuste de hiperparâmetros e Ajustar hiperparâmetros.
Inferência
Depois de treinar seu modelo, você pode usá-lo para inferência (também chamado de previsão). Você pode usar a ferramenta de conversão de inferência da Cloud TPU para preparar e otimizar um modelo do TensorFlow para inferência na Cloud TPU v5e. Para mais informações sobre inferência no Cloud TPU v5e, consulte Inferência do Cloud TPU v5e introdução.