Earth Engine basiert auf den Tools und Diensten von Google für Berechnungen in großem Maßstab. Um die Ausführung umfangreicher räumlicher Analysen zu vereinfachen, werden in der Earth Engine-Plattform und -API viele der Komplexitäten der zugrunde liegenden Parallelverarbeitungs-Infrastruktur ausgeblendet.
EECUs
Übersicht
Eine Earth Engine Compute Unit (EECU) ist ein Mechanismus zur Darstellung einer Menge an sofortiger Rechenleistung. In Earth Engine wird die gesamte Rechenleistung von Aufgaben als Funktion ihrer EECU-Nutzung im Zeitverlauf erfasst (EECU-Sekunden, EECU-Stunden usw.). Da Google viele verschiedene Arten von Prozessorkernen, Architekturen usw. hat, sind EECUs eine nützliche Abstraktion, um über Rechenleistung zu sprechen.
Motivation
Earth Engine-Nutzer möchten oft Schätzungen zur Menge der für ihre Workflows erforderlichen Rechenleistung vornehmen. EECUs bieten eine einheitliche Messgröße 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 Wanduhrzeit. Ein Job, der 10 EECU-Stunden verbraucht, kann also eine beobachtete Laufzeit von nur wenigen Minuten haben.
Stabilität und Vorhersagbarkeit
Wenn Sie dieselben (oder ähnliche) Anfragen an Earth Engine senden, kann dies manchmal zu sehr unterschiedlichen Mengen an Berechnungen führen. Häufige Ursachen für Unterschiede sind:
- Caching, z. B. die Wiederverwendung der Ergebnisse früherer Berechnungen (einschließlich Teil- oder Zwischenergebnisse)
- Unterschiedliche zugrunde liegende Daten, z. B. unterschiedliche Anzahl von Satellitenbildern, Geometrien unterschiedlicher Komplexität usw.
- Algorithmusänderungen auf der Earth Engine-Plattform, einschließlich Leistungsoptimierungen, Fehlerkorrekturen usw.
- Änderungen an Clientbibliotheken, insbesondere wenn Sie von Earth Engine-Code oder -Paketen anderer Nutzer abhängig sind
Benchmarks
Beispiele für Earth Engine-Berechnungs-Benchmarks
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 Verarbeitungsverbrauch dieses Workers nicht in die Gesamtsumme einfließen.
Profiler
Der Profiler liefert Informationen zur EECU-Zeit und zur Arbeitsspeichernutzung (pro Algorithmus und Asset), die durch die Berechnungen entstehen, die ausgeführt werden, während er aktiviert ist. Jede Zeile in der Profilerausgabe 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, des Asset-Ladevorgangs oder des Overhead-Vorgangs, der profiliert wird.
- Anzahl
- Ein Indikator, der proportional zur Anzahl der Aufrufe des in „Beschreibung“ beschriebenen Vorgangs ist.
- 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 Skript
zu viel Arbeitsspeicher verwendet hat. Sie zeigt die Menge des Arbeitsspeichers an, der auf einem einzelnen Rechenknoten verwendet wird, als der Fehler aufgetreten ist.
- Spitzenwert des Arbeitsspeichers
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 in der Code Editor guide beschrieben.
Python
Fügen Sie Ihrem Python-Skript den folgenden Code hinzu, 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 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 die Analyse in Colab und Jupyter-Notebooks zu erleichtern. Beachten Sie, dass dies nur ein Ansatz ist und möglicherweise nicht für alle Fälle geeignet ist:
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)