Earth Engine построен на основе инструментов и сервисов Google для выполнения вычислений в огромных масштабах. Чтобы упростить проведение масштабных геопространственных анализов, платформа и API Earth Engine скрывают большую часть сложности базовой инфраструктуры параллельной обработки.
ЭЭКЮ
Обзор
Вычислительный блок 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 и использовании памяти (для каждого алгоритма и актива) в результате вычислений, выполняемых во время его включения. Каждая строка в выходных данных профайлера соответствует алгоритму, вычислению, загрузке актива или операции накладных расходов, как описано в столбце «Описание». Столбцы в профайлере:
- Описание
- Текстовое описание вычислений, алгоритмов, нагрузки на ресурсы или накладных расходов, подвергающихся профилированию.
- Считать
- Индикатор, пропорциональный количеству вызовов операции, описанной в разделе «Описание».
- Вычислить
- Показатель времени выполнения операции (операций) в ЭБУ (электронных блоках управления).
- Текущий член
Этот столбец появляется только в случае ошибки в скрипте.
Использовано слишком много памяти. Это показывает объем памяти, используемой на любом отдельном вычислительном узле в момент возникновения ошибки.
- Пиковая память
Максимальный объем памяти, используемый на любом отдельном вычислительном узле для выполнения операции.
Включение профилировщика
Редактор кода
Воспользуйтесь кнопкой "Запустить с помощью профилировщика", как описано в руководстве по редактору кода .
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)