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.
Antes de começar
Antes de começar o tutorial, verifique se o projeto do Google Cloud foi configurado corretamente.
- 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.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.
-
No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como verificar se o faturamento está ativado em um projeto.
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
Abra uma janela do Cloud Shell.
Crie uma variável para o ID do seu projeto.
export PROJECT_ID=project-id
Configure o Google Cloud CLI 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 com suas credenciais.Na V, inicie o recurso 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
Conecte-se à nova instância do Compute Engine.
gcloud compute ssh transformer-tutorial --zone=us-central1-a
Iniciar um recurso da Cloud TPU
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.13 \ --accelerator-type=v3-8
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
Crie um diretório,
pytorch-tutorial-data
, para armazenar os dados do modelo.(vm) $ mkdir $HOME/pytorch-tutorial-data
Navegue até o diretório
pytorch-tutorial-data
.(vm) $ cd $HOME/pytorch-tutorial-data
Faça o download dos dados do modelo.
(vm) $ wget https://dl.fbaipublicfiles.com/fairseq/data/wmt18_en_de_bpej32k.zip
Extraia os dados.
(vm) $ sudo apt-get install unzip && \ unzip wmt18_en_de_bpej32k.zip
Crie e configure o ambiente PyTorch
Inicie um ambiente
conda
.(vm) $ conda activate torch-xla-1.13
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.13/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:
Desconecte-se da instância do Compute Engine, caso ainda não tenha feito isso:
(vm) $ exit
Agora, o prompt será
user@projectname
, mostrando que você está no Cloud Shell.No Cloud Shell, use a Google Cloud CLI para excluir a instância do Compute Engine.
$ gcloud compute instances delete transformer-tutorial --zone=us-central1-a
Use o Google Cloud CLI para excluir o recurso do Cloud TPU.
$ gcloud compute tpus delete transformer-tutorial --zone=us-central1-a
A seguir
Teste as colabs do PyTorch:
- Primeiros passos com o PyTorch em Cloud TPUs
- Como treinar MNIST em TPUs (em inglês)
- Como treinar o ResNet18 em TPUs com o conjunto de dados Cifar10 (em inglês)
- Inferência com modelo ResNet50 pré-treinado (em inglês)
- Transferência rápida de estilo neural
- Treinamento de vários núcleos da AlexNet no Fashion MNIST
- Treinamento de núcleo único da AlexNet no Fashion MNIST