Earth Engine basiert auf den Tools und Diensten von Google, mit denen Berechnungen im großen Maßstab durchgeführt werden. Um die Ausführung großer georäumlicher Analysen zu vereinfachen, blenden die Earth Engine-Plattform und ‑API einen Großteil der Komplexität der zugrunde liegenden Parallelverarbeitungsinfrastruktur aus.
EECUs
Übersicht
Eine Earth Engine-Recheneinheit (Earth Engine Compute Unit, EECU) ist ein Mechanismus zur Darstellung einer bestimmten Menge an sofortiger Rechenleistung. Earth Engine erfasst den gesamten Rechenbedarf von Aufgaben als Funktion ihrer EECU-Nutzung im Zeitverlauf (EECU-Sekunden, EECU-Stunden usw.). Da Google viele verschiedene Arten von Prozessorkernen, Architekturen usw. verwendet, EECUs sind eine nützliche Abstraktion, um über Rechenleistung zu sprechen.
Motivation
EE-Nutzer möchten oft eine Schätzung der für ihre Workflows erforderlichen Rechenleistung 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 Einheit der EECU-Zeit) entspricht nicht der Echtzeit. Ein Job, der 10 EECU-Stunden verbraucht, kann also eine beobachtete Laufzeit von nur wenigen Minuten haben.
Stabilität und Vorhersehbarkeit
Das Senden derselben (oder ähnlicher) Anfragen an Earth Engine kann manchmal zu sehr unterschiedlichen Berechnungsmengen führen. Zu den häufigsten Ursachen für Unterschiede gehören:
- Caching, z. B. Wiederverwendung der Ergebnisse früherer Berechnungen (einschließlich teilweiser oder Zwischenergebnisse)
- unterschiedliche zugrunde liegende Daten, z. B. unterschiedliche Anzahl von Satellitenbildern, Geometrien unterschiedlicher Komplexität usw.
- Algorithmusänderungen auf der EE-Plattform, einschließlich Leistungsoptimierungen und Fehlerkorrekturen
- Änderungen an Clientbibliotheken, insbesondere wenn Sie auf den EE-Code oder die Pakete anderer Nutzer angewiesen sind
Benchmarks
Beispiel-Benchmarks für Earth Engine-Berechnungen
Messwerte für fehlgeschlagene Anfragen
Earth Engine bietet keine Leistungsmesswerte für fehlgeschlagene Anfragen/Aufgaben, da diese Zahlen ungenau oder irreführend wären. Wenn ein Job beispielsweise fehlschlägt, weil eine Worker-Aufgabe nicht mehr reagiert, kann der Verarbeitungsaufwand dieses Workers nicht in die Gesamtzahl einbezogen werden.
Profiler
Der Profiler liefert Informationen zur EECU-Zeit und zur Speichernutzung (pro Algorithmus und Asset) aus der Berechnung, die ausgeführt wird, während er aktiviert ist. Jede Zeile in der Profiler-Ausgabe entspricht einem Algorithmus, einer Berechnung, einer Asset-Lade- oder einem Overhead-Vorgang, wie in der Spalte „Beschreibung“ beschrieben. Die Spalten im Profiler sind:
- Beschreibung
- Eine Textbeschreibung der zu profilierenden Berechnung, des Algorithmus, der Asset-Ladezeit oder des Overhead-Vorgangs.
- 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 wird.
- Aktueller Arbeitsspeicher
Diese Spalte wird nur angezeigt, wenn ein Fehler aufgetreten ist, weil das Script
zu viel Arbeitsspeicher belegt. Hier sehen Sie die Menge des Arbeitsspeichers, die auf einem einzelnen Compute-Knoten zum Zeitpunkt des Auftretens des Fehlers belegt war.
- Peak Mem
Der maximale 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 in der Anleitung zum Code-Editor beschrieben.
Python
Fügen Sie den folgenden Code in Ihr Python-Script ein, um den Profiler zu aktivieren:
with ee.profilePrinting():
print(ee.Number(3.14).add(0.00159).getInfo())
Das Profil wird gedruckt, 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 String-Puffer:
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 leichter analysieren zu können. Hinweis: 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)