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. O tutorial é baseado no exemplo Como processar imagens de satélite da Landsat com GPUs (em inglês).

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
  • Artifact 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. Instale a CLI do Google Cloud.
  3. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  4. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  5. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  6. Ative as APIs Dataflow, Cloud Build, and Artifact Registry:

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  7. Crie as credenciais de autenticação para sua Conta do Google:

    gcloud auth application-default login
  8. Atribua os papéis à sua Conta do Google. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Substitua PROJECT_ID pela ID do seu projeto.
    • Substitua EMAIL_ADDRESS pelo seu endereço de e-mail.
    • Substitua ROLE por cada papel individual.
  9. Instale a CLI do Google Cloud.
  10. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  11. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  12. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  13. Ative as APIs Dataflow, Cloud Build, and Artifact Registry:

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  14. Crie as credenciais de autenticação para sua Conta do Google:

    gcloud auth application-default login
  15. Atribua os papéis à sua Conta do Google. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Substitua PROJECT_ID pela ID do seu projeto.
    • Substitua EMAIL_ADDRESS pelo seu endereço de e-mail.
    • Substitua ROLE por cada papel individual.
  16. Conceda papéis à conta de serviço padrão do Compute Engine. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM: roles/dataflow.admin, roles/dataflow.worker, roles/bigquery.dataEditor, roles/pubsub.editor, roles/storage.objectAdmin e roles/artifactregistry.reader.

    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
    • Substitua PROJECT_ID pela ID do seu projeto.
    • Substitua PROJECT_NUMBER pelo número do projeto. Para encontrar o número do projeto, consulte Identificar projetos.
    • Substitua SERVICE_ACCOUNT_ROLE por cada papel individual.
  17. 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 Buckets do Cloud Storage.

      Acessar a página "Buckets"

    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.

Prepare o ambiente de trabalho

Faça o download dos arquivos iniciais e crie o repositório do Artifact Registry.

Fazer o download dos arquivos iniciais

Faça o download dos arquivos iniciais e altere os diretórios.

  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
    

Configurar o Artifact Registry

Crie um repositório do Artifact Registry para fazer upload de artefatos. Cada repositório pode conter artefatos para um único formato compatível.

Todo o conteúdo do repositório é criptografado usando chaves de criptografia gerenciadas pelo Google ou gerenciadas pelo cliente. O Artifact Registry usa chaves de criptografia gerenciadas pelo Google por padrão e nenhuma configuração é necessária para essa opção.

É preciso ter pelo menos o acesso "Gravador do Artifact Registry" no repositório.

Execute o comando abaixo para criar um novo repositório. O comando usa a sinalização --async e retorna imediatamente, sem aguardar a conclusão da operação.

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=LOCATION \
    --async

Substitua REPOSITORY por um nome para o repositório. Para cada local de repositório em um projeto, os nomes dos repositórios precisam ser exclusivos.

Antes de enviar ou extrair imagens, configure o Docker para autenticar solicitações para o Artifact Registry. Para configurar a autenticação nos repositórios do Docker, execute o seguinte comando:

gcloud auth configure-docker LOCATION-docker.pkg.dev

O comando atualiza a configuração do Docker. Agora é possível se conectar ao Artifact Registry no seu projeto do Google Cloud para enviar imagens.

Compilar a imagem Docker

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

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

gcloud builds submit --config build.yaml

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.

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.

Exclua o projeto

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

Para excluir o projeto:

  1. No Console do Google 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