Como treinar o FairSeq Transformer no Cloud TPU usando PyTorch

Este tutorial se concentra especificamente na versão FairSeq do Transformer e na tarefa de tradução do WMT 18, traduzindo do inglês para o alemão.

Objetivos

  • Preparar o conjunto de dados.
  • Executar o job de treinamento.
  • Verificar os resultados da saída.

Custos

Neste tutorial, usamos 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. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Antes de começar

Antes de começar o tutorial, verifique se o projeto do Google Cloud foi configurado corretamente.

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.

  4. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  5. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.

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

Configurar uma instância do Compute Engine

  1. Abra uma janela do Cloud Shell.

    Abra o Cloud Shell

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

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

  4. No Cloud Shell, inicie o recurso do Compute Engine necessário para este tutorial.

    gcloud compute --project=${PROJECT_ID} instances create transformer-tutorial \
    --zone=us-central1-a  \
    --machine-type=n1-standard-16  \
    --image-family=torch-xla \
    --image-project=ml-images  \
    --boot-disk-size=200GB \
    --scopes=https://www.googleapis.com/auth/cloud-platform
    
  5. Conecte-se à nova instância do Compute Engine.

    gcloud compute ssh transformer-tutorial --zone=us-central1-a
    

Iniciar um recurso da Cloud TPU

  1. Inicie um recurso do Cloud TPU na máquina virtual do Compute Engine, usando o seguinte comando:

    (vm) $ gcloud compute tpus create transformer-tutorial \
    --zone=us-central1-a \
    --network=default \
    --version=pytorch-1.12 \
    --accelerator-type=v3-8
    
  2. Identifique o endereço IP do recurso do Cloud TPU.

    (vm) $ gcloud compute tpus list --zone=us-central1-a
    

    O endereço IP está localizado abaixo da coluna NETWORK_ENDPOINTS. Você precisará desse endereço IP ao criar e configurar o ambiente PyTorch.

Fazer download dos dados

  1. Crie um diretório, pytorch-tutorial-data, para armazenar os dados do modelo.

    (vm) $ mkdir $HOME/pytorch-tutorial-data
    
  2. Navegue até o diretório pytorch-tutorial-data.

    (vm) $ cd $HOME/pytorch-tutorial-data
    
  3. Faça o download dos dados do modelo.

    (vm) $ wget https://dl.fbaipublicfiles.com/fairseq/data/wmt18_en_de_bpej32k.zip
    
  4. Extraia os dados.

    (vm) $ sudo apt-get install unzip && \
    unzip wmt18_en_de_bpej32k.zip
    

Crie e configure o ambiente PyTorch

  1. Inicie um ambiente conda.

    (vm) $ conda activate torch-xla-1.12
    
  2. Configure variáveis de ambiente para o recurso Cloud TPU.

    (vm) $ export TPU_IP_ADDRESS=ip-address; \
    export XRT_TPU_CONFIG="tpu_worker;0;$TPU_IP_ADDRESS:8470"
    

Treine o modelo

Para treinar o modelo, execute o seguinte script:

(vm) $ python /usr/share/torch-xla-1.12/tpu-examples/deps/fairseq/train.py \
  $HOME/pytorch-tutorial-data/wmt18_en_de_bpej32k \
  --save-interval=1 \
  --arch=transformer_vaswani_wmt_en_de_big \
  --max-target-positions=64 \
  --attention-dropout=0.1 \
  --no-progress-bar \
  --criterion=label_smoothed_cross_entropy \
  --source-lang=en \
  --lr-scheduler=inverse_sqrt \
  --min-lr 1e-09 \
  --skip-invalid-size-inputs-valid-test \
  --target-lang=de \
  --label-smoothing=0.1 \
  --update-freq=1 \
  --optimizer adam \
  --adam-betas '(0.9, 0.98)' \
  --warmup-init-lr 1e-07 \
  --lr 0.0005 \
  --warmup-updates 4000 \
  --share-all-embeddings \
  --dropout 0.3 \
  --weight-decay 0.0 \
  --valid-subset=valid \
  --max-epoch=25 \
  --input_shapes 128x64 \
  --num_cores=8 \
  --metrics_debug \
  --log_steps=100

Limpar

Execute uma limpeza para evitar cobranças desnecessárias na sua conta depois de usar os recursos criados:

  1. Desconecte-se da instância do Compute Engine, caso ainda não tenha feito isso:

    (vm) $ exit
    

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

  2. No Cloud Shell, use a CLI do Google Cloud para excluir a instância do Compute Engine.

    $  gcloud compute instances delete transformer-tutorial  --zone=us-central1-a
    
  3. Use a CLI do Google Cloud para excluir o recurso da Cloud TPU.

    $  gcloud compute tpus delete transformer-tutorial --zone=us-central1-a
    

A seguir

Teste as colabs do PyTorch: