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

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)