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
- 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.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
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 theresourcemanager.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.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable dataflow
cloudbuild.googleapis.com artifactregistry.googleapis.com -
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.
-
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.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
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 theresourcemanager.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.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enable
permission. Learn how to grant roles.gcloud services enable dataflow
cloudbuild.googleapis.com artifactregistry.googleapis.com -
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.
-
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.
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
yroles/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.
- Sustituye
- Para almacenar los archivos de imagen JPEG de salida de este tutorial, crea un
cubo de Cloud Storage:
-
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
-
Set the storage class to
-
Create a Cloud Storage bucket and configure it as follows:
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.
Clona el repositorio
python-docs-samples
.git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
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.
Lista los archivos JPEG de salida con detalles mediante Google Cloud CLI.
gcloud storage ls "gs://$BUCKET/samples/dataflow/landsat/" --long --readable-sizes
Copia los archivos en tu directorio local.
mkdir outputs gcloud storage cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/
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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Siguientes pasos
- Consulta un ejemplo mínimo de TensorFlow con GPU.
- Consulta un ejemplo mínimo de PyTorch con GPU.
- Consulta más información sobre la compatibilidad con GPUs en Dataflow.
- Busca las tareas de Usar GPUs.
- Consulta arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Centro de arquitectura de Cloud.