Procesa imágenes satelitales de Landsat con GPU

En este instructivo, se muestra cómo usar GPU en Dataflow para procesar imágenes satelitales de Landsat 8 y procesarlas como archivos JPEG. El instructivo se basa en el ejemplo Procesa imágenes satelitales de Landsat con GPU.

Objetivos

  • Compilar una imagen de Docker para Dataflow que tenga TensorFlow compatible con GPU
  • Ejecutar un trabajo de Dataflow con GPU

Costos

En este instructivo, se usan componentes facturables de Google Cloud Platform, incluidos los siguientes:

  • Cloud Storage
  • Dataflow
  • Artifact Registry

Usa la calculadora de precios para generar una estimación de los costos según el uso previsto.

Antes de comenzar

  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. Si usas un proveedor de identidad externo (IdP), primero debes Acceder a la gcloud CLI con tu identidad federada.

  4. Para inicializar gcloud CLI, ejecuta el siguiente 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 role (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. Si usas un proveedor de identidad externo (IdP), primero debes Acceder a la gcloud CLI con tu identidad federada.

  12. Para inicializar gcloud CLI, ejecuta el siguiente 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 role (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. Otorga roles a tu cuenta de servicio predeterminada de Compute Engine. Ejecuta el siguiente comando una vez para cada uno de los siguientes roles de IAM: roles/dataflow.admin, roles/dataflow.worker, roles/bigquery.dataEditor, roles/pubsub.editor, roles/storage.objectAdmin y roles/artifactregistry.reader.

    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
    • Reemplaza PROJECT_ID con el ID del proyecto.
    • Reemplaza PROJECT_NUMBER por el número del proyecto. Para encontrar el número de tu proyecto, consulta Identifica proyectos.
    • Reemplaza SERVICE_ACCOUNT_ROLE por cada rol individual.
  19. Para almacenar los archivos de imagen JPEG de salida de este instructivo, crea un bucket de Cloud Storage:
    1. Create a Cloud Storage bucket and configure it as follows:
      • Set the storage class to S (Estándar).
      • Configura la ubicación de almacenamiento de la siguiente manera: US (Estados Unidos).
      • Reemplaza BUCKET_NAME por un nombre de bucket único. No incluyas información sensible en el nombre del bucket porque su espacio de nombres es global y públicamente visible.
      • gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US

Prepara tu entorno de trabajo

Descarga los archivos iniciales y, luego, crea tu repositorio de Artifact Registry.

Descarga los archivos de inicio

Descarga los archivos iniciales y, luego, cambia los directorios.

  1. Clona el repositorio python-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Dirígete al directorio del código de muestra.

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

Configura Artifact Registry

Crea un repositorio de Artifact Registry para poder subir artefactos. Cada repositorio puede contener artefactos para un formato compatible único.

Todo el contenido del repositorio se encripta con claves de encriptación Google-owned and Google-managed encryption keys o administradas por el cliente. Artifact Registry usaGoogle-owned and Google-managed encryption keys de forma predeterminada y no se requiere ninguna configuración para esta opción.

Debes tener al menos el acceso de escritor de Artifact Registry al repositorio.

Ejecuta el siguiente comando para crear un repositorio nuevo. El comando usa la marca --async y se muestra de inmediato, sin necesidad de esperar a que se complete la operación en curso.

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

Reemplaza REPOSITORY por un nombre para tu repositorio. Para la ubicación de cada repositorio en un proyecto, los nombres de los repositorios deben ser únicos.

Antes de poder enviar o extraer imágenes, configura Docker para autenticar solicitudes de Artifact Registry. Para configurar la autenticación en los repositorios de Docker, ejecuta el siguiente comando:

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

El comando actualiza tu configuración de Docker. Ahora puedes conectarte con Artifact Registry en tu proyecto Google Cloud para enviar imágenes.

Compila la imagen de Docker

Cloud Build te permite compilar una imagen de Docker con un Dockerfile y guardarla en Artifact Registry, donde la imagen es accesible para otros productos deGoogle Cloud .

Compila la imagen del contenedor con el archivo de configuración build.yaml.

gcloud builds submit --config build.yaml

Ejecuta el trabajo de Dataflow con GPU

En el siguiente bloque de código, se muestra cómo iniciar esta canalización de Dataflow con GPU.

Ejecutamos la canalización de Dataflow mediante el archivo de configuración 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

Reemplaza lo siguiente:

  • PROJECT_NAME: El nombre del proyecto de Google Cloud
  • BUCKET_NAME: Es el nombre del bucket de Cloud Storage (sin el prefijo gs://).

Después de ejecutar esta canalización, espera a que el comando termine. Si sales de tu shell, es posible que pierdas las variables de entorno que configuraste.

Para evitar compartir la GPU entre varios procesos de trabajador, en esta muestra se usa un tipo de máquina con 1 CPU virtual. Los requisitos de memoria de la canalización se abordan con 13 GB de memoria extendida. Para obtener más información, consulta Paralelismo de trabajadores y GPU.

Ve los resultados

La canalización en tensorflow-landsat/main.py procesa imágenes satelitales de Landsat 8 y las procesa como archivos JPEG. Para ver estos archivos, sigue los pasos que se indican a continuación:

  1. Enumera los archivos JPEG de salida con detalles mediante Google Cloud CLI.

    gcloud storage ls "gs://$BUCKET/samples/dataflow/landsat/" --long --readable-sizes
    
  2. Copia los archivos en tu directorio local.

    mkdir outputs
    gcloud storage cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/
    
  3. Abre estos archivos de imagen con el visor de imágenes que prefieras.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el instructivo.

Para borrar el proyecto, haz lo siguiente:

  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.

¿Qué sigue?