Earth Engine si basa sugli strumenti e sui servizi di Google per eseguire calcoli su larga scala. Per semplificare l'esecuzione di analisi geospaziali di grandi dimensioni, la piattaforma e l'API Earth Engine nascondono gran parte della complessità dell'infrastruttura di elaborazione parallela sottostante.
EECU
Panoramica
Un'unità di calcolo di Earth Engine (EECU) è un meccanismo per rappresentare una quantità di potenza di elaborazione istantanea. Earth Engine monitora l'impronta computazionale totale delle attività in funzione del loro utilizzo di EECU nel tempo (secondi EECU, ore EECU e così via). Poiché Google dispone di molti tipi diversi di core del processore, architetture e così via, Le EECU sono un'astrazione utile per parlare di potenza di calcolo.
Motivazione
Gli utenti di EE spesso vogliono fare stime sulla quantità di potenza di elaborazione necessaria per i loro flussi di lavoro e le EECU forniscono una metrica coerente per fare confronti.
Confronto con le metriche della CPU
Il numero, il tipo e l'architettura delle macchine che lavorano su un determinato risultato possono cambiare nel tempo. Poiché core fisici diversi possono avere caratteristiche di prestazioni diverse, Earth Engine astrae tutta l'elaborazione utilizzando le EECU. Un'ora EECU (o qualsiasi altra unità di tempo EECU) non corrisponde a un'ora di orologio, quindi un job che consuma 10 ore EECU potrebbe avere un tempo di esecuzione osservato di pochi minuti.
Stabilità e prevedibilità
L'invio di richieste uguali (o simili) a Earth Engine a volte può comportare quantità di calcolo molto diverse. I fattori più comuni che determinano le differenze includono:
- memorizzazione nella cache, ad esempio il riutilizzo dei risultati di calcoli precedenti (inclusi risultati parziali o intermedi)
- dati di base diversi, ad esempio un numero variabile di immagini satellitari, geometrie di diversa complessità e così via.
- modifiche all'algoritmo sulla piattaforma EE, tra cui ottimizzazioni delle prestazioni, correzioni di bug e così via.
- modifiche alle librerie client, in particolare se dipendi dal codice o dai pacchetti EE di altri utenti
Benchmark
Esplora i benchmark di calcolo di Earth Engine di esempio.
Metriche per le richieste non riuscite
Earth Engine non fornisce metriche sul rendimento per le richieste/i task non riusciti, in quanto questi numeri sarebbero imprecisi o fuorvianti. Ad esempio, se un job non va a buon fine perché un'attività del worker non risponde, il consumo di elaborazione del worker non può essere incluso nel totale.
Profiler
Il profiler fornisce informazioni sull'utilizzo di tempo e memoria utilizzata della EECU (per algoritmo e asset) risultante dal calcolo eseguito mentre è abilitato. Ogni riga dell'output del profiler corrisponde a un algoritmo, a un calcolo, a un caricamento di asset o a un'operazione di overhead, come descritto nella colonna "Descrizione". Le colonne nel profiler sono:
- Descrizione
- Una descrizione testuale del calcolo, dell'algoritmo, del caricamento dell'asset o dell'operazione di overhead di cui viene eseguito il profiling.
- Conteggio
- Un indicatore proporzionale al numero di volte in cui è stata richiamata l'operazione descritta in "Descrizione".
- Computing
- Un indicatore del tempo di esecuzione dell'operazione o delle operazioni della EECU.
- Memoria attuale
Questa colonna viene visualizzata solo se si è verificato un errore perché lo script
ha utilizzato troppa memoria. Mostra la quantità di memoria in uso su un singolo nodo di calcolo nel momento in cui si è verificato l'errore.
- Picco di memoria
Memoria massima utilizzata su un singolo nodo di computing per l'operazione.
Abilitazione del Profiler
Editor di codice
Utilizza il pulsante "Esegui con Profiler", come descritto nella guida all'editor di codice.
Python
Includi il seguente codice nello script Python per attivare il profiler:
with ee.profilePrinting():
print(ee.Number(3.14).add(0.00159).getInfo())
Il profilo verrà stampato al termine del contesto, indipendentemente dal fatto che si sia verificato o meno un errore all'interno del contesto.
Per acquisire il profilo come stringa, scrivilo in un buffer di stringhe:
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())
Ecco un suggerimento per trasformare la stringa del profilo in una tabella per semplificare l'analisi in Colab e nei notebook Jupyter (tieni presente che questo è solo un approccio e potrebbe non essere adatto a tutti i casi):
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)