Processamento de imagens de satélite Landsat com GPUs


Este tutorial mostra como usar GPUs no Dataflow para processar imagens de satélite Landsat 8 e renderizá-las como ficheiros JPEG. O tutorial baseia-se no exemplo Processamento de imagens de satélite Landsat com GPUs.

Objetivos

  • Crie uma imagem do Docker para o Dataflow que tenha o TensorFlow com suporte de GPU.
  • Execute uma tarefa do Dataflow com GPUs.

Custos

Este tutorial usa componentes faturáveis da Google Cloud Platform, incluindo:

  • Cloud Storage
  • Dataflow
  • Artifact Registry

Use a calculadora de preços para gerar uma estimativa de custos com base na sua utilização prevista.

Antes de começar

  1. Sign in to your Google Cloud Platform account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Dataflow, Cloud Build, and Artifact Registry APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  8. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

  9. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Replace the following:

    • PROJECT_ID: your project ID.
    • USER_IDENTIFIER: the identifier for your user account—for example, myemail@example.com.
    • ROLE: the IAM role that you grant to your user account.
  10. Install the Google Cloud CLI.

  11. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  12. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  13. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  14. Verify that billing is enabled for your Google Cloud project.

  15. Enable the Dataflow, Cloud Build, and Artifact Registry APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  16. If you're using a local shell, then create local authentication credentials for your user account:

    gcloud auth application-default login

    You don't need to do this if you're using Cloud Shell.

    If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

  17. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Replace the following:

    • PROJECT_ID: your project ID.
    • USER_IDENTIFIER: the identifier for your user account—for example, myemail@example.com.
    • ROLE: the IAM role that you grant to your user account.
  18. Conceda funções à conta de serviço predefinida do Compute Engine. Execute o seguinte comando uma vez para cada uma das seguintes funções 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 pelo ID do seu projeto.
    • Substitua PROJECT_NUMBER pelo número do seu projeto. Para encontrar o número do projeto, consulte o artigo Identifique projetos.
    • Substitua SERVICE_ACCOUNT_ROLE por cada função individual.
  19. Para armazenar os ficheiros de imagem JPEG de saída deste tutorial, crie um contentor do Cloud Storage:
    1. Create a Cloud Storage bucket and configure it as follows:
      • Set the storage class to S (Padrão).
      • Defina a localização do armazenamento para o seguinte: US (Estados Unidos).
      • Substitua BUCKET_NAME por um nome de contentor exclusivo. Não inclua informações confidenciais no nome do contentor, uma vez que o espaço de nomes do contentor é global e visível publicamente.
      • gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US

Prepare o seu ambiente de trabalho

Transfira os ficheiros iniciais e, em seguida, crie o seu repositório do Artifact Registry.

Transfira os ficheiros iniciais

Transfira os ficheiros iniciais e, em seguida, altere os diretórios.

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

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Navegue para o diretório de código de exemplo.

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

Configure o Artifact Registry

Crie um repositório do Artifact Registry para poder carregar artefactos. Cada repositório pode conter artefactos para um único formato suportado.

Todo o conteúdo do repositório é encriptado através de Google-owned and Google-managed encryption keys ou chaves de encriptação geridas pelo cliente. O Artifact Registry usa o Google-owned and Google-managed encryption keys por predefinição e não é necessária nenhuma configuração para esta opção.

Tem de ter, pelo menos, o acesso de gravação do Artifact Registry ao repositório.

Execute o seguinte comando para criar um novo repositório. O comando usa a flag --async e é devolvido imediatamente, sem esperar que a operação em curso seja concluída.

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

Substitua REPOSITORY por um nome para o seu repositório. Para cada localização do repositório num projeto, os nomes dos repositórios têm de ser exclusivos.

Antes de poder enviar ou extrair imagens, configure o Docker para autenticar pedidos 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. Já pode estabelecer ligação ao Artifact Registry no seu Google Cloud projeto para enviar imagens.

Crie a imagem de Docker

O Cloud Build permite-lhe criar uma imagem do Docker com um Dockerfile e guardá-la no Artifact Registry, onde a imagem fica acessível a outrosGoogle Cloud produtos.

Crie a imagem do contentor com o ficheiro de configuração build.yaml.

gcloud builds submit --config build.yaml

Execute a tarefa do Dataflow com GPUs

O bloco de código seguinte demonstra como iniciar este pipeline do Dataflow com GPUs.

Executamos o pipeline do Dataflow através do ficheiro 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 o seguinte:

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

Depois de executar este pipeline, aguarde que o comando termine. Se sair do seu shell, pode perder as variáveis de ambiente que definiu.

Para evitar partilhar a GPU entre vários processos de trabalho, este exemplo usa um tipo de máquina com 1 vCPU. Os requisitos de memória do pipeline são resolvidos através da utilização de 13 GB de memória expandida. Para mais informações, leia o artigo GPUs e paralelismo de trabalhadores.

Veja os resultados

O pipeline em tensorflow-landsat/main.py processa imagens de satélite Landsat 8 e renderiza-as como ficheiros JPEG. Siga os passos seguintes para ver estes ficheiros.

  1. Liste os ficheiros JPEG de saída com detalhes através da CLI do Google Cloud.

    gcloud storage ls "gs://$BUCKET/samples/dataflow/landsat/" --long --readable-sizes
    
  2. Copie os ficheiros para o diretório local.

    mkdir outputs
    gcloud storage cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/
    
  3. Abra estes ficheiros de imagem com o visualizador de imagens da sua escolha.

Limpar

Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

Elimine o projeto

A forma mais fácil de eliminar a faturação é eliminar o projeto que criou para o tutorial.

Para eliminar o projeto:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

O que se segue?