Elaborazione di immagini satellitari Landsat con le GPU


Questo tutorial mostra come utilizzare le GPU su Dataflow per elaborare immagini satellitari Landsat 8 e visualizzarle come file JPEG. Il tutorial si basa sull'esempio Elaborazione di immagini satellitari Landsat con le GPU.

Obiettivi

  • Crea un'immagine Docker per Dataflow che includa TensorFlow con supporto GPU.
  • Esegui un job Dataflow con le GPU.

Costi

Questo tutorial utilizza componenti fatturabili di Google Cloud, tra cui:

  • Cloud Storage
  • Dataflow
  • Artifact Registry

Utilizza il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.

Prima di iniziare

  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. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.

  4. Per inizializzare gcloud CLI, esegui questo comando:

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

  6. Verify that billing is enabled for your Google Cloud project.

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

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

  9. 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.
  10. Install the Google Cloud CLI.

  11. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.

  12. Per inizializzare gcloud CLI, esegui questo comando:

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

  14. Verify that billing is enabled for your Google Cloud project.

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

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

  17. 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.
  18. Concedi ruoli al account di servizio Compute Engine predefinito. Esegui il seguente comando una volta per ciascuno dei seguenti ruoli IAM: roles/dataflow.admin, roles/dataflow.worker, roles/bigquery.dataEditor, roles/pubsub.editor, roles/storage.objectAdmin, e roles/artifactregistry.reader.

    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
    • Sostituisci PROJECT_ID con l'ID progetto.
    • Sostituisci PROJECT_NUMBER con il numero del tuo progetto. Per trovare il numero di progetto, consulta Identificare i progetti.
    • Sostituisci SERVICE_ACCOUNT_ROLE con ogni singolo ruolo.
  19. Per archiviare i file immagine JPEG di output di questo tutorial, crea un bucket Cloud Storage:
    1. Create a Cloud Storage bucket and configure it as follows:
      • Set the storage class to S (Standard).
      • Imposta la posizione di archiviazione su: US (Stati Uniti).
      • Sostituisci BUCKET_NAME con un nome di bucket univoco. Non includere informazioni sensibili nel nome del bucket perché lo spazio dei nomi dei bucket è globale e visibile pubblicamente.
      • gcloud storage buckets create gs://BUCKET_NAME --default-storage-class STANDARD --location US

Prepara l'ambiente di lavoro

Scarica i file di base, quindi crea il repository Artifact Registry.

Scaricare i file iniziali

Scarica i file iniziali e poi cambia directory.

  1. Clona il repository python-docs-samples.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Vai alla directory del codice di esempio.

    cd python-docs-samples/dataflow/gpu-examples/tensorflow-landsat
    

Configura Artifact Registry

Crea un repository Artifact Registry per poter caricare gli artefatti. Ogni repository può contenere artefatti per un singolo formato supportato.

Tutti i contenuti del repository sono criptati utilizzando Google-owned and Google-managed encryption keys o chiavi di crittografia gestite dal cliente. Artifact Registry utilizza Google-owned and Google-managed encryption keys per impostazione predefinita e non è richiesta alcuna configurazione per questa opzione.

Devi disporre almeno dell'accesso di scrittura di Artifact Registry al repository.

Esegui questo comando per creare un nuovo repository. Il comando utilizza il flag --async e viene restituito immediatamente, senza attendere il completamento dell'operazione in corso.

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=LOCATION \
    --async

Sostituisci REPOSITORY con un nome per il repository. Per ogni posizione del repository in un progetto, i nomi dei repository devono essere univoci.

Prima di eseguire il push o il pull delle immagini, configura Docker per autenticare le richieste per Artifact Registry. Per configurare l'autenticazione nei repository Docker, esegui il seguente comando:

gcloud auth configure-docker LOCATION-docker.pkg.dev

Il comando aggiorna la configurazione Docker. Ora puoi connetterti con Artifact Registry nel tuo progetto Google Cloud per eseguire il push delle immagini.

Crea l'immagine Docker

Cloud Build ti consente di creare un'immagine Docker utilizzando un Dockerfile e di salvarla in Artifact Registry, dove l'immagine è accessibile ad altri prodottiGoogle Cloud .

Crea l'immagine container utilizzando il file di configurazione build.yaml.

gcloud builds submit --config build.yaml

Esegui il job Dataflow con le GPU

Il seguente blocco di codice mostra come avviare questa pipeline Dataflow con le GPU.

Eseguiamo la pipeline Dataflow utilizzando il file di configurazione 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

Sostituisci quanto segue:

  • PROJECT_NAME: il Google Cloud nome del progetto
  • BUCKET_NAME: il nome del bucket Cloud Storage (senza il prefisso gs://)

Dopo aver eseguito questa pipeline, attendi il completamento del comando. Se esci dalla shell, potresti perdere le variabili di ambiente che hai impostato.

Per evitare di condividere la GPU tra più processi worker, questo esempio utilizza un tipo di macchina con 1 vCPU. I requisiti di memoria della pipeline vengono soddisfatti utilizzando 13 GB di memoria estesa. Per saperne di più, leggi GPU e parallelismo dei worker.

Visualizza i tuoi risultati

La pipeline in tensorflow-landsat/main.py elabora le immagini satellitari Landsat 8 e le esegue il rendering come file JPEG. Per visualizzare questi file, segui questi passaggi.

  1. Elenca i file JPEG di output con i dettagli utilizzando Google Cloud CLI.

    gcloud storage ls "gs://$BUCKET/samples/dataflow/landsat/" --long --readable-sizes
    
  2. Copia i file nella directory locale.

    mkdir outputs
    gcloud storage cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/
    
  3. Apri questi file immagine con il visualizzatore di immagini che preferisci.

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

Il modo più semplice per eliminare la fatturazione è eliminare il progetto creato per il tutorial.

Per eliminare il progetto:

  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.

Passaggi successivi