Como treinar o Resnet50 no Cloud TPU com PyTorch


Neste tutorial, mostramos como treinar o modelo ResNet-50 em um dispositivo Cloud TPU com PyTorch. É possível aplicar o mesmo padrão a outros modelos de classificação de imagem otimizados para TPU que usam o PyTorch e o conjunto de dados do ImageNet.

O modelo deste tutorial é baseado no artigo Deep Residual Learning for Image Recognition, que foi o primeiro a apresentar a arquitetura de rede residual ou ResNet. O tutorial usa a variante de 50 camadas, ResNet-50, e demonstra o treinamento do modelo usando PyTorch/XLA.

Objetivos

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

Custos

Neste documento, você usará 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. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  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. Não se esqueça de limpar os recursos que você criou para evitar cobranças desnecessárias.

Criar uma VM de TPU

  1. Abra uma janela do Cloud Shell.

    Abrir o Cloud Shell

  2. Criar uma VM de TPU

    gcloud compute tpus tpu-vm create your-tpu-name \
    --accelerator-type=v4-8 \
    --version=tpu-ubuntu2204-base \
    --zone=us-central2-b \
    --project=your-project
  3. Conecte-se à VM da TPU usando SSH:

    gcloud compute tpus tpu-vm ssh  your-tpu-name --zone=us-central2-b
  4. Instale o PyTorch/XLA na VM de TPU:

    (vm)$ pip install torch~=2.4.0 torch_xla[tpu]~=2.4.0 torchvision -f https://storage.googleapis.com/libtpu-releases/index.html
  5. Clone o repositório do PyTorch/XLA no GitHub.

    (vm)$ git clone --depth=1 --branch r2.4 https://github.com/pytorch/xla.git
  6. Executar o script de treinamento com dados fictícios

    (vm) $ PJRT_DEVICE=TPU python3 xla/test/test_train_mp_imagenet.py --fake_data --batch_size=256 --num_epochs=1

Se você conseguir treinar o modelo usando dados falsos, tente treinar dados reais, como o ImageNet. Para instruções sobre como fazer o download do ImageNet, consulte Como fazer o download do ImageNet. No comando do script de treinamento, a flag --datadir especifica o local do conjunto de dados a ser treinado. O comando a seguir pressupõe que o conjunto de dados do ImageNet está localizado em ~/imagenet.

   (vm) $ PJRT_DEVICE=TPU python3 xla/test/test_train_mp_imagenet.py  --datadir=~/imagenet --batch_size=256 --num_epochs=1
   

Limpar

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. Desconecte-se da VM da TPU:

    (vm) $ exit

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

  2. Exclua a VM da TPU.

    $ gcloud compute tpus tpu-vm delete resnet50-tutorial \
       --zone=us-central2-b

A seguir