Landsat-Satellitenbilder mit GPUs verarbeiten


In dieser Anleitung erfahren Sie, wie Sie GPUs in Dataflow verwenden, um Landsat 8-Satellitenbilder zu verarbeiten und als JPEG-Dateien zu rendern. Die Anleitung basiert auf dem Beispiel Landsat-Satellitenbilder mit GPUs verarbeiten.

Lernziele

  • Docker-Image für Dataflow mit GPU-Unterstützung erstellen
  • Dataflow-Job mit GPUs ausführen

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:

  • Cloud Storage
  • Dataflow
  • Artifact Registry

Sie können mithilfe des Preisrechners die Kosten für Ihre voraussichtliche Nutzung kalkulieren.

Hinweise

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Installieren Sie die Google Cloud CLI.
  3. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  4. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  5. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  6. Aktivieren Sie die Dataflow, Cloud Build, and Artifact Registry APIs:

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  7. Erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Google-Konto:

    gcloud auth application-default login
  8. Gewähren Sie Ihrem Google-Konto Rollen. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.
    • Ersetzen Sie EMAIL_ADDRESS durch Ihre E-Mail-Adresse.
    • Ersetzen Sie ROLE durch jede einzelne Rolle.
  9. Installieren Sie die Google Cloud CLI.
  10. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  11. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  12. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  13. Aktivieren Sie die Dataflow, Cloud Build, and Artifact Registry APIs:

    gcloud services enable dataflow cloudbuild.googleapis.com artifactregistry.googleapis.com
  14. Erstellen Sie lokale Anmeldedaten zur Authentifizierung für Ihr Google-Konto:

    gcloud auth application-default login
  15. Gewähren Sie Ihrem Google-Konto Rollen. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus: roles/iam.serviceAccountUser

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.
    • Ersetzen Sie EMAIL_ADDRESS durch Ihre E-Mail-Adresse.
    • Ersetzen Sie ROLE durch jede einzelne Rolle.
  16. Weisen Sie Ihrem Compute Engine-Standarddienstkonto Rollen zu. Führen Sie den folgenden Befehl für jede der folgenden IAM-Rollen einmal aus: roles/dataflow.admin, roles/dataflow.worker, roles/bigquery.dataEditor, roles/pubsub.editor, roles/storage.objectAdmin und roles/artifactregistry.reader.

    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" --role=SERVICE_ACCOUNT_ROLE
    • Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.
    • Ersetzen Sie PROJECT_NUMBER durch die Projekt-ID. Ihre Projektnummer finden Sie unter Projekte identifizieren.
    • Ersetzen Sie SERVICE_ACCOUNT_ROLE durch jede einzelne Rolle.
  17. Zum Speichern der JPEG-Ausgabe-Bilddateien aus dieser Anleitung erstellen Sie einen Cloud Storage-Bucket:
    1. Wechseln Sie in der Google Cloud Console zur Cloud Storage-Seite Buckets.

      Zur Seite „Buckets“

    2. Klicken Sie auf Bucket erstellen.
    3. Geben Sie auf der Seite Bucket erstellen die Bucket-Informationen ein. Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.
      • Geben Sie unter Bucket benennen einen eindeutigen Bucket-Namen ein. Der Bucket-Name darf keine vertraulichen Informationen enthalten, da der Bucket-Namespace global und öffentlich sichtbar ist.
      • Gehen Sie unter Speicherort für Daten auswählen folgendermaßen vor:
        • Wählen Sie eine Option für Standorttyp aus.
        • Wählen Sie eine Standort-Option aus.
      • Wählen Sie unter Standardspeicherklasse für Ihre Daten auswählen Folgendes aus: Standard.
      • Wählen Sie unter Zugriffssteuerung für Objekte auswählen eine Option für die Zugriffssteuerung aus.
      • Geben Sie für Erweiterte Einstellungen (optional) eine Verschlüsselungsmethode, eine Aufbewahrungsrichtlinie oder Bucket-Labels an.
    4. Klicken Sie auf Erstellen.

Arbeitsumgebung vorbereiten

Laden Sie die Startdateien herunter und erstellen Sie dann das Artifact Registry-Repository.

Startdateien herunterladen

Laden Sie die Startdateien herunter und wechseln Sie dann das Verzeichnis.

  1. Klonen Sie das python-docs-samples-Repository.

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. Gehen Sie zum Beispielcode-Verzeichnis.

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

Artifact Registry konfigurieren

Erstellen Sie ein Artifact Registry-Repository, damit Sie Artefakte hochladen können. Jedes Repository kann Artefakte für ein einzelnes unterstütztes Format enthalten.

Alle Repository-Inhalte werden entweder mit von Google verwalteten oder mit vom Kunden verwalteten Verschlüsselungsschlüsseln verschlüsselt. Artifact Registry verwendet standardmäßig von Google verwaltete Verschlüsselungsschlüssel. Dafür ist keine Konfiguration erforderlich.

Sie müssen für das Repository mindestens Zugriff als Artifact Registry-Autor haben.

Führen Sie den folgenden Befehl aus, um ein neues Repository zu erstellen: Der Befehl verwendet das Flag --async und kehrt sofort zurück, ohne auf den Abschluss des Vorgangs zu warten.

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

Ersetzen Sie REPOSITORY durch einen Namen für das Repository. Repository-Namen können für jeden Repository-Speicherort in einem Projekt nur einmal vorkommen.

Um Images per Push oder Pull übertragen zu können, konfigurieren Sie Docker für die Authentifizierung von Anfragen für Artifact Registry. Führen Sie den folgenden Befehl aus, um die Authentifizierung bei Docker-Repositories einzurichten:

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

Mit dem Befehl wird die Docker-Konfiguration aktualisiert. Sie können jetzt eine Verbindung zu Artifact Registry in Ihrem Google Cloud-Projekt herstellen, um Images per Push zu übertragen.

Docker-Image erstellen

Mit Cloud Build können Sie ein Docker-Image mit einem Dockerfile erstellen und in Artifact Registry speichern, wo es für andere Google Cloud-Produkte zugänglich ist.

Erstellen Sie das Container-Image mithilfe der Konfigurationsdatei build.yaml.

gcloud builds submit --config build.yaml

Dataflow-Job mit GPUs ausführen

Der folgende Codeblock zeigt, wie diese Dataflow-Pipeline mit GPUs gestartet wird.

Wir führen die Dataflow-Pipeline mit der Konfigurationsdatei run.yaml aus.

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

Dabei gilt:

  • PROJECT_NAME: der Name des Google Cloud-Projekts
  • BUCKET_NAME: der Name des Cloud Storage-Buckets (ohne das Präfix gs://)

Warten Sie nach dem Ausführen dieser Pipeline, bis der Befehl abgeschlossen ist. Wenn Sie die Shell beenden, gehen möglicherweise die von Ihnen festgelegten Umgebungsvariablen verloren.

In diesem Beispiel wird ein Maschinentyp mit 1 vCPU verwendet, damit die GPU nicht zwischen mehreren Worker-Prozessen geteilt wird. Die Speicheranforderungen der Pipeline werden mithilfe von 13 GB erweitertem Speicher erfüllt. Weitere Informationen finden Sie unter GPUs und Worker-Parallelität.

Ergebnisse ansehen

Die Pipeline in tensorflow-landsat/main.py verarbeitet Landsat 8-Satellitenbilder und rendert sie als JPEG-Dateien. Führen Sie die folgenden Schritte aus, um diese Dateien aufzurufen.

  1. Listen Sie die JPEG-Ausgabedateien mit Details mithilfe von gsutil auf.

    gsutil ls -lh "gs://$BUCKET/samples/dataflow/landsat/"
    
  2. Kopieren Sie die Dateien in Ihr lokales Verzeichnis.

    mkdir outputs
    gsutil -m cp "gs://$BUCKET/samples/dataflow/landsat/*" outputs/
    
  3. Öffnen Sie die Bilddateien in einem beliebigen Image-Viewer Ihrer Wahl.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

So löschen Sie das Projekt:

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Nächste Schritte