Présentation du calcul

Earth Engine s'appuie 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 (en secondes, en heures, etc.). Google utilise de nombreux types de cœurs de processeur, d'architectures, etc. Les EECU sont une abstraction utile pour parler de puissance de calcul.

Motivation

Les utilisateurs d'EE souhaitent souvent estimer la 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 différents cœurs physiques peuvent avoir des caractéristiques de performances différentes, Earth Engine abstrait tout le traitement à l'aide d'EECU. Une heure d'EECU (ou toute autre unité de temps d'EECU) ne correspond pas à une heure réelle. Par conséquent, un job qui consomme 10 heures d'EECU 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 quelques facteurs courants qui peuvent expliquer ces différences :

  • la 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, comme un nombre variable d'images satellite, des géométries de complexité différente, etc.
  • Modifications de l'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

Explorez les benchmarks de calcul Earth Engine.

Métriques pour les demandes 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 pourra pas être prise en compte dans le total.

Profiler

Le profileur fournit des informations sur l'utilisation de la mémoire et du temps d'EECU (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éments ou une opération de surcharge, comme décrit dans la colonne "Description". Voici les colonnes du profileur :

Description
Description textuelle du calcul, de l'algorithme, du chargement d'éléments ou de l'opération de surcharge profilée.
Nombre
Indicateur proportionnel au nombre de fois où l'opération décrite dans "Description" a été appelée.
Calcul
Indicateur de la durée d'EECU des opérations.
Mémoire actuelle

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

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

Pic de mémoire

Mémoire maximale utilisée sur un nœud de calcul unique 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 profil 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 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 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)