Elaborazione di immagini satellitari Landsat con le GPU


Questo tutorial mostra come utilizzare le GPU su Dataflow per elaborare le 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 con TensorFlow e supporto GPU.
  • Esegui 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. 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. To initialize the gcloud CLI, run the following command:

    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. Make sure that billing is enabled for your Google Cloud project.

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

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

  8. 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 PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.
  9. Install the Google Cloud CLI.
  10. To initialize the gcloud CLI, run the following command:

    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. Make sure that billing is enabled for your Google Cloud project.

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

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

  15. 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 PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.
  16. Concedi i ruoli all'account di servizio predefinito di Compute Engine. 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 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. In the Google Cloud console, go to the Cloud Storage Buckets page.

      Go to Buckets page

    2. Click Create bucket.
    3. On the Create a bucket page, enter your bucket information. To go to the next step, click Continue.
      • For Name your bucket, enter a unique bucket name. Don't include sensitive information in the bucket name, because the bucket namespace is global and publicly visible.
      • For Choose where to store your data, do the following:
        • Select a Location type option.
        • Select a Location option.
      • For Choose a default storage class for your data, select the following: Standard.
      • For Choose how to control access to objects, select an Access control option.
      • For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
    4. Click Create.

Prepara l'ambiente di lavoro

Scarica i file di avvio e poi crea il tuo repository Artifact Registry.

Scaricare i file di avvio

Scarica i file di avvio 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 elementi 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. Per impostazione predefinita, Artifact Registry utilizza chiavi di proprietà di Google e gestite da Google e non è richiesta alcuna configurazione per questa opzione.

Devi disporre almeno del ruolo di autore di Artifact Registry per il repository.

Esegui il comando seguente per creare un nuovo repository. Il comando utilizza il flag --async e restituisce immediatamente il risultato, 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 tuo 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 prodotti Google Cloud.

Crea l'immagine del contenitore 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 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 sample utilizza un tipo di macchina con 1 vCPU. I requisiti di memoria della pipeline vengono soddisfatti utilizzando 13 GB di memoria estesa. Per ulteriori informazioni, consulta la pagina relativa a 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, svolgi i passaggi che seguono.

  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 tua 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 che hai 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