Como ajustar o BERT com o 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 intervalo 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 Platform, 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. Os novos usuários do GCP podem estar qualificados para uma avaliação gratuita.

Antes de começar

  1. Faça login na sua Conta do Google.

    Se você ainda não tiver uma, inscreva-se.

  2. No Console do GCP, na página do seletor de projetos, selecione ou crie um projeto do GCP.

    Acesse a página do seletor de projetos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform. Saiba como confirmar que o faturamento está ativado para seu projeto.

  4. Este tutorial inclui componentes faturáveis do Google Cloud Platform. Consulte a página de preços do 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.

Como configurar os recursos

Nesta seção, você verá como configurar os recursos de armazenamento, a VM e o Cloud TPU do Cloud Storage para tutoriais.

Criar um intervalo do Cloud Storage

É preciso um intervalo do Cloud Storage para armazenar os dados usados para treinar o modelo e os resultados do treinamento. A ferramenta ctpu up usada neste tutorial configura permissões padrão para a conta de serviço do Cloud TPU. Caso queira permissões mais específicas, consulte as permissões de nível de acesso.

O local do intervalo precisa estar na mesma região da máquina virtual (VM, na sigla em inglês) e do nó do TPU. As VMs e os nós do TPU estão localizados em zonas específicas, que são subdivisões dentro de uma região.

  1. Acesse a página do Cloud Storage no Console do GCP.

    Acessar a página do Cloud Storage

  2. Crie um novo intervalo especificando as opções a seguir:

    • Um nome exclusivo à sua escolha
    • Classe de armazenamento padrão: Standard
    • Local: especifique um local para o intervalo na mesma região em que você planeja criar seu nó da TPU. Consulte Tipos e zonas de TPU para saber onde vários tipos de TPU estão disponíveis.

Usar a ferramenta ctpu

Nesta seção, mostramos o uso da ferramenta de provisionamento do Cloud TPU (ctpu) para criar e gerenciar recursos do projeto no Cloud TPU. Os recursos são compostos por uma máquina virtual (VM, na sigla em inglês) e um recurso do Cloud TPU com o mesmo nome. Eles precisam residir na mesma região/zona que o intervalo recém-criado.

Também é possível configurar os recursos de VM e TPU usando comandos do gcloud ou o Console do Cloud. Consulte a página Como criar e excluir TPUs para aprender todas as maneiras de configurar e gerenciar a VM do Compute Engine e os recursos do Cloud TPU.

Executar ctpu up para criar recursos

  1. Abra uma janela do Cloud Shell.

    Abrir o Cloud Shell

  2. Execute gcloud config set project <Your-Project> para usar o projeto em que o Cloud TPU será criado.

  3. Execute ctpu up especificando as sinalizações mostradas para um dispositivo Cloud TPU ou para uma fração de pod. Consulte a Referência da CTPU para ver as opções de sinalização e descrições.

  4. Configure um dispositivo do Cloud TPU:

    $ ctpu up 

    A seguinte mensagem de configuração será exibida:

    ctpu will use the following configuration:
    
    Name: [your TPU's name]
    Zone: [your project's zone]
    GCP Project: [your project's name]
    TensorFlow Version: 1.14
    VM:
     Machine Type: [your machine type]
     Disk Size: [your disk size]
     Preemptible: [true or false]
    Cloud TPU:
     Size: [your TPU size]
     Preemptible: [true or false]
    
    OK to create your Cloud TPU resources with the above configuration? [Yn]:
    

    Pressione y para criar os recursos do Cloud TPU.

O comando ctpu up cria uma máquina virtual e serviços do Cloud TPU.

Daqui em diante, o prefixo (vm)$ significa que é preciso executar o comando na instância de VM do Compute Engine.

Verificar a VM do Compute Engine

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

Clonar o repositório BERT

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

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:

git clone https://gist.github.com/60c2bdb54d156a41194446737ce03e2e.git

Fazer o download dos dados do GLUE

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

python3 download_glue_data.py --data_dir ~/glue_data --tasks all

Definir valores de parâmetros

Em seguida, defina diversos valores de parâmetros necessários ao treinar e avaliar o modelo:

  • STORAGE_BUCKET. Esse é o nome do intervalo do Cloud Storage criado na seção Antes de começar.

    export STORAGE_BUCKET=gs://my-storage-bucket
  • BERT_BASE_DIR é o diretório que contém os arquivos de modelo. O tutorial usa uma pasta no intervalo do Cloud Storage. Não é preciso criar essa pasta antecipadamente. O script cria a pasta, se ela ainda não existir.

    export BERT_BASE_DIR=gs://cloud-tpu-checkpoints/bert/uncased_L-12_H-768_A-12
    
  • GLUE_DIR. Esse é o diretório que contém os dados do GLUE. Para este tutorial, o diretório é ~/glue_data.

    export GLUE_DIR=~/glue_data
    
  • TASK_NAME. Esse é o tipo de treinamento que você quer realizar. Para este tutorial, use o valor MRPC, que especifica o Microsoft Research Paraphrase Corpus.

    export TASK_NAME=MRPC
    
  • TPU_NAME. O nome da TPU. O comando ctpu up cria automaticamente essa variável para você.

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

Verificar os resultados

Quando o script de treinamento for concluído, você verá resultados semelhantes aos seguintes:

***** Eval results *****
  eval_accuracy = 0.845588
  eval_loss = 0.505248
  global_step = 343
  loss = 0.505248

Limpeza

As etapas abaixo mostram como evitar cobranças na sua conta do GCP pelo uso de recursos.

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

    (vm)$ exit
    

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

  2. No Cloud Shell, execute ctpu delete com a sinalização --zone usada ao configurar o Cloud TPU para excluir a VM do Compute Engine e o Cloud TPU:

    $ ctpu delete [optional: --zone]
    
  3. Execute ctpu status para garantir que não haja instâncias alocadas e evitar cobranças desnecessárias no uso do TPU. A exclusão pode levar vários minutos. Uma resposta como esta indica que não há mais instâncias alocadas:

    2018/04/28 16:16:23 WARNING: Setting zone to "us-central1-b"
    No instances currently exist.
            Compute Engine VM:     --
            Cloud TPU:             --
    
  4. Execute gsutil conforme mostrado. Substitua YOUR-BUCKET-NAME pelo nome do intervalo do Cloud Storage criado para este tutorial:

    $ gsutil rm -r gs://YOUR-BUCKET-NAME