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

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

ईईसीयू

खास जानकारी

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

वजह

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

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

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

स्थिरता और अनुमान लगाना

Earth Engine को एक जैसे या मिलते-जुलते अनुरोध भेजने पर, कभी-कभी कैलकुलेशन की अवधि बहुत अलग हो सकती है. अंतर की सामान्य वजहें ये हैं:

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

मानदंड

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)