Elaborazione delle immagini satellitari Landsat con GPU


Questo tutorial mostra come utilizzare le GPU in Dataflow per elaborare le immagini satellitari Landsat 8 ed eseguirne il rendering come file JPEG. Il tutorial si basa sull'esempio Elaborazione delle immagini satellitari Landsat con GPU.

Obiettivi

  • Crea un'immagine Docker per Dataflow con TensorFlow compatibile con GPU.
  • Eseguire un job Dataflow con le GPU.

Costi

Questo tutorial utilizza i 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. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Installa Google Cloud CLI.
  3. Per initialize gcloud CLI, esegui questo comando:

    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. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. Abilita le API Dataflow, Cloud Build, and Artifact Registry.

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  7. Crea credenziali di autenticazione locali per il tuo Account Google:

    gcloud auth application-default login
  8. Concedi i ruoli al tuo Account Google. Esegui questo comando una volta per ciascuno dei seguenti ruoli IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Sostituisci PROJECT_ID con l'ID progetto.
    • Sostituisci EMAIL_ADDRESS con il tuo indirizzo email.
    • Sostituisci ROLE con ogni singolo ruolo.
  9. Installa Google Cloud CLI.
  10. Per initialize gcloud CLI, esegui questo comando:

    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. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  13. Abilita le API Dataflow, Cloud Build, and Artifact Registry.

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  14. Crea credenziali di autenticazione locali per il tuo Account Google:

    gcloud auth application-default login
  15. Concedi i ruoli al tuo Account Google. Esegui questo comando una volta per ciascuno dei seguenti ruoli IAM: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Sostituisci PROJECT_ID con l'ID progetto.
    • Sostituisci EMAIL_ADDRESS con il tuo indirizzo email.
    • Sostituisci ROLE con ogni singolo ruolo.
  16. Concedi ruoli al tuo account di servizio predefinito Compute Engine. Esegui il comando seguente 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 del progetto, consulta Identificare i progetti.
    • Sostituisci SERVICE_ACCOUNT_ROLE con ogni singolo ruolo.
  17. Per archiviare i file di immagine JPEG di output da questo tutorial, crea un bucket Cloud Storage:
    1. Nella console Google Cloud, vai alla pagina Bucket di Cloud Storage.

      Vai alla pagina Bucket

    2. Fai clic su Crea bucket.
    3. Nella pagina Crea un bucket, inserisci le informazioni del bucket. Per andare al passaggio successivo, fai clic su Continua.
      • In Assegna un nome al bucket, inserisci un nome univoco per il bucket. Non includere informazioni sensibili nel nome del bucket, poiché lo spazio dei nomi dei bucket è globale e visibile pubblicamente.
      • Per Scegli dove archiviare i tuoi dati, segui questi passaggi:
        • Seleziona un'opzione Tipo di località.
        • Seleziona un'opzione Località.
      • Per Scegli una classe di archiviazione predefinita per i dati, seleziona quanto segue: Standard.
      • Per Scegli come controllare l'accesso agli oggetti, seleziona un'opzione Controllo dell'accesso.
      • In Impostazioni avanzate (facoltative), specifica un metodo di crittografia, un criterio di conservazione o le etichette dei bucket.
    4. Fai clic su Crea.

Preparare l'ambiente di lavoro

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

Scarica i file di base

Scarica i file di base e poi cambia le directory.

  1. Clona il repository python-docs-samples.

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

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

Configura Artifact Registry

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

Tutti i contenuti del repository vengono criptati utilizzando chiavi di proprietà di Google e gestite da Google o chiavi di crittografia gestite dal cliente. Artifact Registry utilizza le chiavi di proprietà di Google e gestite da Google per impostazione predefinita e non è richiesta alcuna configurazione per questa opzione.

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

Esegui questo comando per creare un nuovo repository. Il comando utilizza il flag --async e restituisce 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 località 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 questo comando:

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

Il comando aggiorna la configurazione Docker. Ora puoi connetterti ad 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 salvarla in Artifact Registry, dove l'immagine è accessibile ad altri prodotti Google Cloud.

Crea l'immagine container utilizzando il file di configurazione di 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 di 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 nome del progetto Google Cloud
  • 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 risolti usando 13 GB di memoria estesa. Per maggiori informazioni, consulta GPU e parallelismo dei worker.

Visualizza i tuoi risultati

La pipeline in tensorflow-landsat/main.py elabora le immagini satellitari di Landsat 8 e le visualizza come file JPEG. Per visualizzare questi file:

  1. Elenca i file JPEG di output con i dettagli utilizzando gsutil.

    gsutil ls -lh "gs://$BUCKET/samples/dataflow/landsat/"
    
  2. Copia i file nella tua directory locale.

    mkdir outputs
    gsutil -m 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 è quello di eliminare il progetto che hai creato per il tutorial.

Per eliminare il progetto:

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Passaggi successivi