Présentation du calcul

Earth Engine est basé sur les outils et services de Google pour effectuer des calculs à grande échelle. Pour faciliter l'exécution d'analyses géospatiales de grande envergure, la plate-forme et l'API Earth Engine masquent une grande partie de la complexité de l'infrastructure de traitement parallèle sous-jacente.

EECU

Présentation

Une unité de calcul Earth Engine (EECU) est un mécanisme permettant de représenter une quantité de puissance de traitement instantanée. Earth Engine suit l'empreinte de calcul totale des tâches en fonction de leur utilisation des EECU au fil du temps (EECU-secondes, EECU-heures, etc.). Google dispose de nombreux types de cœurs de processeur, d'architectures, etc. Les EECU sont une abstraction utile pour parler de la puissance de calcul.

Motivation

Les utilisateurs d'EE souhaitent souvent estimer la quantité de puissance de traitement requise pour leurs workflows. Les EECU fournissent une métrique cohérente pour effectuer des comparaisons.

Comparaison avec les métriques de processeur

Le nombre, le type et l'architecture des machines travaillant sur un résultat particulier peuvent changer au fil du temps. Étant donné que les différents cœurs physiques peuvent avoir des caractéristiques de performances différentes, Earth Engine abstrait tout le traitement à l'aide d'ECU. Une heure EECU (ou toute autre unité de temps EECU) ne correspond pas à une heure de l'horloge. Par conséquent, une tâche qui consomme 10 heures EECU peut avoir une durée d'exécution observée de quelques minutes seulement.

Stabilité et prévisibilité

L'envoi des mêmes requêtes (ou de requêtes similaires) à Earth Engine peut parfois entraîner des quantités de calcul très différentes. Voici quelques facteurs courants qui peuvent expliquer les différences:

  • mise en cache, par exemple en réutilisant les résultats de calculs précédents (y compris les résultats partiels ou intermédiaires)
  • différentes données sous-jacentes, telles que des nombres variables d'images satellites, des géométries de complexité différente, etc.
  • Modifications de l'algorithme sur la plate-forme EE, y compris des optimisations des performances, des corrections de bugs, etc.
  • Modifications apportées aux bibliothèques clientes, en particulier si vous dépendez du code ou des packages d'EE d'autres utilisateurs

Benchmarks

Découvrez des exemples de benchmarks de calcul Earth Engine.

Métriques pour les requêtes ayant échoué

Earth Engine ne fournit pas de métriques de performances pour les requêtes/tâches ayant échoué, car ces chiffres seraient inexacts ou trompeurs. Par exemple, si une tâche de nœud de calcul ne répond plus, la consommation de traitement de ce nœud ne peut pas être prise en compte dans le total.

Profiler

Le profileur fournit des informations sur le temps EECU et l'utilisation de la mémoire (par algorithme et composant) résultant du calcul effectué lorsqu'il est activé. Chaque ligne de la sortie du profileur correspond à un algorithme, un calcul, une charge d'éléments ou une opération de surcharge, comme décrit dans la colonne "Description". Les colonnes du profileur sont les suivantes:

Description
Description textuelle du calcul, de l'algorithme, de la charge d'éléments ou de l'opération de surcharge en cours de profilage.
Nombre
Indicateur proportionnel au nombre d'appels de l'opération décrite dans "Description".
Calcul
Indicateur de la durée EECU de l'opération ou des opérations.
Mémoire actuelle

Cette colonne n'apparaît que si une erreur s'est produite en raison du script

a utilisé trop de mémoire. Il indique la quantité de mémoire utilisée sur un nœud de calcul donné au moment de l'erreur.

Mémoire maximale

Mémoire maximale utilisée sur un nœud de calcul donné pour l'opération.

Activer le profileur

Éditeur de code

Utilisez le bouton "Run with Profiler" (Exécuter avec Profiler), comme décrit dans le guide de l'éditeur de code.

Python

Pour activer le profileur, incluez le code suivant dans votre script Python:

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

Le profil sera imprimé à la fin du contexte, que des erreurs se soient produites ou non dans le contexte.

Pour capturer le profil en tant que chaîne, écrivez-le dans une mémoire tampon de chaîne:

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

Voici une suggestion pour transformer la chaîne de profil en tableau afin de faciliter l'analyse dans Colab et les notebooks Jupyter (notez qu'il ne s'agit que d'une approche et qu'elle n'est pas adaptée à tous les cas):

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)