Présentation du calcul

Earth Engine repose sur les outils et services de Google permettant d'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.). Comme 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 puissance de traitement requise pour leurs workflows, et 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 extrait tous les traitements à l'aide des EECU. Une EECU-heure (ou toute autre unité de temps EECU) ne correspond pas à une heure d'horloge. Par conséquent, un job qui consomme 10 EECU-heures peut avoir une durée d'exécution observée de quelques minutes seulement.

Stabilité et prévisibilité

L'envoi de requêtes identiques (ou similaires) à Earth Engine peut parfois entraîner des quantités de calcul très différentes. Voici les causes courantes de ces 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 satellite, des géométries de complexité différente, etc.
  • modifications d'algorithme sur la plate-forme EE, y compris les optimisations des performances, les corrections de bugs, etc.
  • Modifications apportées aux bibliothèques clientes, en particulier si vous dépendez du code ou des packages 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 un job échoue parce qu'une tâche de nœud de calcul ne répond plus, la consommation de traitement de ce nœud de calcul 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 par élément) résultant du calcul effectué lorsqu'il est activé. Chaque ligne de la sortie du profileur correspond à un algorithme, un calcul, un chargement d'élément 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 de fois où l'opération décrite dans "Description" a été appelée.
Calcul
Indicateur du temps EECU pris par la ou les opérations.
Mémoire actuelle

Cette colonne n'apparaît que si une erreur s'est produite, car le script

utilisait trop de mémoire. Il indique la quantité de mémoire utilisée sur un nœud de calcul unique au moment où l'erreur s'est produite.

Mémoire max.

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

Activer le profileur

Éditeur de code

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

Python

Incluez le code suivant dans votre script Python pour activer le profileur :

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

Le profil sera imprimé à la fin du contexte, qu'une erreur se soit produite ou non dans le contexte.

Pour capturer le profil sous forme de chaîne, écrivez-le dans un 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 table afin de faciliter l'analyse dans Colab et les notebooks Jupyter (notez qu'il ne s'agit que d'une approche et qu'elle peut ne pas convenir à 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)