Обзор вычислений

Earth Engine основан на инструментах и сервисах Google, предназначенных для выполнения масштабных вычислений. Чтобы упростить проведение крупномасштабного геопространственного анализа, платформа и API Earth Engine скрывают большую часть сложности базовой инфраструктуры параллельной обработки.

EECU

Обзор

Вычислительная единица Earth Engine (EECU) – это механизм для представления объема мгновенной вычислительной мощности. Earth Engine отслеживает общую вычислительную нагрузку задач как функцию использования EECU во времени (EECU-секунды, EECU-часы и т. д.). Поскольку в Google используется множество разных типов ядер процессоров, архитектур и т. д., EECU – это полезная абстракция для разговора о вычислительной мощности.

Мотивация

Пользователям EE часто требуется оценить вычислительную мощность, необходимую для их рабочих процессов, и EECU предоставляют согласованную метрику для сравнения.

Сравнение с показателями ЦП

Количество, тип и архитектура машин, работающих над определенным результатом, могут со временем меняться. Поскольку разные физические ядра могут иметь разные характеристики производительности, Earth Engine абстрагирует всю обработку с помощью EECU. Час EECU (или любая другая единица времени EECU) не соответствует астрономическому времени, поэтому задание, которое потребляет 10 часов EECU, может выполняться всего несколько минут.

Стабильность и предсказуемость

Отправка одинаковых (или похожих) запросов в Earth Engine иногда может привести к очень разным объемам вычислений. Вот основные причины расхождений:

  • кеширование, например повторное использование результатов предыдущих вычислений (включая частичные или промежуточные результаты);
  • разные исходные данные, например разное количество спутниковых снимков, геометрия разной сложности и т. д.
  • изменения алгоритмов на платформе EE, включая оптимизацию производительности, исправление ошибок и т. д.
  • изменения в клиентских библиотеках, особенно если вы используете код или пакеты EE других пользователей.

Контрольные показатели

Ознакомьтесь с примерами контрольных показателей вычислений в Earth Engine.

Показатели для неудачных запросов

Earth Engine не предоставляет показатели эффективности для неудачных запросов/задач, поскольку эти цифры будут неточными или вводящими в заблуждение. Например, если задание не выполнено из-за того, что задача рабочего процесса перестала отвечать, потребление ресурсов на обработку этой задачи не будет учитываться в общем объеме.

Профилировщик

Профилировщик предоставляет информацию о времени EECU и использовании памяти (для каждого алгоритма и объекта), полученную в результате вычислений, выполненных во время его работы. Каждая строка в выходных данных профилировщика соответствует алгоритму, вычислению, загрузке объекта или накладной операции, как указано в столбце "Описание". В профилировщике есть следующие столбцы:

Описание
Текстовое описание вычисления, алгоритма, загрузки объекта или накладных расходов, которые профилируются.
Количество
Показатель, пропорциональный количеству вызовов операции, указанной в столбце "Описание".
Compute
Показатель времени EECU, затраченного на выполнение операций.
Текущая память

Этот столбец появляется, только если произошла ошибка, поскольку скрипт

использовала слишком много памяти. В нем указан объем памяти, используемый на любом вычислительном узле в момент возникновения ошибки.

Пиковая память

Максимальный объем памяти, используемый на любом вычислительном узле для операции.

Как включить профилировщик

Редактор кода

Нажмите кнопку Run with Profiler (Запустить с профилировщиком), как описано в руководстве по редактору кода.

Python

Чтобы включить профилировщик, добавьте в скрипт Python следующий код:

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

Профиль будет напечатан по окончании контекста, независимо от того, произошла ли ошибка в контексте.

Чтобы сохранить профиль в виде строки, запишите его в буфер строк:

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

Ниже приведен пример того, как преобразовать строку профиля в таблицу для упрощения анализа в Colab и Jupyter Notebooks (обратите внимание, что это лишь один из подходов, который может подойти не для всех случаев):

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)