Descripción general del procesamiento

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 a gran escala, la plataforma y la API de Earth Engine ocultan gran parte de la complejidad de la infraestructura subyacente de procesamiento paralelo.

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 realiza un seguimiento de la huella de procesamiento 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étera). Dado que Google tiene muchos tipos diferentes de núcleos de procesadores, arquitecturas, etcétera, Las EECU son una abstracción útil para hablar de la capacidad de procesamiento.

Motivación

Los usuarios de EE a menudo desean hacer estimaciones sobre la cantidad de potencia de procesamiento que requieren sus flujos de trabajo, y las EECU proporcionan una métrica coherente para hacer 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. Dado que los diferentes núcleos físicos pueden tener diferentes características de rendimiento, Earth Engine abstrae todo el procesamiento con las 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 muy diferentes de procesamiento. 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)
  • diferentes datos subyacentes, como cantidades variables de imágenes satelitales, geometrías de diferente complejidad, etcétera
  • Cambios en el algoritmo de la plataforma de EE, incluidas las optimizaciones del 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 ejemplos de comparativas de cálculo de Earth Engine.

Métricas de las solicitudes con errores

Earth Engine no proporciona métricas de rendimiento para las solicitudes o tareas con errores, ya que estas cifras serían imprecisas o engañosas. Por ejemplo, si un trabajo 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 resultan del cálculo realizado mientras está habilitado. Cada fila del 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 "Descripción". 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 que se está perfilando.
Recuento
Es 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 tardaron las operaciones.
Memoria actual

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

usó demasiada memoria. Muestra la cantidad de memoria en uso en cualquier nodo de procesamiento único en el momento en que ocurrió el error.

Memoria máxima

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

Cómo habilitar el generador de perfiles

Editor de código

Usa el botón "Ejecutar con 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 dentro del contexto.

Para capturar el perfil como una cadena, escribe el perfil 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())

A continuación, se incluye 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)