Earth Engine se basa en 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 paralelo subyacente.
EECU
Descripción general
Una unidad de procesamiento de Earth Engine (EECU) es un mecanismo para representar una cantidad de potencia de procesamiento instantánea. Earth Engine hace un seguimiento de la huella computacional total de las tareas como una función de su uso de EECU a lo largo del tiempo (segundos de EECU, horas de EECU, etc.). Dado que Google tiene muchos tipos diferentes de núcleos de procesador, arquitecturas, etcétera, Las EECU son una abstracción útil para hablar de la capacidad de procesamiento.
Motivación
Los usuarios de EE suelen querer realizar estimaciones sobre la cantidad de potencia de procesamiento que se requiere 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 en particular pueden cambiar con el tiempo. Debido a que los diferentes núcleos físicos pueden tener distintas características de rendimiento, Earth Engine abstrae todo el procesamiento con EECU. Una EECU por 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 por hora 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 factores comunes que generan 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)
- datos subyacentes diferentes, como cantidades variables de imágenes satelitales, geometrías de diferente complejidad, etcétera.
- cambios en los algoritmos de la plataforma de EE, incluidas las optimizaciones de rendimiento, las 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 las comparativas de procesamiento de Earth Engine de muestra.
Métricas de solicitudes con errores
Earth Engine no proporciona métricas de rendimiento para las solicitudes o tareas con errores, ya que estos números serían imprecisos o engañosos. Por ejemplo, si un trabajo falla porque una tarea de un trabajador dejó de responder, el consumo de procesamiento de ese trabajador no se podría incluir 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 se genera a partir del cálculo realizado mientras está habilitado. Cada fila en el resultado del generador de perfiles corresponde a un algoritmo, un cálculo, una carga de recursos o una operación de sobrecarga, como se describe en la columna "Description". Las columnas del generador de perfiles son las siguientes:
- Descripción
- Es una descripción textual del cálculo, el algoritmo, la carga de recursos o la operación de sobrecarga de la que se está creando el perfil.
- Recuento
- Es un indicador proporcional a la cantidad de veces que se invocó la operación descrita en "Descripción".
- Procesamiento
- Es un indicador del tiempo de EECU que tardaron las operaciones.
- Memoria actual
Esta columna solo aparece si se produjo 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.
- Memoria máxima
Es la cantidad máxima de memoria que se usó en cualquier nodo de procesamiento para la operación.
Habilita el generador de perfiles
Editor de código
Usa el botón "Run with Profiler", como se describe en la guía del editor de código.
Python
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 algún error en él.
Para capturar el perfil como una cadena, escríbelo en un búfer de cadena:
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())
Aquí tienes una sugerencia para convertir la cadena de perfil en una tabla para facilitar el análisis en Colab y Jupyter Notebooks (ten en cuenta que este es solo un enfoque y puede no ser 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)