कैलकुलेशन की खास जानकारी

Earth Engine, Google के टूल और सेवाओं पर बना है. इसकी मदद से, बड़े पैमाने पर कंप्यूटेशन किया जा सकता है. बड़े जियोस्पेशल विश्लेषण को आसानी से चलाने के लिए, Earth Engine प्लैटफ़ॉर्म और API, पैरलल-प्रोसेसिंग इन्फ़्रास्ट्रक्चर की ज़्यादातर जटिलता को छिपाते हैं.

ईईसीयू

खास जानकारी

Earth Engine Compute Unit (ईईसीयू), इंस्टैंट प्रोसेसिंग पावर की मात्रा को दिखाने का एक तरीका है. Earth Engine, टास्क के कुल कंप्यूटेशनल फ़ुटप्रिंट को, समय के साथ ईईसीयू के इस्तेमाल के फ़ंक्शन के तौर पर ट्रैक करता है. जैसे, ईईसीयू-सेकंड, ईईसीयू-घंटे वगैरह. Google के पास अलग-अलग तरह के प्रोसेसर कोर, आर्किटेक्चर वगैरह हैं. ईईसीयू, कंप्यूटेशनल पावर के बारे में बात करने के लिए एक काम का ऐब्स्ट्रैक्शन है.

वजह

ईई के उपयोगकर्ता अक्सर अपने वर्कफ़्लो के लिए ज़रूरी प्रोसेसिंग पावर की मात्रा का अनुमान लगाना चाहते हैं. ईईसीयू, तुलना करने के लिए एक जैसी मेट्रिक उपलब्ध कराता है.

सीपीयू मेट्रिक से तुलना

किसी खास नतीजे पर काम करने वाली मशीनों की संख्या, टाइप, और आर्किटेक्चर समय के साथ बदल सकता है. अलग-अलग फ़िज़िकल कोर की परफ़ॉर्मेंस अलग-अलग हो सकती है. इसलिए, Earth Engine, ईईसीयू का इस्तेमाल करके सभी प्रोसेसिंग को ऐब्स्ट्रैक्ट करता है. ईईसीयू-घंटा (या ईईसीयू-टाइम की कोई अन्य यूनिट), वॉल क्लॉक टाइम के बराबर नहीं होती. इसलिए, 10 ईईसीयू-घंटे इस्तेमाल करने वाले किसी जॉब का रनटाइम, कुछ ही मिनट हो सकता है.

ऐप्लिकेशन को क्रैश या फ़्रीज़ होने जैसी समस्याओं से बचाना और अनुमान लगाने की सुविधा

Earth Engine को एक जैसे (या मिलते-जुलते) अनुरोध भेजने पर, कभी-कभी कंप्यूटेशन की मात्रा में काफ़ी अंतर आ सकता है. अंतर की सामान्य वजहें ये हैं:

  • कैशिंग, जैसे कि पहले किए गए कंप्यूटेशन के नतीजों का फिर से इस्तेमाल करना. इसमें आंशिक या इंटरमीडिएट नतीजे भी शामिल हैं
  • अलग-अलग डेटा का इस्तेमाल करना, जैसे कि अलग-अलग संख्या में सैटेलाइट इमेज, अलग-अलग जटिलता वाली ज्यामिति वगैरह
  • ईई प्लैटफ़ॉर्म पर एल्गोरिदम में बदलाव , जैसे कि परफ़ॉर्मेंस ऑप्टिमाइज़ेशन, बगफ़िक्स वगैरह
  • क्लाइंट लाइब्रेरी में बदलाव. खास तौर पर, अगर आप अन्य उपयोगकर्ताओं के ईई कोड या पैकेज पर निर्भर हैं

मानदंड

Earth Engine के कंप्यूटेशन के सैंपल बेंचमार्क देखें.

पूरे न हो पाने वाले अनुरोधों की मेट्रिक

Earth Engine, पूरे न हो पाने वाले अनुरोधों/टास्क के लिए परफ़ॉर्मेंस मेट्रिक उपलब्ध नहीं कराता. ऐसा इसलिए है, क्योंकि ये संख्याएं गलत या गुमराह करने वाली हो सकती हैं. उदाहरण के लिए, अगर कोई जॉब इसलिए पूरा नहीं हो पाता, क्योंकि वर्कर टास्क रिस्पॉन्स नहीं दे रहा है, तो उस वर्कर की प्रोसेसिंग खपत को कुल खपत में शामिल नहीं किया जा सकेगा.

प्रोफ़ाइलर

प्रोफ़ाइलर, ईईसीयू-टाइम और मेमोरी के इस्तेमाल (हर एल्गोरिदम और ऐसेट के हिसाब से) के बारे में जानकारी देता है. यह जानकारी, प्रोफ़ाइलर के चालू होने पर किए गए कंप्यूटेशन से मिलती है. प्रोफ़ाइलर के आउटपुट की हर लाइन, 'ब्यौरा' कॉलम में बताए गए किसी एल्गोरिदम, कंप्यूटेशन, ऐसेट लोड या ओवरहेड ऑपरेशन से जुड़ी होती है. प्रोफ़ाइलर में ये कॉलम होते हैं:

ब्यौरा
प्रोफ़ाइल किए जा रहे कंप्यूटेशन, एल्गोरिदम, ऐसेट लोड या ओवरहेड ऑपरेशन का टेक्स्ट में ब्यौरा.
संख्या
यह एक इंडिकेटर है, जो 'ब्यौरा' में बताए गए ऑपरेशन को लागू किए जाने की संख्या के हिसाब से तय होता है.
कंप्यूट
यह ईईसीयू-टाइम का इंडिकेटर है, जो ऑपरेशन(नों) में लगता है.
मौजूदा मेमोरी

यह कॉलम सिर्फ़ तब दिखता है, जब कोई गड़बड़ी हुई हो. ऐसा इसलिए होता है, क्योंकि स्क्रिप्ट

ने बहुत ज़्यादा मेमोरी इस्तेमाल की हो. इससे पता चलता है कि गड़बड़ी होने के समय, किसी एक कंप्यूट नोड पर कितनी मेमोरी इस्तेमाल की जा रही थी.

पीक मेमोरी

किसी ऑपरेशन के लिए, किसी एक कंप्यूट नोड पर इस्तेमाल की गई ज़्यादा से ज़्यादा मेमोरी.

प्रोफ़ाइलर को चालू करना

कोड एडिटर

कोड एडिटर की गाइड में बताए गए तरीके के मुताबिक, "प्रोफ़ाइलर के साथ चलाएं" बटन का इस्तेमाल करें.

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)