Esta página foi traduzida pela API Cloud Translation.
Switch to English

Ajuste do BERT com a Cloud TPU: tarefas de classificação de frases e pares de frases

Neste tutorial, mostraremos como treinar as representações de codificador bidirecional do modelo Transformers (BERT) no Cloud TPU.

O BERT é um método de representação de linguagem pré-treinamento. Pré-treinamento refere-se a como o BERT é primeiro treinado com base em uma grande fonte de texto, como a Wikipedia. Os resultados do treinamento podem ser aplicados a outras tarefas de processamento de linguagem natural (PLN), como sistema de perguntas e respostas e análise de sentimento. Com o BERT e o Cloud TPU, é possível treinar vários modelos de PLN em cerca de 30 minutos.

Para mais informações sobre o BERT, consulte os seguintes recursos:

Objetivos

  • Criar um bucket do Cloud Storage para armazenar o conjunto de dados e a saída do modelo.
  • Clonar o repositório BERT e outros arquivos necessários.
  • Executar o job de treinamento.
  • Verificar os resultados da saída.

Custos

Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:

  • Compute Engine
  • Cloud TPU
  • Cloud Storage

Use a calculadora de preços para gerar uma estimativa de custos baseada na projeção de uso. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Antes de começar

Nesta seção, você verá como configurar o bucket do Cloud Storage e a VM do Compute Engine.

  1. Abra uma janela do Cloud Shell.

    Abrir o Cloud Shell

  2. Crie uma variável para o ID do seu projeto.

    export PROJECT_ID=project-id
    
  3. Configure a ferramenta de linha de comando gcloud para usar o projeto em que a Cloud TPU será criada.

    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 em Authorize na parte inferior da página para permitir que gcloud faça chamadas de API do GCP com suas credenciais.

  4. 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
    

  5. Crie um bucket do Cloud Storage usando o seguinte comando:

    gsutil mb -p ${PROJECT_ID} -c standard -l us-central1 -b on gs://bucket-name
    

    Esse bucket do Cloud Storage armazena os dados usados para treinar o modelo e os resultados do treinamento.

    Para que a Cloud TPU leia e grave no bucket de armazenamento, a conta de serviço do seu projeto precisa de permissões de leitura/gravação ou administrador. Consulte a seção sobre buckets de armazenamento para ver e definir essas permissões.

  6. Use o comando gcloud compute tpus execution-groups para iniciar uma VM do Compute Engine e a Cloud TPU.

    $ gcloud compute tpus execution-groups create \
     --name=bert-tutorial \
     --zone=us-central1-b \
     --tf-version=1.15.5 \
     --machine-type=n1-standard-8 \
     --accelerator-type=v3-8
    

    Descrições de sinalizações de comando

    name
    O nome da Cloud TPU a ser criada.
    zone
    A zona em que você planeja criar a Cloud TPU.
    tf-version
    A versão do gcloud do Tensorflow é instalada na VM.
    machine-type
    O tipo de máquina da VM do Compute Engine a ser criado.
    accelerator-type
    O tipo do Cloud TPU a ser criado.

    Para mais informações sobre o comando gcloud, consulte a Referência do gcloud.

  7. A configuração especificada aparecerá. Digite y para aprovar ou n para cancelar.

    Quando o comando gcloud terminar a execução, verifique se o prompt do shell foi alterado de username@project para username@vm-name. Essa alteração mostra que você fez login na VM do Compute Engine.

    gcloud compute ssh bert-tutorial --zone=us-central1-b
    

Ao seguir essas instruções, execute cada comando iniciado por (vm)$ na janela de sessão da VM.

  1. Definir algumas variáveis de ambiente

    (vm)$ export STORAGE_BUCKET=gs://bucket-name
    
    (vm)$ export TPU_NAME=bert-tutorial
    (vm)$ export PYTHONPATH="${PYTHONPATH}:/usr/share/tpu/models"
    (vm)$ export BERT_BASE_DIR=gs://cloud-tpu-checkpoints/bert/uncased_L-12_H-768_A-12
    (vm)$ export GLUE_DIR=$HOME/glue_data
    (vm)$ export TASK_NAME=MRPC
    

Clonar o repositório BERT

Na máquina virtual (VM) do Compute Engine, clone o repositório BERT.

(vm)$ git clone https://github.com/google-research/bert

Fazer o download de download_glue_data.py

Este tutorial usa o comparativo de mercado General Language Understanding Evaluation (GLUE) para avaliar e analisar o desempenho do modelo. Para usar esse comparativo de mercado, faça o download do script download_glue_data.py usando o seguinte comando git clone:

(vm)$ git clone https://gist.github.com/7f702beb69199612a039004f42c9982e.git download_glue_data

Fazer o download dos dados do GLUE

Em seguida, execute download_glue_data.py na VM do Compute Engine.

(vm)$ python3 download_glue_data/download_glue_data.py --data_dir $HOME/glue_data --tasks ${TASK_NAME}

Treine o modelo

Na sua VM do Compute Engine, execute o seguinte comando.

python3 ./bert/run_classifier.py \
--task_name=${TASK_NAME} \
--do_train=true \
--do_eval=true \
--data_dir=${GLUE_DIR}/${TASK_NAME} \
--vocab_file=${BERT_BASE_DIR}/vocab.txt \
--bert_config_file=${BERT_BASE_DIR}/bert_config.json \
--init_checkpoint=${BERT_BASE_DIR}/bert_model.ckpt \
--max_seq_length=128 \
--train_batch_size=32 \
--learning_rate=2e-5 \
--num_train_epochs=3.0 \
--output_dir=${STORAGE_BUCKET}/${TASK_NAME}-output/ \
--use_tpu=True \
--tpu_name=${TPU_NAME}

Descrições de sinalizações de comando

task_name
O nome da tarefa. Neste tutorial, usaremos a tarefa Microsoft Research Paraphrase Corpus (MSRPC).
do_train
Executar treinamento de modelos.
do_eval
Realize a avaliação do modelo.
data_dir
O caminho do Cloud Storage em que os dados de treinamento são armazenados.
vocab_file
O arquivo de vocabulário BERT.
bert_config_file
O arquivo de configuração BERT.
init_checkpoint
O caminho para o arquivo json contém o ponto de controle inicial do modelo BERT pré-treinado.
max_seq_length
O tamanho máximo da sequência de texto. O BERT limita o tamanho máximo de uma sequência de texto tokenizada para 512. Você pode definir qualquer comprimento de sequência igual ou abaixo desse valor.
train_batch_size
O tamanho do lote de treinamento.
learning_rate
A taxa de aprendizado.
num_train_epochs
O número de épocas para treinar o modelo.
output_dir
O diretório de saída do script de treinamento.
use_tpu
Defina como true para treinar em um Cloud TPU.
tpu_name
O nome do Cloud TPU a ser usado para treinamento.

Verificar os resultados

O treinamento deve levar menos de cinco minutos. Quando o treinamento for concluído, você verá resultados semelhantes aos seguintes:

I1109 21:55:34.984220 139985090225920 run_classifier.py:923] ***** Eval results *****
INFO:tensorflow:  eval_accuracy = 0.8455882
I1109 21:55:34.984345 139985090225920 run_classifier.py:925]   eval_accuracy = 0.8455882
INFO:tensorflow:  eval_loss = 0.77791333
I1109 21:55:34.984572 139985090225920 run_classifier.py:925]   eval_loss = 0.77791333
INFO:tensorflow:  global_step = 343
I1109 21:55:34.984693 139985090225920 run_classifier.py:925]   global_step = 343
INFO:tensorflow:  loss = 0.88203496
I1109 21:55:34.984774 139985090225920 run_classifier.py:925]   loss = 0.88203496

Limpeza

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.

  1. Encerre a conexão com a VM do Compute Engine:

    (vm)$ exit
    

    Agora, o prompt será user@projectname, mostrando que você está no Cloud Shell.

  2. No Cloud Shell, use o comando gcloud compute tpus execution-groups mostrado abaixo para excluir a VM do Compute Engine e a Cloud TPU.

    $ gcloud compute tpus execution-groups delete bert-tutorial \
      --zone=us-central1-b
    
  3. Verifique se os recursos foram excluídos executando gcloud compute tpus execution-groups list. 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=us-central1-b
    
       NAME             STATUS
    
  4. Exclua o bucket do Cloud Storage usando gsutil, conforme mostrado abaixo. Substitua bucket-name pelo nome do seu bucket no Cloud Storage.

    $ gsutil rm -r gs://bucket-name
    

A seguir

Neste tutorial, você treinou o modelo BERT usando um conjunto de dados de amostra. Os resultados deste treinamento (na maioria dos casos) não podem ser usados para inferência. Para usar um modelo para inferência, é possível treinar os dados em um conjunto de dados disponível publicamente ou no seu próprio conjunto de dados. Os modelos treinados nas Cloud TPUs 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 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 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 no código-fonte de cada modelo. Para mais informações 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 em nuvem para desenvolver, treinar e implantar modelos de machine learning. Depois que um modelo é implantado, use o serviço do AI Platform Prediction.