نمای کلی محاسبات

Earth Engine بر پایه ابزارها و سرویس‌های Google برای انجام محاسبات در مقیاس بزرگ ساخته شده است. برای آسان کردن اجرای تحلیل‌های بزرگ جغرافیایی-فضایی، پلاتفرم و میانای برنامه‌سازی کاربردی Earth Engine بخش زیادی از پیچیدگی زیرساخت پردازش موازی زیربنایی را پنهان می‌کنند.

EECU

نمای کلی

«واحد محاسباتی Earth Engine»‏ (EECU) مکانیزمی برای نمایش مقدار قدرت پردازش آنی است. Earth Engine ردپای محاسباتی کل تکالیف را به‌عنوان تابعی از استفاده EECU آن‌ها درطول زمان (ثانیه EECU، ساعت EECU، و غیره) ردیابی می‌کند. چون Google انواع مختلفی از هسته‌های پردازنده، معماری‌ها، و غیره دارد، EECU انتزاع مفیدی برای صحبت کردن درباره قدرت محاسباتی است.

انگیزه

کاربران EE اغلب می‌خواهند میزان قدرت پردازش موردنیاز برای گردش‌های کاری خود را تخمین بزنند و EECU سنجه‌ای ثابت برای انجام مقایسه‌ها ارائه می‌دهد.

مقایسه با سنجه‌های CPU

تعداد، نوع، و معماری ماشین‌هایی که روی نتیجه خاصی کار می‌کنند ممکن است به‌مرور زمان تغییر کند. چون هسته‌های فیزیکی مختلف می‌توانند ویژگی‌های عملکردی متفاوتی داشته باشند، Earth Engine همه پردازش‌ها را بااستفاده از EECU خلاصه می‌کند. یک ساعت EECU (یا هر واحد دیگری از زمان EECU) با زمان ساعت دیواری مطابقت ندارد، بنابراین کاری که ۱۰ ساعت EECU مصرف می‌کند ممکن است زمان اجرای مشاهده‌شده‌ای فقط چند دقیقه‌ای داشته باشد.

پایداری و پیش‌بینی‌پذیری

ارسال درخواست‌های یکسان (یا مشابه) به Earth Engine گاهی اوقات می‌تواند منجر به مقادیر بسیار متفاوتی از محاسبات شود. عوامل رایج تفاوت‌ها عبارت‌اند از:

  • ذخیره در حافظه نهان، مانند استفاده مجدد از نتایج محاسبات قبلی (ازجمله نتایج جزئی یا میانی)
  • داده‌های زیربنایی متفاوت، مانند تعداد متغیر تصاویر ماهواره‌ای، هندسه‌هایی با پیچیدگی‌های متفاوت، و غیره.
  • تغییرات الگوریتم در پلاتفرم EE، ازجمله بهینه‌سازی‌های عملکرد، رفع اشکال‌ها، و غیره.
  • تغییرات در کتابخانه‌های کارخواه، به‌ویژه اگر به کد یا بسته‌های EE کاربران دیگر وابسته باشید

معیارها

محک‌های محاسباتی نمونه Earth Engine را کاوش کنید.

سنجه‌های درخواست‌های ناموفق

Earth Engine سنجه‌های عملکرد را برای درخواست‌ها/ تکالیف ناموفق ارائه نمی‌دهد، زیرا این اعداد نادرست یا گمراه‌کننده خواهند بود. به‌عنوان مثال، اگر کاری ناموفق باشد چون تکلیف کارگر پاسخگو نبوده است، مصرف پردازش آن کارگر نمی‌تواند در کل لحاظ شود.

نمایه‌ساز

نمایه‌ساز اطلاعاتی درباره زمان EECU و استفاده از حافظه (به‌ازای هر الگوریتم و دارایی) ارائه می‌دهد که از محاسبات انجام‌شده درحین فعال بودن آن حاصل می‌شود. هر ردیف در خروجی نمایه‌ساز با یک الگوریتم، محاسبه، بارگذاری دارایی، یا عملیات سربار مطابقت دارد که در ستون «شرح» توضیح داده شده است. ستون‌های موجود در نمایه‌ساز عبارتند از:

شرح
شرح نوشتاری از محاسبه، الگوریتم، بار دارایی، یا عملیات سرباری که نمایه می‌شود.
شمارش
شاخصی متناسب با تعداد دفعاتی که عملیات شرح‌داده‌شده در «شرح» فراخوانده شده است.
Compute
نشانگر زمان 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)