Cloud Bigtable para streaming de dados

O Cloud Bigtable é um sistema de armazenamento estruturado, de baixa latência, escalonável e de linha ampla que pode armazenar e disponibilizar dados de treinamento para seu modelo de machine learning. Com o Cloud Bigtable, seus dados de treinamento podem ser transmitidos em altíssima velocidade para uso eficiente do Cloud TPU.

Este tutorial mostra como treinar o modelo TensorFlow ResNet-50 no Cloud TPU usando o Cloud Bigtable para hospedar seus dados de treinamento. O processo usa a integração do TensorFlow com o Cloud Bigtable.

Exoneração de responsabilidade

Este tutorial usa 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.

Requisitos e limitações

Ao definir sua configuração, observe o seguinte:

  • Use a versão 1.11 ou superior do TensorFlow para ter compatibilidade com o Cloud Bigtable.
  • O Cloud Bigtable é recomendado para jobs de treinamento de alto desempenho (dimensão de pod) com quantidades massivas de dados, processando de centenas de gigabytes (GB) a centenas de terabytes (TB), em uma taxa de dezenas a centenas de gigabits por segundo (Gbps). Recomendamos o uso do Cloud Storage para cargas de trabalho que não se encaixem nessa descrição. Observação: também recomendamos o Cloud Bigtable para uso em cargas de trabalho de aprendizado por reforço (RL, na sigla em inglês), em que os dados de treinamento são gerados imediatamente.

Sobre o modelo e os dados

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. É usada a variante de 50 camadas, conhecida como ResNet-50.

O conjunto de dados de treinamento é o ImageNet, que é uma opção bastante usada para sistemas de treinamento de reconhecimento de imagem.

No tutorial, usamos o TPUEstimator para treinar o modelo. O TPUEstimator é baseado em tf.estimator, uma API TensorFlow de alto nível, e é recomendado para criar e executar um modelo de machine learning no Cloud TPU. O processo de desenvolvimento de modelos é simplificado pela API com a ocultação da maior parte da implementação de nível inferior, o que facilita a alternância entre o Cloud TPU e outras plataformas, como GPU ou CPU.

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. Nestas instruções, estão incluídos componentes faturáveis do GCP. Verifique a página de preços do Cloud TPU para fazer uma estimativa de custos e siga as instruções para limpar os recursos quando não forem mais necessários.

  5. Instale o Cloud SDK, incluindo a ferramenta de linha de comando gcloud.

    Instalar o SDK do Cloud

Além disso, este tutorial exige que você já tenha dados armazenados no Cloud Bigtable. Para mais informações sobre como usar o Cloud Bigtable, consulte a documentação do Cloud Bigtable.

Criar uma instância do Cloud Bigtable

Crie uma instância do Cloud Bigtable para transmitir seus dados de treinamento:

  1. Acesse a página do Cloud Bigtable no Console do GCP.

    Acessar a página do Cloud Bigtable

  2. Crie uma instância especificando as opções a seguir:

    • Nome da instância: nome para ajudá-lo a identificar a instância.
    • Código da instância: identificador permanente para a instância.
    • Tipo de instância: selecione Produção para garantir melhor desempenho.
    • Tipo de armazenamento: selecione HDD.
    • Código do cluster: identificador permanente do cluster.
    • Região: selecione uma região. Por exemplo: us-central1. Consulte o guia das regiões e zonas disponíveis para o Cloud TPU.
    • Zona: selecione uma zona. Por exemplo: us-central1-b. Consulte o guia das regiões e zonas disponíveis para o Cloud TPU.

    É possível deixar os outros valores com as configurações padrão. Para saber mais, consulte o guia Como criar uma instância do Cloud Bigtable.

Fazer o download da ferramenta ctpu e configurá-la

Neste guia, usaremos o Serviço de provisionamento do Cloud TPU (ctpu) como uma ferramenta simples para configurar e gerenciar o Cloud TPU. Presumimos que você queira executar o ctpu e o SDK do Cloud localmente, em vez de usar o Cloud Shell. O ambiente do Cloud Shell não é adequado para procedimentos demorados, como o download dos dados do ImageNet, já que o Cloud Shell expira após um período de inatividade.

  1. Siga o guia do ctpu para fazer o download, instalar e configurar o ctpu.

  2. Defina o projeto, a zona e a região para o ambiente da ferramenta gcloud, substituindo YOUR-PROJECT-ID pelo ID do projeto do GCP:

    $ gcloud config set project YOUR-PROJECT-ID
    $ gcloud config set compute/region us-central1
    $ gcloud config set compute/zone us-central1-b
    
  3. Para verificar a configuração do ctpu, digite o seguinte no Cloud Shell:

    $ ctpu print-config
    

    Você verá uma mensagem como esta:

    2018/04/29 05:23:03 WARNING: Setting zone to "us-central1-b"
    ctpu configuration:
            name: [your TPU's name]
            project: [your-project-id]
            zone: us-central1-b
    If you would like to change the configuration for a single command invocation, please use the command line flags.
    If you would like to change the configuration generally, see `gcloud config configurations`.
    

    Na mensagem de saída, name é o nome do Cloud TPU (o padrão é o nome de usuário) e zone é a zona geográfica padrão (o padrão é us-central1-b) dos recursos do Compute Engine. Veja a lista de regiões e zonas disponíveis para o Cloud TPU. Para alterar o nome, a zona e outras propriedades, execute ctpu up conforme descrito abaixo.

Definir permissões de acesso para o Cloud TPU

Defina as seguintes permissões de acesso para a conta de serviço do Cloud TPU:

  1. Conceda ao Cloud TPU acesso ao Cloud Bigtable referente ao seu projeto do GCP. Observe que o ctpu aplica algumas permissões de acesso por padrão, mas esta não.

    $ ctpu auth add-bigtable
    

    Execute o comando a seguir para verificar as permissões do Cloud TPU:

    $ ctpu auth list
    
  2. Atualize as permissões do Cloud Storage (opcional). O comando ctpu up define as permissões padrão para o Cloud Storage. Se quiser permissões mais amplas, revise e atualize as permissões de nível de acesso.

Criar uma VM do Compute Engine e um Cloud TPU

Execute o comando a seguir para configurar uma máquina virtual (VM, na sigla em inglês) do Compute Engine e um Cloud TPU com serviços associados. Essa combinação de recursos e serviços é chamada de lote do Cloud TPU:

$ ctpu up [optional: --name --zone]

Será exibida uma mensagem que segue este padrão:

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]:

Digite y e pressione Enter para criar os recursos do Cloud TPU.

Execute as tarefas a seguir com o comando ctpu up:

  • Ative os serviços do Cloud TPU e Compute Engine.
  • Crie uma instância de VM do Compute Engine com a última versão estável do TensorFlow pré-instalada.
  • Crie um Cloud TPU com a versão correspondente do TensorFlow e transmita o nome do Cloud TPU à instância da VM do Compute Engine como uma variável de ambiente (TPU_NAME).
  • Garanta que a Cloud TPU tenha acesso aos recursos necessários no projeto do GCP. Isso é feito ao serem concedidos papéis específicos do IAM à conta de serviço do Cloud TPU.
  • Execute várias outras verificações.
  • Faça login na nova instância de VM do Compute Engine.

É possível executar ctpu up quantas vezes quiser. Por exemplo, se você perder a conexão SSH com a instância de VM do Compute Engine, execute ctpu up para restaurá-la. Se tiver alterado os valores padrão para --name e --zone, será necessário especificá-los novamente a cada execução do ctpu up. Para mais detalhes, leia a documentação do ctpu.

Verificar se está conectado à instância de VM

Quando a execução do comando ctpu up for concluída, verifique se o prompt do shell mudou de username@project para username@tpuname. Essa alteração mostra que você está conectado à sua instância de VM do Compute Engine.

Configurar algumas variáveis úteis

Nas etapas a seguir, um prefixo de (vm)$ mostra que você precisa executar o comando na instância de VM do Compute Engine no lote do Cloud TPU.

Configure algumas variáveis de ambiente para simplificar os comandos deste tutorial:

  1. Configure uma variável PROJECT, substituindo YOUR-PROJECT-ID pelo ID do projeto do GCP:

    (vm)$ export PROJECT=YOUR-PROJECT-ID
    
  2. Configure uma variável STORAGE_BUCKET, substituindo YOUR-BUCKET-NAME pelo nome do intervalo do Cloud Storage:

    (vm)$ export STORAGE_BUCKET=gs://YOUR-BUCKET-NAME
    
  3. Configure uma variável BIGTABLE_INSTANCE, substituindo YOUR-INSTANCE-ID pelo código da instância do Cloud Bigtable criado anteriormente:

    (vm)$ export BIGTABLE_INSTANCE=YOUR-INSTANCE-ID
    

Preparar os dados

Faça upload dos dados para o bigtable. No aplicativo de treinamento, espera-se que os dados de treinamento sejam acessíveis no Cloud Bigtable. Para instruções sobre como fazer upload dos dados para o bigtable, use o tensorflow_io/bigtable/README.md.

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 de configuração do TensorBoard.

Executar o modelo ResNet-50

Se os dados estiverem no banco de dados do Bigtable, você estará pronto para treinar e avaliar o modelo ResNet-50 em seu Cloud TPU, transmitindo os dados de treinamento do Cloud Bigtable. O modelo treinado e os checkpoints intermediários são gravados no Cloud Storage pelo aplicativo de treinamento.

Execute os comandos a seguir na instância de VM do Compute Engine:

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

    (vm)$ export PYTHONPATH="$PYTHONPATH:/usr/share/tpu/models"
    
  2. Acesse o diretório na instância de VM do Compute Engine em que o modelo ResNet-50 está pré-instalado:

    (vm)$ cd /usr/share/tpu/models/official/resnet/
    
  3. Execute o script de treinamento:

    (vm)$ python resnet_main.py \
      --tpu=$TPU_NAME \
      --model_dir=${STORAGE_BUCKET}/resnet \
      --bigtable_project=$PROJECT \
      --bigtable_instance=$BIGTABLE_INSTANCE \
      --bigtable_table=$TABLE_NAME \
      --bigtable_column_family=$FAMILY_NAME \
      --bigtable_column_qualifier=$COLUMN_QUALIFIER \
      --bigtable_train_prefix=$ROW_PREFIX_TRAIN \
      --bigtable_eval_prefix=$ROW_PREFIX_EVAL
    
    • --tpu especifica o nome do Cloud TPU. Observe que o ctpu transmite esse nome para a instância de VM do Compute Engine como uma variável de ambiente (TPU_NAME).
    • --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 um diretório para carregar os dados do checkpoint atual e armazenar novos checkpoints.
    • --bigtable_project especifica o identificador do projeto do GCP referente à instância do Cloud Bigtable que contém seus dados de treinamento. Se você não fornecer esse valor, o programa presumirá que o Cloud TPU e a instância do Cloud Bigtable estão no mesmo projeto do GCP.
    • --bigtable_instance especifica o código da instância do Cloud Bigtable que contém seus dados de treinamento.
    • --bigtable_table especifica o nome da tabela do Cloud Bigtable que contém os dados de treinamento.
    • --bigtable_column_family especifica o nome do grupo do Cloud Bigtable.
    • --bigtable_column_qualifier especifica o nome do qualificador de colunas do Cloud Bigtable. Para ver uma descrição do modelo de armazenamento, consulte a visão geral do Cloud Bigtable.

O que esperar

O modelo ResNet-50 é treinado pelo procedimento acima por 90 períodos e avaliado a cada 1.251 etapas. Para informações sobre os valores padrão usados pelo modelo e as sinalizações que possibilitam a alteração dos padrões, consulte o código e o README para o modelo TensorFlow ResNet-50. Com as sinalizações padrão, o modelo é treinado com precisão maior que 76%.

Em nossos testes, o Cloud Bigtable fornece um desempenho de alta capacidade para cargas de trabalho, como treinamento ImageNet, com capacidade de verificação de centenas de megabytes por segundo por nó.

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
    
  1. Quando não precisar mais dos dados de treinamento no Cloud Bigtable, execute o comando a seguir no Cloud Shell para excluir a instância do Cloud Bigtable. A variável BIGTABLE_INSTANCE precisa representar o código da instância do Cloud Bigtable usada anteriormente.

    $ cbt deleteinstance $BIGTABLE_INSTANCE
    

A seguir

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

Enviar comentários sobre…