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. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Installez Google Cloud CLI.
  3. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  4. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  6. Activer les API Dataflow, Cloud Build, and Artifact Registry :

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  7. Créez des identifiants d'authentification locaux pour votre compte Google :

    gcloud auth application-default login
  8. Attribuez des rôles à votre compte Google. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants : roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • en remplaçant PROJECT_ID par l'ID de votre projet :
    • Remplacez EMAIL_ADDRESS par votre adresse e-mail.
    • Remplacez ROLE par chaque rôle individuel.
  9. Installez Google Cloud CLI.
  10. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  11. Créez ou sélectionnez un projet Google Cloud.

    • Créez un projet Google Cloud :

      gcloud projects create PROJECT_ID

      Remplacez PROJECT_ID par le nom du projet Google Cloud que vous créez.

    • Sélectionnez le projet Google Cloud que vous avez créé :

      gcloud config set project PROJECT_ID

      Remplacez PROJECT_ID par le nom de votre projet Google Cloud.

  12. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  13. Activer les API Dataflow, Cloud Build, and Artifact Registry :

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  14. Créez des identifiants d'authentification locaux pour votre compte Google :

    gcloud auth application-default login
  15. Attribuez des rôles à votre compte Google. Exécutez la commande suivante une fois pour chacun des rôles IAM suivants : roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • en remplaçant PROJECT_ID par l'ID de votre projet :
    • Remplacez EMAIL_ADDRESS par votre adresse e-mail.
    • Remplacez ROLE par chaque rôle individuel.
  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. Dans la console Google Cloud, accédez à la page Buckets Cloud Storage.

      Accéder à la page "Buckets"

    2. Cliquez sur Créer un bucket.
    3. Sur la page Créer un bucket, saisissez les informations concernant votre bucket. Pour passer à l'étape suivante, cliquez sur Continuer.
      • Pour nommer votre bucket, saisissez un nom unique. N'incluez aucune information sensible dans le nom des buckets, car leur espace de noms est global et visible par tous.
      • Pour Choisir l'emplacement de stockage des données, procédez comme suit :
        • Sélectionnez une option de type d'emplacement.
        • Sélectionnez une option Location (Emplacement).
      • Pour Choisir une classe de stockage par défaut pour vos données, sélectionnez l'option suivante : Standard
      • Pour le champ Choisir comment contrôler l'accès aux objets, sélectionnez une option de Contrôle des accès.
      • Sous Paramètres avancés (facultatif), choisissez une méthode de chiffrement, une règle de conservation ou des libellés de bucket.
    4. Cliquez sur Create (Créer).

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é à l'aide de clés de chiffrement gérées par le client ou par Google. Artifact Registry utilise les clés de chiffrement gérées par Google par défaut, 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 informations détaillées à l'aide de gsutil.

    gsutil ls -lh "gs://$BUCKET/samples/dataflow/landsat/"
    
  2. Copiez les fichiers dans votre répertoire local.

    mkdir outputs
    gsutil -m cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/
    
  3. Ouvrez ces fichiers image à l'aide de la visionneuse d'images de votre choix.

Nettoyer

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. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Étape suivante