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

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)