Traitement d'images satellite Landsat à l'aide de GPU


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

  1. 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.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. 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.

  5. Make sure that billing is enabled for your Google Cloud project.

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

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  7. 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.

  8. 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.
  9. Install the Google Cloud CLI.
  10. To initialize the gcloud CLI, run the following command:

    gcloud init
  11. 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.

  12. Make sure that billing is enabled for your Google Cloud project.

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

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  14. 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.

  15. 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.
  16. 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 et roles/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.
  17. Pour stocker les fichiers image de sortie JPEG à l'aide de ce tutoriel, créez un bucket Cloud Storage :
    1. In the Google Cloud console, go to the Cloud Storage Buckets page.

      Go to Buckets page

    2. Click Create bucket.
    3. 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.
    4. 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.

  1. Clonez le dépôt python-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. 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 :

  1. 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
    
  2. Copiez les fichiers dans votre répertoire local.

    mkdir outputs
    gcloud storage cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/
    
  3. 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 :

  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.

Étape suivante