Ce tutoriel explique comment utiliser les GPU sur Dataflow pour traiter les images satellite Landsat 8 et en générer un rendu sous forme de fichiers JPEG. Le tutoriel est basé sur l'exemple Traitement d'images satellite Landsat avec des GPU.
Objectifs
- Créez une image Docker pour Dataflow contenant TensorFlow avec la compatibilité GPU.
- Exécutez une tâche Dataflow à l'aide de GPU.
Coûts
Ce tutoriel utilise des composants facturables de Google Cloud, dont :
- Cloud Storage
- Dataflow
- Artifact Registry
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
- Sign in to your Google Cloud 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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataflow, Cloud Build, and Artifact Registry APIs:
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.
-
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
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Dataflow, Cloud Build, and Artifact Registry APIs:
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.
-
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
PROJECT_ID
with your project ID. -
Replace
USER_IDENTIFIER
with the identifier for your user account. For example,user:myemail@example.com
. - Replace
ROLE
with each individual role.
- Replace
Attribuez des rôles à votre compte de service Compute Engine par défaut. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants :
roles/dataflow.admin
,roles/dataflow.worker
,roles/bigquery.dataEditor
,roles/pubsub.editor
,roles/storage.objectAdmin
etroles/artifactregistry.reader
.gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
- Remplacez
PROJECT_ID
par l'ID du projet. - Remplacez
PROJECT_NUMBER
par votre numéro de projet. Pour trouver votre numéro de projet, consultez Identifier des projets. - Remplacez
SERVICE_ACCOUNT_ROLE
par chaque rôle individuel.
- Remplacez
- Pour stocker les fichiers image de sortie JPEG à l'aide de ce tutoriel, créez un bucket Cloud Storage :
- In the Google Cloud console, go to the Cloud Storage Buckets page.
- Click Create bucket.
- On the Create a bucket page, enter your bucket information. To go to the next
step, click Continue.
- For Name your bucket, enter a unique bucket name. Don't include sensitive information in the bucket name, because the bucket namespace is global and publicly visible.
-
For Choose where to store your data, do the following:
- Select a Location type option.
- Select a Location option.
- For Choose a default storage class for your data, select the following: Standard.
- For Choose how to control access to objects, select an Access control option.
- For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
- Click Create.
Préparer votre environnement de travail
Téléchargez les fichiers de démarrage, puis créez votre dépôt Artifact Registry.
Télécharger les fichiers de démarrage
Téléchargez les fichiers de démarrage, puis modifiez les répertoires.
Clonez le dépôt
python-docs-samples
.git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Accédez au répertoire de l'exemple de code.
cd python-docs-samples/dataflow/gpu-examples/tensorflow-landsat
Configurer Artifact Registry
Créez un dépôt Artifact Registry afin de pouvoir importer des artefacts. Chaque dépôt peut contenir des artefacts pour un seul format compatible.
L'ensemble du contenu du dépôt est chiffré soit à l'aide de clés appartenant à Google et gérées par Google, soit à l'aide de clés de chiffrement gérées par le client. Artifact Registry utilise par défaut les clés appartenant à Google et gérées par Google, et aucune configuration n'est requise pour cette option.
Vous devez au moins disposer d'un accès Rédacteur à Artifact Registry au dépôt.
Exécutez la commande suivante pour créer un dépôt. La commande utilise l'option --async
et affiche immédiatement le résultat, sans attendre la fin de l'opération en cours.
gcloud artifacts repositories create REPOSITORY \
--repository-format=docker \
--location=LOCATION \
--async
Remplacez REPOSITORY par le nom que vous souhaitez donner à votre dépôt. Pour chaque emplacement de dépôt d'un projet, les noms de dépôt doivent être uniques.
Avant de pouvoir transférer ou extraire des images, configurez Docker afin d'authentifier les requêtes envoyées à Artifact Registry. Pour configurer l'authentification auprès des dépôts Docker, exécutez la commande suivante :
gcloud auth configure-docker LOCATION-docker.pkg.dev
La commande met à jour votre configuration Docker. Vous pouvez désormais vous connecter à Artifact Registry dans votre projet Google Cloud pour transférer des images.
Compiler l'image Docker
Cloud Build vous permet de créer une image Docker à l'aide d'un fichier Dockerfile et de l'enregistrer dans Artifact Registry, où l'image est accessible aux autres produits Google Cloud.
Créez l'image de conteneur à l'aide du fichier de configuration build.yaml
.
gcloud builds submit --config build.yaml
Exécuter la tâche Dataflow à l'aide de GPU
Le bloc de code suivant montre comment lancer ce pipeline Dataflow à l'aide de GPU.
Nous exécutons le pipeline Dataflow à l'aide du fichier de configuration 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
Remplacez les éléments suivants :
- PROJECT_NAME : nom du projet Google Cloud
- BUCKET_NAME : nom du bucket Cloud Storage (sans le préfixe
gs://
)
Après avoir exécuté ce pipeline, attendez que la commande se termine. Si vous quittez l'interface système, vous risquez de perdre les variables d'environnement que vous avez définies.
Pour éviter de partager le GPU entre plusieurs processus de nœud de calcul, cet exemple utilise un type de machine avec un processeur virtuel. Les exigences de mémoire du pipeline sont traitées en utilisant 13 Go d'extension de mémoire. Pour en savoir plus, consultez la section GPU et parallélisme des nœuds de calcul.
Afficher les résultats
Le pipeline de tensorflow-landsat/main.py
traite les images satellite Landsat 8 et en génère un rendu sous forme de fichiers JPEG. Pour afficher ces fichiers, procédez comme suit :
Répertoriez les fichiers JPEG de sortie avec des détails à l'aide de Google Cloud CLI.
gcloud storage ls "gs://$BUCKET/samples/dataflow/landsat/" --long --readable-sizes
Copiez les fichiers dans votre répertoire local.
mkdir outputs gcloud storage cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/
Ouvrez ces fichiers image à l'aide de la visionneuse d'images de votre choix.
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- 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.
Étape suivante
- Consultez un exemple TensorFlow compatible GPU minimal.
- Consultez un exemple PyTorch compatible GPU minimal.
- Apprenez-en plus sur la compatibilité GPU sur Dataflow.
- Parcourez les tâches pour l'utilisation des GPU.
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Cloud Architecture Center.