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)