Elaborazione delle immagini satellitari Landsat con GPU


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

Obiettivi

  • Crea un'immagine Docker per Dataflow che supporti TensorFlow 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. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  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. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  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 i ruoli all'account di servizio predefinito di 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 immagine JPEG di output di 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.

Scaricare i file di base

Scarica i file di base e modifica 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 di esempio.

    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 mediante chiavi di crittografia gestite da Google o dal cliente. Artifact Registry utilizza chiavi di crittografia gestite da Google per impostazione predefinita e non è richiesta alcuna configurazione per questa opzione.

Devi avere almeno accesso come Writer 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 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 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 di salvarlo 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 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 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 gestiti utilizzando 13 GB di memoria estesa. Per maggiori informazioni, consulta la pagina GPU e parallelismo dei worker.

Visualizza i tuoi risultati

La pipeline in tensorflow-landsat/main.py elabora le immagini satellitari Landsat 8 e le visualizza come file JPEG. Per visualizzare questi file, procedi nel seguente modo.

  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 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 è 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