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

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

EECUs

סקירה כללית

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

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

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

השוואה עם מדדי CPU

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

יציבות וחיזוי

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

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

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

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

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

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

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

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

תיאור
תיאור מילולי של החישוב, האלגוריתם, טעינת הנכס או פעולת התקורה שנכללים בפרופיל.
מספר הישויות
אינדיקטור שפרופורציונלי למספר הפעמים שהופעלה הפעולה שמתוארת בקטע 'תיאור'.
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)