Como executar o TensorFlow distribuído no Compute Engine

Neste tutorial, mostramos como usar uma configuração distribuída do TensorFlow em várias instâncias do Compute Engine para treinar um modelo de rede neural convolucional usando o conjunto de dados MNIST. Esse conjunto ativa o reconhecimento de dígitos manuscritos, sendo amplamente usado em machine learning como um conjunto de treinamento para reconhecimento de imagens.

O TensorFlow é uma plataforma de código aberto de ponta a ponta para machine learning. Ele tem um ecossistema abrangente e flexível de ferramentas, bibliotecas e recursos da comunidade que permite aos pesquisadores levar adiante a ML de última geração e aos desenvolvedores criar e implantar aplicativos com tecnologia de ML. O TensorFlow foi projetado para execução em vários computadores visando distribuir cargas de trabalho de treinamento. Neste tutorial, você executa o TensorFlow em várias instâncias de máquina virtual (VM, na sigla em inglês) do Compute Engine para treinar o modelo. É possível também usar a plataforma de IA, que gerencia tarefas de alocação de recursos e pode hospedar seus modelos treinados. Recomendamos usar o AI Platform, a menos que você tenha um motivo específico para não o utilizar. Saiba mais na versão deste tutorial em que usamos o AI Platform e o Cloud Datalab.

No diagrama a seguir, descrevemos a arquitetura para executar uma configuração distribuída do TensorFlow no Compute Engine e usar o AI Platform com o Cloud Datalab para executar previsões com seu modelo treinado.

Diagrama da execução do Tensorflow no Compute Engine

Neste tutorial, mostramos como configurar e usar essa arquitetura e explicamos alguns conceitos.

Objetivos

  • Configurar o Compute Engine de modo a criar um cluster de VMs para executar o TensorFlow.
  • Aprender a executar o código de amostra do TensorFlow distribuído no cluster do Compute Engine para treinar um modelo. No código de exemplo, usamos os padrões e as bibliotecas mais recentes do TensorFlow para que você possa usá-lo como referência ao desenvolver seu próprio código de treinamento.
  • Implantar o modelo treinado no AI Platform para criar uma API personalizada para previsões e, em seguida, executar previsões usando uma anotação do Cloud Datalab.

Custos

Com base nesta calculadora de preços, o preço estimado para executar este tutorial, presumindo que você use todos os recursos em um dia inteiro, é de aproximadamente US$ 1,20.

Antes de começar

  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. Ativar API Compute Engine e API AI Platform Training and Prediction APIs.

    Ativar as APIs

Como criar a instância do modelo

Neste tutorial, você usará o Cloud Shell, um shell completo do Linux no Console do Google Cloud Platform.

  1. Acesse o Cloud Shell.

    Abrir o Cloud Shell

  2. Defina a zona padrão do Google Compute Engine e o projeto padrão. Substitua [YOUR_PROJECT_ID] pelo projeto do Google Cloud Platform (GCP).

    gcloud config set compute/zone us-east1-c
    gcloud config set project [YOUR_PROJECT_ID]
  3. Clone o repositório do GitHub:

    git clone https://github.com/GoogleCloudPlatform/cloudml-dist-mnist-example
    cd cloudml-dist-mnist-example
  4. Crie a instância de VM inicial com base em uma imagem do Ubuntu Wily:

    gcloud compute instances create template-instance \
    --image-project ubuntu-os-cloud \
    --image-family ubuntu-1604-lts \
    --boot-disk-size 10GB \
    --machine-type n1-standard-1
  5. Use ssh para se conectar à VM:

    gcloud compute ssh template-instance
  6. Instale o pip:

    sudo apt-get update
    sudo apt-get -y upgrade \
    && sudo apt-get install -y python-pip python-dev
  7. Instale o TensorFlow:

    sudo pip install tensorflow
    
  8. (Opcional) Siga as etapas para verificar a instalação.

  9. Digite exit para voltar ao Cloud Shell.

  10. Verifique a versão do TensorFlow em execução na instância do Compute Engine:

    sudo python -c 'import tensorflow as tf; print(tf.__version__)'
  11. Se a versão for anterior à 1.2.1, use o pip para fazer upgrade:

    sudo pip install --upgrade tensorflow

Como criar um intervalo do Cloud Storage

Em seguida, crie um intervalo do Cloud Storage para armazenar os arquivos MNIST. Siga estas etapas:

  1. Crie um intervalo regional do Cloud Storage para manter os arquivos de dados MNIST que são compartilhados entre as instâncias do worker:

    MNIST_BUCKET="mnist-$RANDOM"
    gsutil mb -c regional -l us-east1 gs://${MNIST_BUCKET}
  2. Use este script para fazer o download dos arquivos de dados MNIST e copiá-los no intervalo:

    sudo ./scripts/create_records.py
    gsutil cp /tmp/data/train.tfrecords gs://${MNIST_BUCKET}/data/
    gsutil cp /tmp/data/test.tfrecords gs://${MNIST_BUCKET}/data/

Como criar a imagem de modelo e as instâncias de treinamento

Para criar as instâncias de servidor de parâmetros, worker e mestre, converta a instância de modelo em uma imagem e use essa imagem para criar novas instâncias.

  1. Desative a exclusão automática da VM da template-instance para que o disco seja preservado quando a máquina virtual for excluída:

    gcloud compute instances set-disk-auto-delete template-instance \
    --disk template-instance --no-auto-delete
  2. Exclua template-instance:

    gcloud compute instances delete template-instance
  3. Crie a imagem template-image do disco do template-instance:

    gcloud compute images create template-image \
    --source-disk template-instance
  4. Crie as instâncias adicionais. Para este tutorial, crie quatro instâncias chamadas master-0, worker-0, worker-1 e ps-0. Com o escopo storage-rw, as instâncias podem acessar o intervalo do Cloud Storage. Delimite os nomes das instâncias com espaços da seguinte maneira:

    gcloud compute instances create \
    master-0 worker-0 worker-1 ps-0 \
    --image template-image \
    --machine-type n1-standard-4 \
    --scopes=default,storage-rw

O cluster está pronto para executar o TensorFlow distribuído.

Como executar o código do TensorFlow distribuído

Nesta seção, você executa um script que instrui todas as instâncias de VM a executar o código do TensorFlow para treinar o modelo.

  1. No Cloud Shell, execute o seguinte comando no diretório cloudml-dist-mnist-example:

    ./scripts/start-training.sh gs://${MNIST_BUCKET}

    O script start-training.sh envia o código a cada VM e envia os parâmetros necessários para iniciar o processo do TensorFlow em cada máquina para criação do cluster distribuído. No stream de saída do Cloud Shell, aparecem os valores de perda e precisão do conjunto de dados de teste.

    Valores de precisão no terminal

    Quando o treinamento é concluído, o script imprime o local dos arquivos de modelo recém-gerados:

    Trained model is stored in gs://${MNIST_BUCKET}/job_[TIMESTAMP]/export/Servo/[JOB_ID]/
  2. Copie o local do caminho do intervalo para usar nas etapas posteriores.

Como publicar o modelo para previsões

Você gerou um novo modelo que será usado para fazer previsões. Quanto mais sofisticado é o modelo de treinamento, mais complexo é o código do TensorFlow, mas a configuração dos recursos de computação e armazenamento é semelhante.

O treinamento do modelo é apenas a metade do processo. Agora, é necessário conectar o modelo ao aplicativo ou encapsulá-lo usando um serviço de API com autenticação e, finalmente, fazer todo o escalonamento. Há uma quantidade relativamente significativa de trabalho de engenharia a ser feito antes que você possa usar o modelo.

O AI Platform pode ajudar com parte desse trabalho. Ele fornece uma versão totalmente gerenciada do TensorFlow em execução no Google Cloud Platform. Ele oferece todos os recursos avançados do TensorFlow sem a necessidade de configurar qualquer infraestrutura extra ou instalar qualquer software. É possível escalonar automaticamente seu treinamento distribuído para usar quantas CPUs ou GPUs precisar, e você só paga pelo que usa.

Como o AI Platform executa o TensorFlow em segundo plano, todo o trabalho é portátil, portanto, você não fica preso a uma ferramenta proprietária.

Confira o tutorial Como usar o TensorFlow distribuído com o Cloud Datalab para usar o mesmo código de exemplo a fim de treinar seu modelo com o AI Platform.

Também é possível implantar seu modelo no AI Platform para previsões. Use as seguintes etapas para implantar seu modelo no AI Platform. Com a implantação do seu modelo, ele pode ser testado e aplicado rapidamente em grande escala, com todos os recursos de segurança e confiabilidade esperados de um serviço gerenciado pelo Google.

Nas etapas a seguir, você usa o caminho do intervalo do modelo que foi exibido anteriormente na saída do script start-training.sh.

  1. Lembre-se do caminho da saída do intervalo do Cloud Storage com os modelos gerados. Ele está no seguinte formato, em que [JOB_ID] é o código do job. Você usa esse caminho na próxima etapa:

    MODEL_BUCKET: gs://${MNIST_BUCKET}/job_[TIMESTAMP]/export/Servo/[JOB_ID]
  2. Para definir a nova versão v1 do modelo, use a ferramenta de linha de comando gcloud e aponte-a para os arquivos de modelo no intervalo. O comando a seguir pode levar vários minutos para ser concluído. Substitua [YOUR_BUCKET_PATH] pelo caminho da saída da etapa anterior, que começa com gs://.

    MODEL="MNIST"
    MODEL_BUCKET=[YOUR_BUCKET_PATH]
    gcloud ml-engine models create ${MODEL} --regions us-east1
    gcloud ml-engine versions create \
     --origin=${MODEL_BUCKET} --model=${MODEL} v1
  3. Defina a versão padrão do seu modelo como v1:

    gcloud ml-engine versions set-default --model=${MODEL} v1

O modelo, agora em execução com o AI Platform, é capaz de processar previsões. Na próxima seção, você usa o Cloud Datalab para fazer e visualizar previsões.

Como executar previsões no Cloud Datalab

Para testar suas previsões, crie uma instância do Cloud Datalab que use anotações do Jupyter interativas para executar o código.

  1. No Cloud Shell, insira o seguinte comando para criar uma instância do Cloud Datalab:

    datalab create mnist-datalab
    
  2. No Cloud Shell, inicie a página de listagem de anotações do Cloud Datalab clicando no ícone quadrado de visualização da Web do Cloud Shell, na parte superior direita.

  3. Selecione Alterar porta e Porta 8081 para iniciar uma nova guia no navegador.

  4. No aplicativo Cloud Datalab, crie uma nova anotação clicando em +Anotação no canto superior direito.

  5. Cole o seguinte texto na primeira célula da nova anotação:

    %%bash
    wget https://raw.githubusercontent.com/GoogleCloudPlatform/cloudml-dist-mnist-example/master/notebooks/Online%20prediction%20example.ipynb
    cat Online\ prediction\ example.ipynb > Untitled\ Notebook.ipynb
  6. Clique em Executar na parte superior da página para fazer o download do notebook Online prediction example.ipynb. O script copia o conteúdo da anotação remota na atual.

  7. Recarregue a página do navegador para carregar o conteúdo da nova anotação. Em seguida, selecione a primeira célula com o código JavaScript e clique em Executar.

  8. Role a página para baixo até ver um painel e desenhe um número nele com o cursor.

    O número 3 desenhado com um cursor.

  9. Clique na próxima célula para ativá-la e depois na seta para baixo ao lado do botão Executar na parte superior. Em seguida, selecione Executar nesta célula.

    O resultado da previsão é uma matriz de 10 caracteres, em que cada índice, de 0 a 9, contém um número correspondente a esse dígito. Quanto mais próximo esse número for de 1, maior será a probabilidade de o índice corresponder ao dígito inserido. Observe que o número no slot 3 destacado na lista é muito próximo de 1. Portanto, a probabilidade de correspondência do dígito é alta.

    PROBABILITIES
    [4.181503356903704e-07,
    7.12400151314796e-07,
    0.00017898145597428083,
    0.9955494403839111,
    5.323939553103507e-11,
    0.004269002005457878,
    7.927398321116996e-11,
    1.2688398953741853e-07,
    1.0825967819982907e-06,
    2.2037748692582682e-07]

Na última célula do notebook, há um gráfico de barras que mostra claramente que o número foi reconhecido, nesse caso, o 3.

O gráfico de barras mostra que o número 3 foi selecionado.

Como limpar

Para evitar que os recursos usados neste tutorial sejam cobrados na conta do Google Cloud Platform:

  1. Exclua a versão do modelo:

    gcloud ml-engine versions delete v1 --model=MNIST
  2. Exclua o modelo:

    gcloud ml-engine models delete MNIST
  3. Exclua o intervalo do Cloud Storage:

    gsutil rm -r gs://${MNIST_BUCKET}
  4. Exclua suas VMs, incluindo o Cloud Datalab:

    gcloud compute instances delete master-0 worker-0 worker-1 ps-0 mnist-datalab
  5. Exclua a imagem de modelo de VM:

    gcloud compute images delete template-image
  6. Exclua o disco permanente do Cloud Datalab:

    gcloud compute disks delete mnist-datalab-pd --zone us-east1-c

A seguir

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

Enviar comentários sobre…