Procesar imágenes de satélite Landsat con GPUs


En este tutorial se explica cómo usar GPUs en Dataflow para procesar imágenes de satélite Landsat 8 y renderizarlas como archivos JPEG. El tutorial se basa en el ejemplo Procesar imágenes de satélite Landsat con GPUs.

Objetivos

  • Compila una imagen Docker para Dataflow que tenga TensorFlow con compatibilidad con GPU.
  • Ejecuta una tarea de Dataflow con GPUs.

Costes

En este tutorial se usan componentes facturables de Google Cloud Platform, entre los que se incluyen los siguientes:

  • Cloud Storage
  • Dataflow
  • Artifact Registry

Usa la calculadora de precios para generar una estimación de costes basada en el uso previsto.

Antes de empezar

  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 utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud 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 (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 utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud 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 (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. Concede 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
    • Sustituye PROJECT_ID por el ID del proyecto.
    • Sustituye PROJECT_NUMBER por el número de tu proyecto. Para encontrar el número de tu proyecto, consulta el artículo Identificar proyectos.
    • Sustituye SERVICE_ACCOUNT_ROLE por cada rol individual.
  19. Para almacenar los archivos de imagen JPEG de salida de este tutorial, crea un cubo de Cloud Storage:
    1. Create a Cloud Storage bucket and configure it as follows:
      • Set the storage class to S (Estándar).
      • Define la ubicación de almacenamiento de la siguiente manera: US (Estados Unidos).
      • Sustituye BUCKET_NAME por un nombre de segmento único. No incluyas información sensible en el nombre del segmento, ya que este espacio de nombres es público y visible para todos los usuarios.
      • gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US

Preparar el entorno de trabajo

Descarga los archivos de inicio y, a continuación, crea tu repositorio de Artifact Registry.

Descargar los archivos de inicio

Descarga los archivos de inicio y, a continuación, cambia de directorio.

  1. Clona el repositorio python-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Ve al directorio del código de ejemplo.

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

Configurar Artifact Registry

Crea un repositorio de Artifact Registry para poder subir artefactos. Cada repositorio puede contener artefactos de un solo formato admitido.

Todo el contenido del repositorio se cifra con claves de cifrado gestionadas por el cliente o con Google-owned and Google-managed encryption keys . Artifact Registry usaGoogle-owned and Google-managed encryption keys de forma predeterminada y no es necesario configurar nada para usar esta opción.

Debe tener al menos acceso de escritura de Artifact Registry al repositorio.

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

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

Sustituye REPOSITORY por el nombre que quieras darle al repositorio. Los nombres de los repositorios deben ser únicos en cada ubicación de repositorio de un proyecto.

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

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

El comando actualiza tu configuración de Docker. Ahora puede conectarse a Artifact Registry en su Google Cloud proyecto para enviar imágenes.

Crear la imagen de Docker

Cloud Build te permite crear una imagen Docker mediante un Dockerfile y guardarla en Artifact Registry, donde otros productos deGoogle Cloud pueden acceder a ella.

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

gcloud builds submit --config build.yaml

Ejecutar el trabajo de Dataflow con GPUs

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

Ejecutamos la canalización de Dataflow con 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

Haz los cambios siguientes:

  • PROJECT_NAME: el nombre del proyecto Google Cloud
  • BUCKET_NAME: el nombre del segmento de Cloud Storage (sin el prefijo gs://)

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

Para evitar compartir la GPU entre varios procesos de trabajador, este ejemplo usa un tipo de máquina con 1 vCPU. Los requisitos de memoria de la canalización se cumplen con 13 GB de memoria ampliada. Para obtener más información, consulta GPUs y paralelismo de los trabajadores.

Ver los resultados

La canalización de tensorflow-landsat/main.py procesa imágenes de satélite Landsat 8 y las representa como archivos JPEG. Sigue estos pasos para ver estos archivos.

  1. Lista 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.

Limpieza

Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.

Eliminar el proyecto

La forma más fácil de evitar que te cobren es eliminar el proyecto que has creado para el tutorial.

Para ello, sigue las instrucciones que aparecen a continuación:

  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.

Siguientes pasos