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
- Execute o job de treinamento.
- Verifique os resultados.
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 iniciar este tutorial, verifique se o projeto do Google Cloud está 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.
Neste tutorial, há componentes faturáveis do Google Cloud. Consulte a página de preços do Cloud TPU para estimar os custos. Não se esqueça de limpar os recursos criados quando você tiver terminado para evitar cobranças desnecessárias.
Configurar uma instância do Compute Engine
Abra uma janela do Cloud Shell.
Crie uma variável para o código do 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, uma página
Authorize Cloud Shell
será exibida. Clique emAuthorize
na parte inferior da página para permitir quegcloud
faça chamadas de API do GCP com suas credenciais.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
Conecte-se à nova instância do Compute Engine.
gcloud compute ssh transformer-tutorial --zone=us-central1-a
Iniciar um recurso da Cloud TPU
Na máquina virtual do Compute Engine, inicie um recurso da Cloud TPU usando o comando a seguir:
(vm) $ gcloud compute tpus create transformer-tutorial \ --zone=us-central1-a \ --network=default \ --version=pytorch-1.11 \ --accelerator-type=v3-8
Identifique o endereço IP do recurso da Cloud TPU.
(vm) $ gcloud compute tpus list --zone=us-central1-a
O endereço IP está localizado na coluna
NETWORK_ENDPOINTS
. Você precisará desse endereço IP ao criar e configurar o ambiente PyTorch.
Fazer o download dos dados
Crie um diretório,
pytorch-tutorial-data
, para armazenar os dados de 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
Criar e configurar o ambiente PyTorch
Inicie um ambiente
conda
.(vm) $ conda activate torch-xla-1.11
Configure as variáveis de ambiente para o recurso do Cloud TPU.
(vm) $ export TPU_IP_ADDRESS=ip-address; \ export XRT_TPU_CONFIG="tpu_worker;0;$TPU_IP_ADDRESS:8470"
Treinar o modelo
Para treinar o modelo, execute o seguinte script:
(vm) $ python /usr/share/torch-xla-1.11/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
Limpeza
Faça uma limpeza para evitar cobranças desnecessárias na 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 seu prompt será
user@projectname
, mostrando que você está no Cloud Shell.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
Usar a CLI do Google Cloud para excluir o recurso da Cloud TPU.
$ gcloud compute tpus delete transformer-tutorial --zone=us-central1-a
Próximas etapas
Experimente os colabs do PyTorch:
- Primeiros passos com o PyTorch nas Cloud TPUs
- Como treinar MNIST em TPUs
- Como treinar o ResNet18 em TPUs com o conjunto de dados Cifar10
- Inferência com modelo ResNet50 pré-treinado
- Transferência de estilo neural rápida
- Treinamento de vários núcleos AlexNet sobre MNIST da moda
- Treinamento de núcleo único AlexNet sobre Fashion MNIST