O Earth Engine é criado com base nas ferramentas e nos serviços do Google para realizar cálculos 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ânea. O Earth Engine rastreia a pegada computacional total das tarefas como uma função do uso de EECU ao longo do tempo (segundos de EECU, horas de EECU 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 resultado específico podem mudar com o tempo. Como núcleos físicos diferentes podem ter características de desempenho diferentes, 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 de parede. Portanto, um job que consome 10 horas de EECU pode ter um tempo de execução observado de apenas alguns minutos.
Estabilidade e previsibilidade
Enviar as mesmas solicitações (ou semelhantes) ao Earth Engine às vezes resulta em quantidades muito diferentes de computação. 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 diferentes complexidades etc.
- Mudanças no algoritmo na plataforma do EE, incluindo otimizações de performance, correções de bugs etc.
- mudanças nas bibliotecas de cliente, principalmente se você depende do código ou dos pacotes de EE de outros usuários
Comparativos de mercado
Confira exemplos de comparativos 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 de 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 da computação realizada enquanto ele está ativado. Cada linha na saída do criador de perfil corresponde a um algoritmo, cálculo, carga de recursos ou operação de sobrecarga, conforme descrito na coluna "Descrição". As colunas no profiler 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 um único nó de computação no momento em que o erro ocorreu.
- Pico de memória
A 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 Code Editor.
Python
Inclua o seguinte código 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, tenha ocorrido ou não um erro dentro do 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())
Confira uma sugestão para transformar a string de perfil em uma tabela para facilitar a análise no Colab e nos Notebooks Jupyter. 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)