Earth Engine מבוסס על הכלים והשירותים של Google לביצוע חישובים בקנה מידה עצום. כדי שיהיה קל להריץ ניתוחים גיאו-מרחביים גדולים, הפלטפורמה וה-API של Earth Engine מסתירים חלק גדול מהמורכבות של תשתית העיבוד המקביל הבסיסית.
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 לא תיכלל בסך הכול.
כלי לניתוח ביצועים (profiler)
כלי הפרופיילינג מספק מידע על זמן ה-EECU ועל השימוש בזיכרון (לכל אלגוריתם ונכס) כתוצאה מהחישוב שבוצע בזמן שהוא מופעל. כל שורה בפלט של כלי הניתוח תואמת לאלגוריתם, לחישוב, לטעינת נכס או לפעולת תקורה, כפי שמתואר בעמודה Description. העמודות בכלי לניתוח פרופילים הן:
- תיאור
- תיאור טקסטואלי של החישוב, האלגוריתם, עומס הנכסים או פעולת התקורה שנוצר להם פרופיל.
- ספירה
- אינדיקטור פרופורציונלי למספר הפעמים שהופעלה הפעולה שמתוארת ב-"תיאור".
- Compute
- אינדיקטור של זמן EECU שנדרש לפעולות.
- הזיכרון הנוכחי
העמודה הזו מופיעה רק אם הייתה שגיאה כי הסקריפט
השתמש ביותר מדי זיכרון. הוא מציג את כמות הזיכרון שבשימוש בצומת מחשוב מסוים ברגע שבו אירעה השגיאה.
- שיא הזיכרון
הזיכרון המקסימלי שנעשה בו שימוש בצומת מחשוב יחיד לפעולה.
הפעלת ה-Profiler
עורך הקוד
משתמשים בכפתור Run with Profiler, כמו שמתואר במדריך של עורך הקוד.
Python
כדי להפעיל את ה-profiler, מוסיפים את הקוד הבא לסקריפט 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)