Neste tutorial, mostramos como treinar o modelo do Transformer (em inglês), apresentado no artigo Attention Is All You Need, usando o Tensor2Tensor na Cloud TPU.
Descrição do modelo
O modelo do Transformer usa pilhas de camadas de autoatenção e de encaminhamento de feed para processar entradas sequenciais como texto. Ele é compatível com as variantes a seguir:
transformer
: somente decodificador, para modelagem de sequência única. Exemplo de caso de uso: modelagem de linguagem.transformer
: codificador e decodificador, para modelagem de sequência a sequência. Exemplo de caso de uso: tradução.transformer_encoder
: somente codificador, para a sequência na modelagem de classe. Exemplo de caso de uso: classificação de sentimento.
O Transformer é apenas um dos modelos na biblioteca do Tensor2Tensor. Tensor2Tensor (T2T) é uma biblioteca de modelos de aprendizado profundo e conjuntos de dados, além de um conjunto de scripts que permite treinar os modelos, fazer o download e preparar os dados.
Objetivos
- Gerar o conjunto de dados de treinamento
- Treinar um modelo de linguagem em um único Cloud TPU ou um pod do Cloud TPU
- Treinar um modelo de tradução de inglês para alemão em um único Cloud TPU
- Treinar um classificador de sentimento em um único Cloud TPU
- Limpar os recursos do Cloud TPU
Custos
Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:
- Compute Engine
- Cloud TPU
- Cloud Storage
Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços.
Antes de começar
Se você planeja treinar em uma fração de pod de TPU, leia Treinamento em pods de TPU que explica as considerações especiais ao treinar em uma fração de pod.
Antes de começar o tutorial, siga as etapas abaixo para verificar se o projeto do Google Cloud foi configurado corretamente.
Nesta seção, você verá como configurar o bucket do Cloud Storage e a VM do Compute Engine.
Abra uma janela do Cloud Shell.
Crie uma variável para o ID do seu projeto.
export PROJECT_ID=project-id
Configure a CLI do Google Cloud para usar o projeto em que você quer criar a 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 inferior da página para permitir quegcloud
faça chamadas de API do GCP 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 seguinte comando:
gsutil mb -p ${PROJECT_ID} -c standard -l europe-west4 -b on gs://bucket-name
Esse bucket do Cloud Storage armazena os dados usados para treinar o modelo e os resultados do treinamento. A ferramenta
gcloud compute tpus execution-groups
usada neste tutorial configura permissões padrão para a conta de serviço da Cloud TPU. Caso queira permissões mais específicas, consulte as permissões de nível de acesso.O local do bucket precisa estar na mesma região da máquina virtual (VM) e do nó da TPU. As VMs e os nós da TPU estão localizados em zonas específicas, que são subdivisões dentro de uma região.
Inicie uma VM do Compute Engine usando o comando
gcloud
.$ gcloud compute tpus execution-groups create \ --vm-only \ --name=transformer-tutorial \ --zone=europe-west4-a \ --disk-size=300 \ --machine-type=n1-standard-8 \ --tf-version=1.15.5
Descrições de sinalizações de comando
vm-only
- Crie somente uma VM. Por padrão, o comando
gcloud compute tpus execution-groups
cria uma VM e uma Cloud TPU. name
- O nome do Cloud TPU a ser criado.
zone
- A zona em que você planeja criar a Cloud TPU.
disk-size
- O tamanho do disco rígido em GB da VM criada pelo comando
gcloud compute tpus execution-groups
. machine-type
- O tipo de máquina da VM do Compute Engine a ser criada.
tf-version
- A versão
gcloud compute tpus execution-groups
do Tensorflow é instalada na VM.
Para mais informações sobre o comando
gcloud
, consulte a referência da gcloud.A configuração especificada aparecerá. Digite y para aprovar ou n para cancelar.
Quando o comando
gcloud compute tpus execution-groups
terminar a execução, verifique se o prompt do shell foi alterado deusername@projectname
parausername@vm-name
. Essa alteração mostra que você fez login na VM do Compute Engine.gcloud compute ssh transformer-tutorial --zone=europe-west4-a
Ao continuar essas instruções, execute cada comando que começa com
(vm)$
na instância do Compute Engine.
Na VM do Compute Engine:
Crie as variáveis de ambiente a seguir:
(vm)$ export STORAGE_BUCKET=gs://bucket-name
(vm)$ export MODEL_DIR=${STORAGE_BUCKET}/transformer (vm)$ export DATA_DIR=${STORAGE_BUCKET}/data (vm)$ export TMP_DIR=${HOME}/t2t_tmp
Crie um diretório para armazenar arquivos temporários:
(vm)$ mkdir ${TMP_DIR}
Adicione o caminho aos scripts
tensor2tensor
usados para processar os dados do modelo:(vm)$ export PATH=.local/bin:${PATH}
Treinar um modelo de idioma em um único Cloud TPU
Gere o conjunto de dados de treinamento para o modelo de idioma.
(vm)$ t2t-datagen --problem=languagemodel_lm1b32k_packed \ --data_dir=${DATA_DIR} \ --tmp_dir=${TMP_DIR}
Descrições de sinalizações de comando
problem
- O nome do problema.
data_dir
- O caminho do Cloud Storage da entrada de treinamento.
tmp_dir
- O diretório de armazenamento temporário.
Execute o comando a seguir para criar o recurso do Cloud TPU.
(vm)$ gcloud compute tpus execution-groups create --tpu-only \ --zone=europe-west4-a \ --tf-version=1.15.5 \ --name=transformer-tutorial
Descrições de sinalizações de comando
tpu-only
- Crie apenas uma Cloud TPU. Por padrão, o comando
gcloud compute tpus execution-groups
cria uma VM e uma Cloud TPU. zone
- A zona em que você planeja criar a Cloud TPU. Ela precisa ser a mesma zona usada para a VM do Compute Engine. Por exemplo,
europe-west4-a
. tf-version
- A versão
ctpu
do Tensorflow é instalada na VM. name
- O nome do Cloud TPU a ser criado.
Defina uma variável de ambiente para o nome da TPU.
(vm)$ export TPU_NAME=transformer-tutorial
Execute o script de treinamento.
(vm)$ t2t-trainer \ --model=transformer \ --hparams_set=transformer_tpu \ --problem=languagemodel_lm1b32k_packed \ --eval_steps=3 \ --data_dir=${DATA_DIR} \ --output_dir=${MODEL_DIR}/language_lm1b32k \ --use_tpu=True \ --cloud_tpu_name=${TPU_NAME} \ --train_steps=10
Descrições de sinalizações de comando
model
- O modelo a ser treinado.
hparams_set
- Os hiperparâmetros a serem usados durante o treinamento.
problem
- O nome do problema.
eval-steps
- O número de etapas a serem avaliadas.
data_dir
- O caminho do Cloud Storage em que os dados de treinamento estão armazenados.
output_dir
- Diretório de saída base para execução.
use_tpu
- Defina como "true" para usar um Cloud TPU. Caso contrário, defina como "false".
cloud_tpu_name
- O nome do Cloud TPU a ser usado para treinamento.
train_steps
- O número de etapas de treinamento.
O comando acima executa 10 etapas de treinamento e três de avaliação. A execução leva aproximadamente 5 minutos em um nó de TPU v3-8. Para deixar esse modelo mais preciso, é necessário aumentar o número de passos de treinamento ajustando a sinalização
--train_steps
. É recomendado treinar o modelo usando pelo menos 40 mil etapas. O modelo costuma atingir qualidade máxima após aproximadamente 250 mil etapas.Exclua o recurso do Cloud TPU que você criou.
$ gcloud compute tpus execution-groups delete transformer-tutorial \ --zone=europe-west4-a \ --tpu-only
Treinar um modelo de linguagem em um pod do Cloud TPU
Execute o comando
gcloud
, usando o parâmetroaccelerator-type
para especificar a fração de pod a ser usada. Por exemplo, o comando a seguir usa uma fração de pod v2-32.(vm)$ gcloud compute tpus execution-groups create \ --tpu-only \ --accelerator-type=v2-32 \ --name=transformer-tutorial-pod \ --zone=europe-west4-a \ --tf-version=1.15.5
Descrições de sinalizações de comando
tpu-only
- Cria a Cloud TPU sem criar uma VM. Por padrão, o
comando
gcloud compute tpus execution-groups
cria uma VM e uma Cloud TPU. accelerator-type
- O tipo da Cloud TPU a ser criada.
name
- O nome do Cloud TPU a ser criado.
zone
- A zona em que você planeja criar a Cloud TPU.
tf-version
- A versão
ctpu
do Tensorflow é instalada na VM.
Defina uma variável de ambiente para o nome da nova TPU.
(vm)$ export TPU_NAME=transformer-tutorial-pod
Execute o script de treinamento.
(vm)$ t2t-trainer \ --model=transformer \ --hparams_set=transformer_tpu \ --problem=languagemodel_lm1b32k_packed \ --eval_steps=3 \ --data_dir=${DATA_DIR} \ --output_dir=${MODEL_DIR}/language_lm1b32k_pod \ --use_tpu=True \ --cloud_tpu_name=${TPU_NAME} \ --tpu_num_shards=32 \ --schedule=train \ --train_steps=25000
Descrições de sinalizações de comando
model
- O modelo a ser treinado.
hparams_set
- Os hiperparâmetros a serem usados durante o treinamento.
problem
- O nome do problema.
eval-steps
- O número de etapas a serem avaliadas.
data_dir
- O caminho do Cloud Storage em que os dados de treinamento estão armazenados.
output_dir
- Diretório de saída base para execução.
use_tpu
- Defina como "true" para usar um Cloud TPU. Caso contrário, defina como "false".
cloud_tpu_name
- O nome do Cloud TPU a ser usado para treinamento.
tpu_num_shards
- O número de fragmentos do Cloud TPU. O valor padrão é "8".
schedule
- O método de experimento que será realizado.
train_steps
- O número de etapas para treinar o modelo.
O comando acima executa 25 mil etapas de treinamento e três de avaliação. Esse treinamento leva aproximadamente 30 minutos para ser concluído em um Cloud TPU v2-32.
É recomendado treinar o modelo usando pelo menos 40 mil etapas. O modelo costuma atingir qualidade máxima após aproximadamente 250 mil etapas.
Exclua o recurso do Cloud TPU que você criou para o treinamento.
(vm)$ gcloud compute tpus execution-groups delete transformer-tutorial \ --zone=europe-west4-a \ --tpu-only
Treinar um modelo de tradução inglês-alemão em uma única TPU
Use o script
t2t-datagen
para gerar os dados de treinamento e avaliação do modelo de tradução no bucket do Cloud Storage:(vm)$ t2t-datagen \ --problem=translate_ende_wmt32k_packed \ --data_dir=${DATA_DIR} \ --tmp_dir=${TMP_DIR}
Descrições de sinalizações de comando
problem
- O nome do problema.
data_dir
- O caminho do Cloud Storage da entrada de treinamento.
tmp_dir
- O diretório de armazenamento temporário.
Execute o comando a seguir para criar o recurso do Cloud TPU.
(vm)$ gcloud compute tpus execution-groups create --tpu-only \ --zone=europe-west4-a \ --tf-version=1.15.5 \ --name=transformer-tutorial
Descrições de sinalizações de comando
tpu-only
- Crie apenas uma Cloud TPU. Por padrão, o comando
gcloud compute tpus execution-groups
cria uma VM e uma Cloud TPU. zone
- A zona em que você planeja criar a Cloud TPU.
tf-version
- A versão
gcloud compute tpus execution-groups
do Tensorflow é instalada na VM. name
- O nome do Cloud TPU a ser criado.
Defina uma variável de ambiente para o nome da nova TPU.
(vm)$ export TPU_NAME=transformer-tutorial
Execute
t2t-trainer
para treinar e avaliar o modelo:(vm)$ t2t-trainer \ --model=transformer \ --hparams_set=transformer_tpu \ --problem=translate_ende_wmt32k_packed \ --eval_steps=3 \ --data_dir=${DATA_DIR} \ --output_dir=${MODEL_DIR}/translate_ende \ --use_tpu=True \ --cloud_tpu_name=${TPU_NAME} \ --train_steps=10
Descrições de sinalizações de comando
model
- O modelo a ser treinado.
hparams_set
- Os hiperparâmetros a serem usados durante o treinamento.
problem
- O nome do problema.
eval-steps
- O número de etapas a serem avaliadas.
data_dir
- O caminho do Cloud Storage em que os dados de treinamento estão armazenados.
output_dir
- Diretório de saída base para execução.
use_tpu
- Defina como "true" para usar um Cloud TPU. Caso contrário, defina como "false".
cloud_tpu_name
- O nome do Cloud TPU a ser usado para treinamento.
train_steps
- O número de etapas para treinar o modelo.
O comando acima executa 10 etapas de treinamento e três de avaliação. A execução leva aproximadamente 5 minutos em um nó de TPU v3-8. É possível (e recomendável) aumentar o número de etapas de treinamento ajustando a sinalização
--train_steps
. As traduções geralmente se tornam razoáveis após cerca de 40 mil etapas. O modelo costuma atingir qualidade máxima após aproximadamente 250 mil etapas.Exclua o recurso da Cloud TPU criado para treinar o modelo em um único dispositivo.
(vm)$ gcloud compute tpus execution-groups delete transformer-tutorial \ --tpu-only \ --zone=europe-west4-a
Treinar um modelo de classificador de sentimento em um único Cloud TPU
Gere o conjunto de dados para o modelo de classificador de sentimento.
(vm)$ t2t-datagen --problem=sentiment_imdb \ --data_dir=${DATA_DIR} \ --tmp_dir=${TMP_DIR}
Execute o comando a seguir para criar o recurso do Cloud TPU.
(vm)$ gcloud compute tpus execution-groups create --tpu-only \ --zone=europe-west4-a \ --tf-version=1.15.5 \ --name=transformer-tutorial
Descrições de sinalizações de comando
tpu-only
- Crie apenas uma Cloud TPU. Por padrão, o comando
gcloud compute tpus execution-groups
cria uma VM e uma Cloud TPU. zone
- A zona em que você planeja criar a Cloud TPU.
tf-version
- A versão
gcloud compute tpus execution-groups
do Tensorflow é instalada na VM. name
- O nome do Cloud TPU a ser criado.
Execute o script de treinamento.
(vm)$ t2t-trainer \ --model=transformer_encoder \ --hparams_set=transformer_tiny_tpu \ --problem=sentiment_imdb \ --eval_steps=1 \ --data_dir=${DATA_DIR} \ --output_dir=${MODEL_DIR}/sentiment_classifier \ --use_tpu=True \ --cloud_tpu_name=${TPU_NAME} \ --train_steps=10
Descrições de sinalizações de comando
model
- O modelo a ser treinado.
hparams_set
- Os hiperparâmetros a serem usados durante o treinamento.
problem
- O nome do problema.
eval-steps
- O número de etapas a serem avaliadas.
data_dir
- O caminho do Cloud Storage em que os dados de treinamento estão armazenados.
output_dir
- Diretório de saída base para execução.
use_tpu
- Defina como "true" para usar um Cloud TPU. Caso contrário, defina como "false".
cloud_tpu_name
- O nome do Cloud TPU a ser usado para treinamento.
train_steps
- O número de etapas para treinar o modelo.
O comando acima executa 10 etapas de treinamento e três de avaliação. A execução leva aproximadamente 5 minutos em um nó de TPU v3-8. Esse modelo atinge aproximadamente 85% de precisão após cerca de 2.000 etapas.
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.No Cloud Shell, execute
gcloud compute tpus execution-groups
com a sinalização --zone usada ao configurar a Cloud TPU para excluir a VM do Compute Engine e a Cloud TPU:$ gcloud compute tpus execution-groups delete transformer-tutorial \ --zone=europe-west4-a
Execute
gcloud compute tpus execution-groups list
para verificar se os recursos foram excluídos. A exclusão pode levar vários minutos. Uma resposta como esta indica que suas instâncias foram excluídas com sucesso.$ gcloud compute tpus execution-groups list \ --zone=europe-west4-a
Você verá uma lista vazia de TPUs como a seguinte:
NAME STATUS
Exclua o bucket do Cloud Storage usando
gsutil
, conforme mostrado abaixo. Substitua bucket-name pelo nome do bucket no Cloud Storage.$ gsutil rm -r gs://bucket-name
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, treine os dados em um conjunto de dados disponível publicamente ou em 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.Use a amostra da ferramenta de conversão de conjunto de dados para converter um conjunto de dados de classificação de imagem no formato TFRecord. Se você não estiver usando um modelo de classificação de imagem, converta manualmente o conjunto de dados para o TFRecord. Para saber mais, consulte TFRecord e tf.Example.
Ajuste de hiperparâmetros
Para melhorar o desempenho do modelo com o conjunto de dados, é possível ajustar os hiperparâmetros do modelo. 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 no código-fonte de cada modelo. Para saber mais sobre o ajuste de hiperparâmetros, consulte Visão geral do ajuste de hiperparâmetros, Como usar o serviço de ajuste de hiperparâmetros e Ajustar hiperparâmetros.
Inferência
Depois de treinar o modelo, é possível usá-lo para inferência (também chamada de previsão). O AI Platform é uma solução baseada na nuvem para desenvolver, treinar e implantar modelos de machine learning. Depois que um modelo é implantado, use o serviço do AI Platform Prediction.
- Conheça mais modelos Tensor2Tensor para TPU.
- Teste mais amostras do TPU.
- Conheça as ferramentas de TPU no TensorBoard.