Como processar imagens de satélite do Landsat com GPUs

Neste tutorial, mostramos como usar GPUs no Dataflow para processar imagens de satélite do Landsat 8 e renderizá-las como arquivos JPEG.

Objetivos

  • Criar uma imagem do Docker para o Dataflow que tenha compatibilidade do TensorFlow com GPU.
  • Executar um job do Dataflow com GPUs

Custos

Neste tutorial, há componentes faturáveis do Google Cloud, entre eles:

  • Cloud Storage
  • Dataflow
  • Container Registry

Use a calculadora de preços para gerar uma estimativa de custos baseada na projeção de uso.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  4. Ative as APIs Dataflow and Cloud Build.

    Ative as APIs

  5. Crie uma conta de serviço:

    1. No Console do Cloud, acesse a página Criar conta de serviço.

      Acesse Criar conta de serviço
    2. Selecione um projeto.
    3. No campo Nome da conta de serviço, insira um nome. O Console do Cloud preenche o campo ID da conta de serviço com base nesse nome.

      No campo Descrição da conta de serviço, insira uma descrição. Por exemplo, Service account for quickstart.

    4. Clique em Criar e continuar.
    5. Clique no campo Selecionar um papel.

      Em Acesso rápido, clique em Básico e em Proprietário.

    6. Clique em Continuar.
    7. Clique em Concluído para terminar a criação da conta de serviço.

      Não feche a janela do navegador. Você vai usá-lo na próxima etapa.

  6. Crie uma chave de conta de serviço:

    1. No Console do Cloud, clique no endereço de e-mail da conta de serviço que você criou.
    2. Clique em Chaves.
    3. Clique em Adicionar chave e em Criar nova chave.
    4. Clique em Criar. O download de um arquivo de chave JSON é feito no seu computador.
    5. Clique em Fechar.
  7. Defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS como o caminho do arquivo JSON que contém a chave da conta de serviço. Essa variável só se aplica à sessão de shell atual. Dessa maneira, se você abrir uma nova sessão, defina a variável novamente.

  8. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  9. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  10. Ative as APIs Dataflow and Cloud Build.

    Ative as APIs

  11. Crie uma conta de serviço:

    1. No Console do Cloud, acesse a página Criar conta de serviço.

      Acesse Criar conta de serviço
    2. Selecione um projeto.
    3. No campo Nome da conta de serviço, insira um nome. O Console do Cloud preenche o campo ID da conta de serviço com base nesse nome.

      No campo Descrição da conta de serviço, insira uma descrição. Por exemplo, Service account for quickstart.

    4. Clique em Criar e continuar.
    5. Clique no campo Selecionar um papel.

      Em Acesso rápido, clique em Básico e em Proprietário.

    6. Clique em Continuar.
    7. Clique em Concluído para terminar a criação da conta de serviço.

      Não feche a janela do navegador. Você vai usá-lo na próxima etapa.

  12. Crie uma chave de conta de serviço:

    1. No Console do Cloud, clique no endereço de e-mail da conta de serviço que você criou.
    2. Clique em Chaves.
    3. Clique em Adicionar chave e em Criar nova chave.
    4. Clique em Criar. O download de um arquivo de chave JSON é feito no seu computador.
    5. Clique em Fechar.
  13. Defina a variável de ambiente GOOGLE_APPLICATION_CREDENTIALS como o caminho do arquivo JSON que contém a chave da conta de serviço. Essa variável só se aplica à sessão de shell atual. Dessa maneira, se você abrir uma nova sessão, defina a variável novamente.

  14. Para armazenar os arquivos de imagem JPEG de saída deste tutorial, crie um bucket do Cloud Storage:
    1. No Console do Cloud, acesse a página Navegador do Cloud Storage.

      Acessar o navegador

    2. Clique em Criar bucket.
    3. Na página Criar um bucket, insira as informações do seu bucket. Para ir à próxima etapa, clique em Continuar.
      • Em Nomear o bucket, insira um nome exclusivo. Não inclua informações confidenciais no nome do bucket já que o namespace dele é global e visível para o público.
      • Em Escolha um local para armazenar seus dados, faça o seguinte:
        • Selecione uma opção de Tipo de local.
        • Escolha uma opção de Local.
      • Em Escolha uma classe de armazenamento padrão para seus dados, selecione o seguinte: Standard.
      • Em Escolha como controlar o acesso a objetos, selecione uma opção de Controle de acesso.
      • Em Configurações avançadas (opcional), especifique um método de criptografia, uma política de retenção ou rótulos de bucket.
    4. Clique em Criar.

Como preparar o ambiente de trabalho

Antes de seguir este tutorial, você precisa configurar o ambiente de desenvolvimento e fazer o download dos arquivos iniciais.

  1. Clone o repositório python-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Navegue até o diretório do código de amostra.

    cd python-docs-samples/dataflow/gpu-examples/tensorflow-landsat
    

Crie a imagem do Docker

O Cloud Build permite criar uma imagem do Docker usando um Dockerfile e salvá-la no Container Registry, em que a imagem é acessível a outros produtos do Google Cloud.

Criamos a imagem do contêiner usando o arquivo de configuração build.yaml.

gcloud builds submit --config build.yaml

Como executar o job do Dataflow com GPUs

O bloco de código a seguir demonstra como iniciar esse pipeline do Dataflow com GPUs.

Executamos o pipeline do Dataflow usando o arquivo de configuração run.yaml.

export PROJECT=PROJECT_NAME
export BUCKET=BUCKET_NAME

export JOB_NAME="satellite-images-$(date +%Y%m%d-%H%M%S)"
export OUTPUT_PATH="gs://$BUCKET/samples/dataflow/landsat/output-images/"
export REGION="us-central1"
export GPU_TYPE="nvidia-tesla-t4"

gcloud builds submit \
    --config run.yaml \
    --substitutions _JOB_NAME=$JOB_NAME,_OUTPUT_PATH=$OUTPUT_PATH,_REGION=$REGION,_GPU_TYPE=$GPU_TYPE \
    --no-source

Substitua:

  • PROJECT_NAME: o nome do projeto do Google Cloud.
  • BUCKET_NAME: o nome do bucket do Cloud Storage (sem o prefixo gs://)

Depois de executar o pipeline, aguarde a conclusão do comando. Se você sair do shell, perderá as variáveis de ambiente que definiu.

Para evitar o compartilhamento da GPU entre vários processos de worker, esta amostra usa um tipo de máquina com uma vCPU. Os requisitos de memória do pipeline são tratados usando 13 GB de memória estendida. Para mais informações, leia GPUs e paralelismo de worker.

Como ver os resultados

O pipeline em tensorflow-landsat/main.py processa imagens do satélite Landsat 8 e as renderiza como arquivos JPEG. Siga estas etapas para ver esses arquivos.

  1. Liste os arquivos JPEG de saída com detalhes usando a gsutil.

    gsutil ls -lh "gs://$BUCKET/samples/dataflow/landsat/"
    
  2. Copie os arquivos para o diretório local.

    mkdir outputs
    gsutil -m cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/
    
  3. Abra esses arquivos de imagem com o visualizador de imagens que você preferir.

Limpeza

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.

Excluir o projeto

O jeito mais fácil de evitar cobranças é excluindo o projeto que você criou para o tutorial.

Para excluir o projeto:

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir