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.

EECUs

Visão geral

Uma unidade de computação do Earth Engine (EECU) é um mecanismo para representar uma quantidade de poder de processamento instantâneo. O Earth Engine rastreia o impacto computacional total das tarefas como uma função do uso de EECU 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 de energia elétrica geralmente querem fazer estimativas sobre a quantidade de capacidade 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 de máquinas que trabalham em um resultado específico podem mudar com o 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 EECU (ou qualquer outra unidade de tempo EECU) não corresponde a um relógio de parede. Portanto, um job que consome 10 horas EECU pode ter um tempo de execução observado de apenas alguns minutos.

Estabilidade e previsibilidade

O envio das mesmas solicitações (ou semelhantes) para o Earth Engine às vezes pode resultar em quantidades muito diferentes de computação. Os impulsionadores comuns de diferenças incluem:

  • Armazenamento em cache, como reutilizar os resultados de cálculos anteriores (incluindo resultados parciais ou intermediários)
  • diferentes dados subjacentes, como números variáveis de imagens de satélite, geometrias de diferentes complexidades etc.
  • Mudanças de algoritmo na plataforma EE, incluindo otimizações de performance, correções de bugs etc.
  • mudanças nas bibliotecas de cliente, principalmente se você depende de outros usuários ou pacotes de EE.

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 desempenho para solicitações/tarefas com falha, porque 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 será incluído no total.

Profiler

O profiler fornece informações sobre o tempo de EECU e o uso de memória (por algoritmo e recurso) resultante da computação realizada enquanto ele está ativado. Cada linha na saída do perfil corresponde a um algoritmo, computação, carregamento de recursos ou operação overhead, 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 overhead 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 aparece apenas se houve 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.

Pico de memória

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 "Run with Profiler", conforme descrito no guia do editor de código.

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

Aqui está uma sugestão para transformar a string de perfil em uma tabela para facilitar a análise no Colab e nos notebooks do Jupyter. Observe que 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)