Como executar o Deeplab-v3 no Cloud TPU

Este tutorial mostra como treinar o modelo Deeplab-v3 no Cloud TPU.

Este modelo é um modelo de segmentação semântica de imagem. Os modelos de segmentação semântica de imagem concentram-se em identificar e localizar vários objetos em uma única imagem. Esse tipo de modelo é frequentemente usado em aplicativos de machine learning, como condução autônoma, processamento de imagens geoespaciais e imagens médicas.

Neste tutorial, você executará um modelo de treinamento contra o conjunto de dados PASCAL VOC 2012. Para mais informações sobre esse conjunto de dados, consulte a página inicial de classes de objetos visuais do PASCAL.

Antes de começar

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

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

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

  2. Selecione ou crie um projeto do Google Cloud Platform.

    Acessar a página Gerenciar recursos

  3. Verifique se o faturamento foi ativado no projeto do Google Cloud Platform.

    Saiba como ativar o faturamento

  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 do Cloud TPU, armazenamento do Cloud Storage e VMs 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ó do 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 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 do Cloud TPU ou para uma fração do 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 você precisa 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.

Instale pacotes adicionais

Para este modelo, é necessário instalar os seguintes pacotes adicionais na instância do Compute Engine:

  • python-pil
  • python-numpy
  • jupyter
  • matplotlib
  • PrettyTable
(vm)$ sudo apt-get install python-pil python-numpy && \
pip install --user jupyter && \
pip install --user matplotlib && \
pip install --user PrettyTable

Clonar os modelos TensorFlow e os repositórios tpu

Execute o comando a seguir para clonar o repositório de modelos do TensorFlow para sua instância do Compute Engine:

(vm)$ git clone https://github.com/tensorflow/models.git && \
git clone https://github.com/tensorflow/tpu.git

Adicionar tensorflow/models/research/ a PYTHONPATH

Em seguida, adicione os modelos em tensorflow/models/research à variável PYTHONPATH:

(vm)$ cd ~/models/research && \
export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

Fazer o download e converter o conjunto de dados PASCAL VOC 2012

Este modelo usa o conjunto de dados PASCAL VOC 2012 para treinamento e avaliação. Execute o script a seguir para fazer o download do conjunto de dados e convertê-lo no formato TFRecord do TensorFlow:

(vm)$ cd ~/models/research/deeplab/datasets/ && \
bash download_and_convert_voc2012.sh && \
cd ~/

Fazer o download do checkpoint pré-treinado

Nesta etapa, faça o download de um ponto de verificação pré-roteado modificado do resnet 101. Para começar, faça o download do checkpoint:

(vm)$ wget http://download.tensorflow.org/models/resnet_v1_101_2018_05_04.tar.gz

Em seguida, extraia o conteúdo do arquivo tar:

(vm)$ tar -vxf resnet_v1_101_2018_05_04.tar.gz

Fazer upload dos dados no seu intervalo do Cloud Storage

Nesse momento, é possível fazer o upload dos dados para o intervalo do Cloud Storage criado anteriormente:

(vm)$ gsutil cp -r ~/models/research/deeplab/datasets/pascal_voc_seg/tfrecord gs://YOUR-BUCKET-NAME &&
gsutil -m cp -r ~/resnet_v1_101 gs://YOUR-BUCKET-NAME

Treine o modelo

Agora você está pronto para treinar o modelo. Altere YOUR-BUCKET-NAME para o nome do seu intervalo do Cloud Storage.

(vm)$ python ~/tpu/models/experimental/deeplab/main.py \
--mode='train' \
--num_shards=8 \
--alsologtostderr=true \
--model_dir=gs://YOUR-BUCKET-NAME \
--dataset_dir=gs://YOUR-BUCKET-NAME/tfrecord \
--init_checkpoint=gs://YOUR-BUCKET-NAME/resnet_v1_101/model.ckpt \
--model_variant=resnet_v1_101_beta \
--image_pyramid=1. \
--aspp_with_separable_conv=false \
--multi_grid=1 \
--multi_grid=2 \
--multi_grid=4 \
--decoder_use_separable_conv=false \
--train_split='train'

Avalie o modelo

Quando o treinamento terminar, será possível avaliar o modelo. Para fazer isso, altere a sinalização --mode de train para eval:

(vm)$ python ~/tpu/models/experimental/deeplab/main.py \
--mode='eval' \
--num_shards=8 \
--alsologtostderr=true \
--model_dir=gs://YOUR-BUCKET-NAME \
--dataset_dir=gs://YOUR-BUCKET-NAME/tfrecord \
--init_checkpoint=gs://YOUR-BUCKET-NAME/resnet_v1_101/model.ckpt \
--model_variant=resnet_v1_101_beta \
--image_pyramid=1. \
--aspp_with_separable_conv=false \
--multi_grid=1 \
--multi_grid=2 \
--multi_grid=4 \
--decoder_use_separable_conv=false \
--train_split='train'

Limpar

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
    

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.