Berechnung – Übersicht

Earth Engine basiert auf den Tools und Diensten von Google für die Durchführung von Berechnungen in großem Umfang. Damit Sie große raumbezogene Analysen einfach ausführen können, verbergen die Earth Engine-Plattform und die API einen Großteil der Komplexität der zugrunde liegenden Infrastruktur für die parallele Verarbeitung.

EECUs

Übersicht

Eine Earth Engine-Recheneinheit (EECU, Earth Engine Compute Unit) ist ein Mechanismus zur Darstellung einer bestimmten Menge an sofortiger Rechenleistung. Die Earth Engine erfasst die Gesamtrechenleistung von Aufgaben als Funktion ihrer EECU-Nutzung im Zeitverlauf (EECU-Sekunden, EECU-Stunden usw.). Google hat viele verschiedene Arten von Prozessorkernen, Architekturen usw. EECUs sind eine nützliche Abstraktion, um über Rechenleistung zu sprechen.

Motivation

EE-Nutzer möchten oft Schätzungen zur erforderlichen Rechenleistung für ihre Workflows vornehmen. EECUs bieten einen einheitlichen Messwert für Vergleiche.

Vergleich mit CPU-Messwerten

Die Anzahl, der Typ und die Architektur der Maschinen, die an einem bestimmten Ergebnis arbeiten, können sich im Laufe der Zeit ändern. Da verschiedene physische Kerne unterschiedliche Leistungsmerkmale haben können, abstrahiert Earth Engine die gesamte Verarbeitung mithilfe von EECUs. Eine EECU-Stunde (oder eine andere EECU-Zeiteinheit) entspricht nicht der tatsächlichen Zeit. Ein Job, der 10 EECU-Stunden verbraucht, kann also eine beobachtete Laufzeit von nur wenigen Minuten haben.

Stabilität und Vorhersehbarkeit

Wenn Sie dieselben (oder ähnliche) Anfragen an Earth Engine senden, kann dies manchmal zu sehr unterschiedlichen Rechenmengen führen. Häufige Gründe für Unterschiede sind:

  • Caching, z. B. Wiederverwendung der Ergebnisse früherer Berechnungen (einschließlich Teil- oder Zwischenergebnissen)
  • unterschiedliche zugrunde liegende Daten, z. B. eine unterschiedliche Anzahl von Satellitenbildern, Geometrien mit unterschiedlicher Komplexität usw.
  • Algorithmusänderungen auf der EE-Plattform, einschließlich Leistungsoptimierungen, Fehlerkorrekturen usw.
  • Änderungen an Clientbibliotheken, insbesondere wenn Sie auf den EE-Code oder die EE-Pakete anderer Nutzer angewiesen sind

Benchmarks

Beispiele für Earth Engine-Berechnungsbenchmarks ansehen

Messwerte für fehlgeschlagene Anfragen

Earth Engine stellt keine Leistungsmesswerte für fehlgeschlagene Anfragen/Aufgaben bereit, da diese Zahlen ungenau oder irreführend wären. Wenn ein Job beispielsweise fehlschlägt, weil eine Worker-Aufgabe nicht mehr reagiert, kann der Verarbeitungsverbrauch dieses Workers nicht in die Gesamtsumme einbezogen werden.

Profiler

Der Profiler liefert Informationen zur EECU-Zeit und zur Speichernutzung (pro Algorithmus und Asset), die sich aus der Berechnung ergeben, die während der Aktivierung durchgeführt wird. Jede Zeile in der Profiler-Ausgabe entspricht einem Algorithmus, einer Berechnung, einem Asset-Ladevorgang oder einem Overhead-Vorgang, wie in der Spalte „Beschreibung“ beschrieben. Die Spalten im Profiler sind:

Beschreibung
Eine Textbeschreibung der Berechnung, des Algorithmus, der Asset-Last oder des Overhead-Vorgangs, für den ein Profil erstellt wird.
Anzahl
Ein Indikator, der proportional zur Häufigkeit ist, mit der der in „Beschreibung“ beschriebene Vorgang aufgerufen wurde.
Compute
Ein Indikator für die EECU-Zeit, die für die Vorgänge benötigt wurde.
Aktueller Arbeitsspeicher

Diese Spalte wird nur angezeigt, wenn ein Fehler aufgetreten ist, weil das Script

zu viel Arbeitsspeicher verwendet hat. Es zeigt die Menge an Arbeitsspeicher, die zum Zeitpunkt des Fehlers auf einem einzelnen Rechenknoten verwendet wurde.

Max. Arbeitsspeicher

Maximaler Arbeitsspeicher, der auf einem einzelnen Rechenknoten für den Vorgang verwendet wird.

Profiler aktivieren

Code-Editor

Verwenden Sie die Schaltfläche „Mit Profiler ausführen“, wie im Leitfaden zum Code-Editor beschrieben.

Python

Fügen Sie den folgenden Code in Ihr Python-Skript ein, um den Profiler zu aktivieren:

with ee.profilePrinting():
   print(ee.Number(3.14).add(0.00159).getInfo())

Das Profil wird ausgegeben, wenn der Kontext endet, unabhängig davon, ob im Kontext ein Fehler aufgetreten ist.

Wenn Sie das Profil als String erfassen möchten, schreiben Sie es in einen Stringpuffer:

import io

out = io.StringIO()
with ee.profilePrinting(destination=out) as p:
    print(ee.Number(3.14).add(0.00159).getInfo())

print('Output:')
print(out.getvalue())

Hier ist ein Vorschlag, wie Sie den Profilstring in eine Tabelle umwandeln können, um ihn in Colab und Jupyter Notebooks einfacher zu analysieren. Dies ist nur ein Ansatz und möglicherweise nicht für alle Fälle geeignet:

import re
import pandas as pd

lines = out.getvalue().split('\n')

column_names = re.split(r'\s{1,}', lines[0])
column_names = [name.strip() for name in column_names if name.strip()]

data = [
    [element for element in re.split(r'\s{2,}', line) if element.strip()]
    for line in lines[1:-1]
]

df = pd.DataFrame(data, columns=column_names)
display(df)