Como treinar o MnasNet no Cloud TPU

Neste tutorial, você verá como treinar o modelo Tensorflow MnasNet usando um dispositivo Cloud TPU ou uma fatia do pod do Cloud TPU (vários dispositivos TPU). É possível aplicar o mesmo padrão a outros modelos de classificação de imagem otimizados para TPU que usam o TensorFlow e o conjunto de dados do ImageNet.

Termo de Isenção de Responsabilidade

Neste tutorial, é usado um conjunto de dados de terceiros. O Google não oferece declarações, proteções ou outras garantias sobre a validade ou quaisquer outros aspectos desse conjunto de dados.

Descrição do modelo

O modelo deste tutorial é baseado no MnasNet: Platform-Aware Neural Architecture Search for Mobile, que primeiro introduz a arquitetura de rede neural móvel do AutoML (MnasNet). Este tutorial usa a variante de última geração, 'mnasnet-a1', e demonstra o treinamento do modelo usando o TPUEstimator.

Como configurar o projeto

Antes de iniciar este tutorial, verifique se o projeto do Google Cloud Platform está configurado corretamente ou configure um novo.

  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. Verifique se você tem cota suficiente para usar dispositivos TPU ou Pods.

Como configurar os recursos

Nesta seção, você verá como configurar os recursos de armazenamento, a VM e o Cloud TPU do Cloud Storage para tutoriais.

Crie 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 intervalo criado precisa residir na mesma região que a máquina virtual (VM, na sigla em inglês) e o dispositivo Cloud TPU ou fração do Cloud TPU (vários dispositivos TPU).

  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: Regional
    • localização: se quiser usar um dispositivo Cloud TPU, aceite o padrão apresentado. Caso queira usar uma fatia do pod do Cloud TPU, especifique uma região em que eles estão disponíveis.

Use 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 do gcloud ou o Console do Cloud. Para mais informações, consulte Como gerenciar recursos de VM e TPU.

Execute o 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 você quer criar o Cloud TPU.

  3. Execute ctpu up especificando as sinalizações mostradas para um dispositivo Cloud TPU ou para uma fração de pod. Para opções e descrições do sinalizador, consulte Referência do CTPU.

  4. Configure um dispositivo do Google Cloud TPU ou uma fatia do Pod:

Dispositivo TPU

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.

Pod do TPU

Configure uma fatia do Cloud TPU na VM e na zona em que você está trabalhando:

$ ctpu up  --zone=us-central1-a --tpu-size=v2-32 --disk-size-gb=500 --machine-type n1-standard-8 --preemptible

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 (VM, na sigla em inglês) 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.

Verifique a VM do Compute Engine

Quando o comando ctpu up for concluído, verifique se o prompt do shell é username@tpuname, o que mostra que você está conectado à VM do Compute Engine.

Como exportar o intervalo de armazenamento

Para especificar um intervalo de armazenamento para armazenar checkpoints durante o treinamento e gravar os registros dele, configure a variável de ambiente STORAGE_BUCKET, substituindo YOUR-BUCKET-NAME pelo nome do intervalo do Cloud Storage:

(vm)$ export STORAGE_BUCKET=gs://YOUR-BUCKET-NAME

O aplicativo de treinamento precisa que os dados de treinamento sejam acessíveis no Cloud Storage.

Como configurar o TensorBoard (opcional)

No TensorBoard, há um conjunto de ferramentas projetadas para apresentar visualmente os dados do TensorFlow. Quando o TensorBoard é usado para monitoramento, é possível identificar gargalos no processamento e receber sugestões para melhorar o desempenho.

Caso não seja necessário monitorar a saída do modelo no momento, ignore as etapas de configuração do TensorBoard.

Caso queira monitorar a saída e o desempenho do modelo, siga o guia para configurar o TensorBoard.

Como executar o modelo MnasNet com fake_imagenet

Nas etapas a seguir, o prefixo (vm)$ significa que você precisa executar o comando na VM do Compute Engine:

  1. Adicione a pasta de nível superior /models ao caminho do Python com o comando

    (vm)$ export PYTHONPATH="$PYTHONPATH:/usr/share/tpu/models"
    
  2. Navegue até o diretório.

    (vm)$ cd /usr/share/tpu/models/official/mnasnet/
    
  3. Execute o script de treinamento para um único dispositivo do Compute Engine ou Pod da seguinte forma:

Dispositivo TPU

(vm)$ python mnasnet_main.py \
  --tpu=${TPU_NAME} \
  --data_dir=gs://cloud-tpu-test-datasets/fake_imagenet \
  --model_dir=${STORAGE_BUCKET}/mnasnet \
  --model_name='mnasnet-a1' \
  --skip_host_call=true \
  --train_batch_size=1024
  • --tpu especifica o nome do Cloud TPU. O ctpu transmite esse nome para a VM do Compute Engine como uma variável de ambiente (TPU_NAME).
  • --data_dir especifica o caminho do Cloud Storage para a entrada do treinamento.
  • --model_dir especifica o diretório em que os checkpoints e resumos são armazenados durante o treinamento de modelo. Se a pasta não existir, o programa criará uma. Ao usar um Cloud TPU, o model_dir precisa ser um caminho do Cloud Storage (gs://...). É possível reutilizar uma pasta atual para carregar os dados do checkpoint atual e armazenar os novos.

Para um único dispositivo do Cloud TPU, o procedimento treina o modelo MnasNet (variante "mnasnet-a1") por 350 períodos e avalia cada número fixo de etapas. Usando os sinalizadores especificados, o modelo é treinado em cerca de 23 horas. Com os dados reais da imagenet, as configurações reproduzirão o resultado da pesquisa de última geração, enquanto os usuários serão capazes de ajustar a velocidade de treinamento.

Pod do TPU

(vm)$ python mnasnet_main.py \
  --tpu=${TPU_NAME} \
  --data_dir=gs://cloud-tpu-test-datasets/fake_imagenet \
  --model_dir=${STORAGE_BUCKET}/mnasnet \
  --model_name='mnasnet-a1' \
  --skip_host_call=true \
  --mode=train \
  --train_steps=109474 \
  --train_batch_size=4096
  • --tpu especifica o nome do Cloud TPU. O ctpu transmite esse nome para a VM do Compute Engine como uma variável de ambiente (TPU_NAME).
  • --data_dir especifica o caminho do Cloud Storage para a entrada do treinamento.
  • --model_dir especifica o diretório em que os checkpoints e resumos são armazenados durante o treinamento de modelo. Se a pasta não existir, o programa criará uma. Ao usar um Cloud TPU, o model_dir precisa ser um caminho do Cloud Storage (gs://...). É possível reutilizar uma pasta atual para carregar os dados do checkpoint atual e armazenar os novos.

O procedimento treina o modelo MnasNet (variante "mnasnet-a1") no conjunto de dados fake_imagent para 350 períodos. Isso leva cerca de 5 horas.

Limpeza

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 verificar se não há instâncias alocadas e evitar cobranças desnecessárias pelo uso da 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, substituindo 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…