Descripción general del procesamiento

Earth Engine se compila con las herramientas y los servicios de Google para realizar cálculos a gran escala. Para facilitar la ejecución de análisis geoespaciales grandes, la plataforma y la API de Earth Engine ocultan gran parte de la complejidad de la infraestructura de procesamiento en paralelo subyacente.

EECU

Descripción general

Una unidad de procesamiento de Earth Engine (EECU) es un mecanismo para representar una cantidad de poder de procesamiento instantáneo. Earth Engine realiza un seguimiento del espacio computacional total de las tareas como función del uso de EECU a lo largo del tiempo (EECU-segundos, EECU-horas, etcétera). Debido a que Google tiene muchos tipos diferentes de núcleos de procesador, arquitecturas, etc., Las EECU son una abstracción útil para hablar de la potencia de procesamiento.

Motivación

Los usuarios de EE a menudo desean realizar estimaciones sobre la cantidad de potencia de procesamiento necesaria para sus flujos de trabajo, y las EECU proporcionan una métrica coherente para realizar comparaciones.

Comparación con las métricas de CPU

La cantidad, el tipo y la arquitectura de las máquinas que trabajan en un resultado determinado pueden cambiar con el tiempo. Debido a que los diferentes núcleos físicos pueden tener diferentes características de rendimiento, Earth Engine abstrae todo el procesamiento con EECU. Una EECU-hora (o cualquier otra unidad de tiempo de EECU) no corresponde a un tiempo de reloj, por lo que un trabajo que consume 10 EECU-horas puede tener un tiempo de ejecución observado de solo unos minutos.

Estabilidad y previsibilidad

Enviar las mismas solicitudes (o similares) a Earth Engine a veces puede generar cantidades de procesamiento muy diferentes. Entre los impulsores comunes de las diferencias, se incluyen los siguientes:

  • almacenamiento en caché, como la reutilización de los resultados de cálculos anteriores (incluidos los resultados parciales o intermedios)
  • diferentes datos subyacentes, como diferentes cantidades de imágenes satelitales, geometrías de diferente complejidad, etcétera.
  • Cambios en el algoritmo en la plataforma de EE, incluidas optimizaciones de rendimiento, correcciones de errores, etcétera
  • Cambios en las bibliotecas cliente, en especial si dependes del código o los paquetes de EE de otros usuarios

Comparativas

Explora comparativas de procesamiento de Earth Engine.

Métricas de las solicitudes que fallaron

Earth Engine no proporciona métricas de rendimiento para las solicitudes o tareas que fallan, ya que estas cifras serían imprecisas o engañosas. A modo de ejemplo, si una tarea falla porque una tarea del trabajador dejó de responder, el consumo de procesamiento de ese trabajador no se podría tener en cuenta en el total.

Profiler

El generador de perfiles proporciona información sobre el tiempo de EECU y el uso de memoria (por algoritmo y recurso) que resulta del procesamiento realizado mientras está habilitado. Cada fila del resultado del generador de perfiles corresponde a un algoritmo, una operación de carga de recursos o una sobrecarga, como se describe en la columna "Descripción". Las columnas del generador de perfiles son las siguientes:

Descripción
Una descripción textual del procesamiento, el algoritmo, la carga de recursos o la operación de sobrecarga de la que se genera el perfil.
Recuento
Un indicador proporcional a la cantidad de veces que se invocó la operación que se describe en "Descripción".
Procesamiento
Es un indicador del tiempo de EECU que tardan las operaciones.
Memoria actual

Esta columna aparece solo si hubo un error porque la secuencia de comandos

usó demasiada memoria. Muestra la cantidad de memoria en uso en cualquier nodo de procesamiento en el momento en que se produjo el error.

Mem máxima

Es la memoria máxima que se usa en cualquier nodo de procesamiento para la operación.

Habilita el generador de perfiles

Usa el botón “Run with Profiler”, como se describe en la guía del editor de código.

Incluye el siguiente código en tu secuencia de comandos de Python para habilitar el generador de perfiles:

with ee.profilePrinting():
   print(ee.Number(3.14).add(0.00159).getInfo())

El perfil se imprimirá cuando finalice el contexto, independientemente de si se produjo un error dentro de él.

Para capturar el perfil como una cadena, escríbelo en un búfer de cadenas:

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())

Esta es una sugerencia para convertir la cadena de perfil en una tabla para facilitar el análisis en Colab y los notebooks de Jupyter (ten en cuenta que este es solo un enfoque y es posible que no sea adecuado para todos los casos):

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)