סקירה כללית על החישוב

‏Earth Engine מבוסס על הכלים והשירותים של Google לביצוע חישובים בקנה מידה עצום. כדי להריץ בקלות ניתוחים גיאו-מרחביים גדולים, פלטפורמת Earth Engine וממשק ה-API שלה מסתירים את רוב המורכבות של התשתית הבסיסית לעיבוד מקבילי.

EECU

סקירה כללית

יחידת מחשוב של Earth Engine‏ (EECU) היא מנגנון לייצוג של כמות של כוח עיבוד מיידי. מערכת Earth Engine עוקבת אחרי טביעת הרגל המחשובית הכוללת של המשימות, כפונקציה של השימוש שלהן ב-EECU לאורך זמן (EECU-שניות, EECU-שעות וכו'). מכיוון של-Google יש סוגים רבים ושונים של ליבות מעבדים, ארכיטקטורות וכו', יחידות EECU הן מושג מופשט שימושי לדיבור על עוצמה מחשובית.

למה בחרנו לעשות זאת?

משתמשי EE בדרך כלל רוצים לבצע אומדנים לגבי כמות כוח העיבוד שנדרשת לתהליכי העבודה שלהם, ו-EECUs מספקים מדד עקבי לביצוע השוואות.

השוואה למדדי מעבד (CPU)

המספר, הסוג והארכיטקטורה של המכונות שפועלות על תוצאה מסוימת יכולים להשתנות לאורך זמן. מכיוון שלליבות פיזיים שונים יכולות להיות מאפייני ביצועים שונים, מערכת Earth Engine מבצעת הפשטה של כל העיבוד באמצעות יחידות EECU. שעה EECU (או כל יחידה אחרת של זמן EECU) לא תואמת לשעון הקיר, כך שמשך זמן הריצה של משימה שצורכת 10 שעות EECU עשוי להיות רק כמה דקות.

יציבות ויכולת חיזוי

לפעמים, שליחת אותן בקשות (או בקשות דומות) ל-Earth Engine יכולה לגרום לזמני חישוב שונים מאוד. אלה כמה מהגורמים הנפוצים להבדלים:

  • אחסון במטמון, למשל שימוש חוזר בתוצאות של חישובים קודמים (כולל תוצאות חלקיות או ביניים)
  • נתונים בסיסיים שונים, כמו מספרים שונים של תמונות לוויין, גיאומטריות ברמות מורכבות שונות וכו'.
  • שינויים באלגוריתם בפלטפורמת EE, כולל אופטימיזציות של ביצועים, תיקוני באגים וכו'.
  • שינויים בספריות לקוח, במיוחד אם אתם תלויים בקוד או בחבילות של משתמשים אחרים ב-EE

נקודות השוואה

דוגמאות למדדי ביצועים של חישובים ב-Earth Engine

מדדים של בקשות שנכשלו

מערכת Earth Engine לא מספקת מדדי ביצועים לבקשות או למשימות שנכשלו, כי המספרים האלה לא יהיו מדויקים או מטעים. לדוגמה, אם משימה של עובד לא מגיבה, צריכת העיבוד של אותו עובד לא תוכל להיכלל בסך הכול.

כלי לניתוח ביצועים (profiler)

הכלי למעקב אחר ביצועים מספק מידע על זמן ה-EECU ועל השימוש בזיכרון (לכל אלגוריתם ונכס) שנובעים מהחישובים שבוצעו בזמן שהוא מופעל. כל שורה בפלט של הכלי לניתוח ביצועים תואמת לאלגוריתם, לחישוב, לטעינת נכס או לפעולה של התקורה, כפי שמתואר בעמודה 'תיאור'. העמודות בניתוח הפרופיל הן:

תיאור
תיאור טקסטואלי של החישוב, האלגוריתם, עומס הנכס או פעולת העלויות הנוספות שנוצרות במהלך הניתוח.
כמות
מדד שפרופורציונלי למספר הפעמים שהפעולה שמתוארת בקטע 'תיאור' הופעל
.
Compute
מדד של זמן ה-EECU שנדרש לביצוע הפעולות.
Current Mem

העמודה הזו מופיעה רק אם הייתה שגיאה כי הסקריפט

השתמשו בזיכרון רב מדי. הוא מציג את כמות הזיכרון שבשימוש בכל צומת מחשוב בודד בזמן שהשגיאה התרחשה.

Peak Mem

נפח הזיכרון המקסימלי שנעשה בו שימוש בכל צומת מחשוב יחיד של הפעולה.

הפעלת הכלי לניתוחי פרופיל

עורך קוד

משתמשים בלחצן 'הרצה באמצעות הכלי למעקב ביצועים', כפי שמתואר במדריך ל-Code Editor.

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)