Visão geral da computação

O Earth Engine foi criado com base nas ferramentas e nos serviços do Google para realizar computações em grande escala. Para facilitar a execução de grandes análises geoespaciais, a plataforma e a API do Earth Engine ocultam grande parte da complexidade da infraestrutura de processamento paralelo subjacente.

EECUs

Visão geral

Uma unidade de computação do Earth Engine (EECU) é um mecanismo para representar uma quantidade de capacidade de processamento instantâneo. O Earth Engine rastreia a pegada computacional total das tarefas como uma função do uso de EECUs ao longo do tempo (EECU-segundos, EECU-horas etc.). Como o Google tem muitos tipos diferentes de núcleos de processador, arquiteturas etc., As EECUs são uma abstração útil para falar sobre poder computacional.

Motivação

Os usuários do EE geralmente querem fazer estimativas sobre a quantidade de poder de processamento necessária para os fluxos de trabalho, e as EECUs fornecem uma métrica consistente para fazer comparações.

Comparação com métricas de CPU

O número, o tipo e a arquitetura das máquinas que trabalham em um determinado resultado podem mudar ao longo do tempo. Como diferentes núcleos físicos podem ter diferentes características de desempenho, o Earth Engine abstrai todo o processamento usando EECUs. Uma hora de EECU (ou qualquer outra unidade de tempo de EECU) não corresponde a um tempo de relógio, portanto, um job que consome 10 horas de EECU pode ter um tempo de execução observado de apenas alguns minutos.

Estabilidade e previsibilidade

O envio de solicitações iguais (ou semelhantes) ao Earth Engine pode resultar em quantidades de computação muito diferentes. Os fatores comuns de diferenças incluem:

  • armazenamento em cache, como a reutilização dos resultados de cálculos anteriores (incluindo resultados parciais ou intermediários)
  • dados subjacentes diferentes, como números variados de imagens de satélite, geometrias de complexidade diferente etc.
  • mudanças de algoritmo na plataforma do EE, incluindo otimizações de desempenho, correções de bugs etc.
  • mudanças nas bibliotecas de cliente, principalmente se você depende do código ou dos pacotes do EE de outros usuários;

Comparativos de mercado

Confira exemplos de comparativos de mercado de computação do Earth Engine.

Métricas para solicitações com falha

O Earth Engine não fornece métricas de performance para solicitações/tarefas com falha, já que esses números seriam imprecisos ou enganosos. Por exemplo, se um job falhar porque uma tarefa do worker parou de responder, o consumo de processamento desse worker não poderá ser incluído no total.

Profiler

O criador de perfil fornece informações sobre o tempo de EECU e o uso da memória (por algoritmo e recurso) resultantes do cálculo realizado enquanto ele está ativado. Cada linha na saída do criador de perfil corresponde a um algoritmo, cálculo, carregamento de recursos ou operação de sobrecarga, conforme descrito na coluna "Descrição". As colunas no criador de perfil são:

Descrição
Uma descrição textual da computação, do algoritmo, do carregamento de recursos ou da operação de sobrecarga que está sendo analisada.
Contagem
Um indicador proporcional ao número de vezes que a operação descrita em "Descrição" foi invocada.
Computação
Um indicador do tempo de EECU gasto pelas operações.
Memória atual

Essa coluna só aparece se houver um erro porque o script

usou muita memória. Ele mostra a quantidade de memória em uso em qualquer nó de computação no momento em que o erro ocorreu.

Memória de pico

Memória máxima usada em qualquer nó de computação para a operação.

Como ativar o criador de perfil

Editor de código

Use o botão "Executar com o Profiler", conforme descrito no guia do Editor de Código.

Python

Inclua o código a seguir no script Python para ativar o criador de perfil:

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

O perfil será impresso quando o contexto terminar, independentemente de ter ocorrido algum erro no contexto.

Para capturar o perfil como uma string, grave-o em um buffer de string:

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

Veja uma sugestão para transformar a string de perfil em uma tabela para facilitar a análise no Colab e no Jupyter Notebooks. Essa é apenas uma abordagem e pode não ser adequada para todos os 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)