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