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 fait appel à des composants payants de Google Cloud, y compris :

  • 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 sans frais pour exécuter, tester et déployer des charges de travail.
  2. Installez la Google Cloud CLI.

  3. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  4. Pour initialiser la gcloud CLI, exécutez la commande suivante :

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

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • 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 .

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

  7. Activez les API Dataflow, Cloud Build et Artifact Registry :

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  8. Si vous utilisez un shell local, créez des identifiants d'authentification locaux pour votre compte utilisateur :

    gcloud auth application-default login

    Vous n'avez pas besoin de le faire si vous utilisez Cloud Shell.

    Si une erreur d'authentification est renvoyée et que vous utilisez un fournisseur d'identité (IdP) externe, vérifiez que vous vous êtes connecté à la gcloud CLI avec votre identité fédérée.

  9. Attribuez des rôles à votre compte utilisateur. 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:USER_IDENTIFIER" --role=ROLE

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet
    • USER_IDENTIFIER : identifiant de votre compte d'utilisateur. Par exemple, myemail@example.com.
    • ROLE : rôle IAM que vous accordez à votre compte utilisateur.
  10. Installez la Google Cloud CLI.

  11. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  12. Pour initialiser la gcloud CLI, exécutez la commande suivante :

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

    Rôles requis pour sélectionner ou créer un projet

    • Sélectionnez un projet : la sélection d'un projet ne nécessite pas de rôle IAM spécifique. Vous pouvez sélectionner n'importe quel projet pour lequel un rôle vous a été attribué.
    • Créer un projet : pour créer un projet, vous devez disposer du rôle Créateur de projet (roles/resourcemanager.projectCreator), qui contient l'autorisation resourcemanager.projects.create. Découvrez comment attribuer des rôles.
    • 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 .

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

  15. Activez les API Dataflow, Cloud Build et Artifact Registry :

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur Service Usage (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  16. Si vous utilisez un shell local, créez des identifiants d'authentification locaux pour votre compte utilisateur :

    gcloud auth application-default login

    Vous n'avez pas besoin de le faire si vous utilisez Cloud Shell.

    Si une erreur d'authentification est renvoyée et que vous utilisez un fournisseur d'identité (IdP) externe, vérifiez que vous vous êtes connecté à la gcloud CLI avec votre identité fédérée.

  17. Attribuez des rôles à votre compte utilisateur. 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:USER_IDENTIFIER" --role=ROLE

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet
    • USER_IDENTIFIER : identifiant de votre compte d'utilisateur. Par exemple, myemail@example.com.
    • ROLE : rôle IAM que vous accordez à votre compte utilisateur.
  18. 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.
  19. 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.
    3. Sur la page Créer un bucket, saisissez les informations concernant votre bucket. Pour passer à l'étape suivante, cliquez sur Continuer.
      1. 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.
      2. Dans la section Choisir l'emplacement de stockage de vos données, procédez comme suit :
        1. Sélectionnez un type d'emplacement.
        2. Choisissez un emplacement où les données de votre bucket seront stockées de manière permanente dans le menu déroulant Type d'emplacement.
          • Si vous sélectionnez le type d'emplacement birégional, vous pouvez également choisir d'activer la réplication turbo à l'aide de la case à cocher correspondante.
        3. Pour configurer la réplication entre buckets, sélectionnez Ajouter une réplication entre buckets via le service de transfert de stockage et suivez ces étapes :

          Configurer la réplication entre buckets

          1. Dans le menu Bucket, sélectionnez un bucket.
          2. Dans la section Paramètres de réplication, cliquez sur Configurer pour configurer les paramètres du job de réplication.

            Le volet Configurer la réplication entre buckets s'affiche.

            • Pour filtrer les objets à répliquer en fonction du préfixe de leur nom, saisissez le préfixe avec lequel vous souhaitez inclure ou exclure des objets, puis cliquez sur Ajouter un préfixe.
            • Pour définir une classe de stockage pour les objets répliqués, sélectionnez-en une dans le menu Classe de stockage. Si vous ignorez cette étape, les objets répliqués utiliseront la classe de stockage par défaut du bucket de destination.
            • Cliquez sur OK.
      3. Dans la section Choisir comment stocker vos données, procédez comme suit :
        1. Dans la section Définir une classe par défaut, sélectionnez Standard.
        2. Pour activer l'espace de noms hiérarchique, dans la section Optimiser l'espace de stockage pour les charges de travail utilisant beaucoup de données, sélectionnez Activer l'espace de noms hiérarchique sur ce bucket.
      4. Dans la section Choisir comment contrôler l'accès aux objets, indiquez si votre bucket applique ou non la protection contre l'accès public et sélectionnez une méthode de contrôle des accès pour les objets de votre bucket.
      5. Dans la section Choisir comment protéger les données d'objet, procédez comme suit :
        • Sous Protection des données, sélectionnez les options que vous souhaitez définir pour votre bucket.
          • Pour activer la suppression réversible, cochez la case Règle de suppression réversible (pour la récupération de données), puis spécifiez le nombre de jours pendant lesquels vous souhaitez conserver les objets après leur suppression.
          • Pour configurer la gestion des versions d'objets, cochez la case Gestion des versions des objets (pour le contrôle des versions), puis spécifiez le nombre maximal de versions par objet et le nombre de jours après lesquels les versions obsolètes expirent.
          • Pour activer la règle de conservation sur les objets et les buckets, cochez la case Conservation (pour la conformité), puis procédez comme suit :
            • Pour activer le verrou de conservation des objets, cochez la case Activer la conservation des objets.
            • Pour activer le verrou de bucket, cochez la case Définir une règle de conservation du bucket, puis choisissez une unité de temps et une durée pour votre période de conservation.
        • Pour choisir comment vos données d'objet seront chiffrées, développez la section Chiffrement des données (), puis sélectionnez une méthode de chiffrement des données.
    4. Cliquez sur 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 Google-owned and Google-managed encryption keys ou de clés de chiffrement gérées par le client. Artifact Registry utiliseGoogle-owned and Google-managed encryption keys 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.

Compilez 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 produitsGoogle 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. 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.

Étapes suivantes