Annuncio: tutti i progetti non commerciali registrati per l'utilizzo di Earth Engine prima del 15 aprile 2025 devono verificare l'idoneità non commerciale per mantenere l'accesso a Earth Engine.
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
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 delle EECU nel tempo (secondi EECU, ore EECU e così via). Poiché Google ha molti tipi diversi di core, 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 esegue l'astrazione di tutte le elaborazioni utilizzando le EECU.
Un'ora EECU (o qualsiasi altra unità di tempo EECU) non corrisponde a un tempo apparente, pertanto un job che consuma 10 ore EECU potrebbe avere un tempo di esecuzione osservato di solo alcuni minuti.
Stabilità e prevedibilità
L'invio delle stesse richieste (o di richieste simili) a Earth Engine a volte può comportare calcoli molto diversi. I fattori più comuni che determinano le differenze sono:
Memorizzazione nella cache, ad esempio il riutilizzo dei risultati di calcoli precedenti (inclusi risultati parziali o intermedi)
Dati di base diversi, ad esempio numeri variabili di immagini satellitari, geometrie di complessità diversa e così via.
modifiche all'algoritmo sulla piattaforma EE, tra cui ottimizzazioni del rendimento, correzioni di bug e così via.
Modifiche alle librerie client, in particolare se dipendono da codice o pacchetti EE di altri utenti
Earth Engine non fornisce metriche sul rendimento per richieste/attività non riuscite, poiché 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 verrà conteggiato nel totale.
Profiler
Il profiler fornisce informazioni sul tempo EECU e sull'utilizzo della memoria (per algoritmo e asset) derivanti dal calcolo eseguito quando è attivato. Ogni riga dell'output del profiler corrisponde a un algoritmo, calcolo, caricamento di asset o operazione di overhead, come descritto nella colonna "Descrizione". Le colonne nel profiler sono:
Descrizione
Una descrizione testuale del calcolo, dell'algoritmo, del caricamento delle risorse o dell'operazione di overhead di cui viene eseguito il profilo.
Conteggio
Un indicatore proporzionale al numero di volte in cui è stata invocata l'operazione descritta in "Descrizione".
Computing
Un indicatore del tempo EECU impiegato dalle operazioni.
Mem corrente
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 qualsiasi singolo
nodo di calcolo al momento dell'errore.
Peak Mem
La memoria massima utilizzata su un singolo nodo di calcolo per l'operazione.
Attivazione del profiler
Editor di codice
Utilizza il pulsante "Esegui con il profiler", come descritto nella guida Editor di codice.
Python
Includi il seguente codice nello script Python per attivare il profiler:
Ecco un suggerimento per trasformare la stringa del profilo in una tabella per semplificarne l'analisi in Colab e Jupyter Notebook (tieni presente che questo è solo un approccio e potrebbe non essere adatto a tutti i casi):
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-07-25 UTC."],[[["\u003cp\u003eEarth Engine Compute Units (EECUs) represent the amount of processing power used in Earth Engine, allowing users to estimate and compare computational needs for geospatial analysis.\u003c/p\u003e\n"],["\u003cp\u003eEECU-time is an abstract measure of work and doesn't directly equate to CPU or wall clock time due to Earth Engine's dynamic resource allocation.\u003c/p\u003e\n"],["\u003cp\u003eWhile Earth Engine strives for computational stability, factors like caching, data variations, algorithm updates, and client library changes can influence processing requirements.\u003c/p\u003e\n"],["\u003cp\u003eUsers can leverage the Earth Engine profiler to gain insights into EECU and memory usage for specific algorithms, asset loads, and operations within their scripts.\u003c/p\u003e\n"]]],[],null,["Earth Engine is built on top of Google's tools and services for performing\ncomputations at a massive scale. To make it easy to run large geospatial\nanalyses, the Earth Engine platform and API hide much of the complexity of the\nunderlying parallel-processing infrastructure.\n\nEECUs\n\nOverview **Key Term:** *EECU* - Earth Engine Compute Unit, an abstraction of computing power.\n\nAn Earth Engine Compute Unit (EECU) is a mechanism for representing an amount of\ninstantaneous processing power. Earth Engine tracks the total computational\nfootprint of tasks as a function of their EECU usage through time (EECU-seconds,\nEECU-hours, etc.). Because Google has many different types of processor cores,\narchitectures, etc., EECUs are a useful abstraction for talking about\ncomputational power.\n\nMotivation\n\nEE users often want to make estimates about the amount of processing power\nrequired for their workflows, and EECUs provide a consistent metric for making\ncomparisons.\n\nComparison with CPU metrics **Note:** While EECU-seconds measure the amount of work that Earth Engine is performing, EECU-seconds don't correspond directly to CPU-seconds or wall clock seconds due to the fully managed nature of the service.\n\nThe number, type and architecture of machines working on a particular result can\nchange over time. Because different physical cores can have different\nperformance characteristics, Earth Engine abstracts all processing using EECUs.\nAn EECU-hour (or any other unit of EECU-time) doesn't correspond to a wall clock\ntime, so a job which consumes 10 EECU-hours may have an observed runtime of just\na few minutes.\n\nStability and predictability\n\nSending the same (or similar) requests to Earth Engine can sometimes result in\nvery different amounts of computation. Common drivers of differences include:\n\n- **caching**, such as reusing the results of previous computations (including partial or intermediate results)\n- **different underlying data**, such as varying numbers of satellite images, geometries of different complexity, etc.\n- **algorithm changes** on the EE platform, including performance optimizations, bugfixes, etc.\n- **changes to client libraries**, particularly if you depend on other users' EE code or packages\n\nBenchmarks\n\nExplore [sample Earth Engine computation benchmarks](./computation_benchmarks).\n\nMetrics for failed requests\n\nEarth Engine doesn't provide performance metrics for failed requests/tasks,\nsince these numbers would be inaccurate or misleading. As an example, if a job\nfails because a worker task became unresponsive, that worker's processing\nconsumption wouldn't be able to factor into the total.\n\nProfiler\n\nThe profiler provides information about EECU-time and memory usage (per\nalgorithm and asset) resulting from the computation performed while it's\nenabled. Each row in the profiler output corresponds to an algorithm,\ncomputation, asset load or overhead operation as described in the 'Description'\ncolumn. The columns in the profiler are:\n\nDescription\n: A textual description of the computation, algorithm, asset load or\n overhead operation being profiled.\n\nCount\n: An indicator proportional to the number of times the operation described\n in 'Description' was invoked.\n\nCompute\n: An indicator of EECU-time taken by the operation(s).\n\nCurrent Mem\n\n: This column appears only if there was an error because the script\n\n used too much memory. It shows the amount of memory in use on any single\n compute node at the moment the error occurred.\n\nPeak Mem\n\n: Maximum memory used on any single compute node for the operation.\n\nEnabling the profiler \n\nCode Editor\n\nUse the \"Run with Profiler\" button, as described in the [Code Editor\nguide](/earth-engine/guides/playground#profiler).\n\nPython\n\nInclude the following code in your Python script to enable the profiler: \n\n with ee.profilePrinting():\n print(ee.Number(3.14).add(0.00159).getInfo())\n\nThe profile will be printed when the context ends, whether or not any error\noccurred within the context.\n\nTo capture the profile as a string, write the profile to a string buffer: \n\n import io\n\n out = io.StringIO()\n with ee.profilePrinting(destination=out) as p:\n print(ee.Number(3.14).add(0.00159).getInfo())\n\n print('Output:')\n print(out.getvalue())\n\nHere is a suggestion for turning the profile string into a table for easier\nanalysis in Colab and Jupyter Notebooks (note that this is just one approach\nand may not be suitable for all cases): \n\n import re\n import pandas as pd\n\n lines = out.getvalue().split('\\n')\n\n column_names = re.split(r'\\s{1,}', lines[0])\n column_names = [name.strip() for name in column_names if name.strip()]\n\n data = [\n [element for element in re.split(r'\\s{2,}', line) if element.strip()]\n for line in lines[1:-1]\n ]\n\n df = pd.DataFrame(data, columns=column_names)\n display(df)"]]