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)