কম্পিউটেশন ওভারভিউ

Earth Engine, Google-এর টুল ও পরিষেবার উপর ভিত্তি করে তৈরি করা হয়েছে যাতে বিশাল স্কেলে কম্পিউটেশন করা যায়। বড় জিওস্পেশিয়াল বিশ্লেষণ সহজে রান করার জন্য, Earth Engine প্ল্যাটফর্ম এবং API অন্তর্নিহিত প্যারালাল-প্রসেসিং পরিকাঠামোর জটিলতার বেশিরভাগটাই লুকিয়ে রাখে।

EECUs

এক নজরে

Earth Engine Compute Unit (EECU) হল এমন একটি মেকানিজম যা তাৎক্ষণিক প্রসেসিং পাওয়ারের পরিমাণ দেখায়। Earth Engine সময়ের সাথে সাথে EECU ব্যবহারের ফাংশন হিসেবে টাস্কের মোট কম্পিউটেশনাল ফুটপ্রিন্ট ট্র্যাক করে (EECU-সেকেন্ড, EECU-ঘণ্টা ইত্যাদি)। Google-এর কাছে বিভিন্ন ধরনের প্রসেসর কোর, আর্কিটেকচার ইত্যাদি আছে, কম্পিউটেশনাল পাওয়ার সম্পর্কে কথা বলার জন্য EECU হল একটি উপযোগী অ্যাবস্ট্রাকশন।

অনুপ্রেরণা

EE ব্যবহারকারীরা প্রায়ই তাদের ওয়ার্কফ্লোর জন্য প্রয়োজনীয় প্রসেসিং পাওয়ারের পরিমাণ অনুমান করতে চান এবং EECU তুলনা করার জন্য একটি সামঞ্জস্যপূর্ণ মেট্রিক প্রদান করে।

CPU মেট্রিকের সাথে তুলনা

নির্দিষ্ট কোনও ফলাফল দেখানোর জন্য কাজ করা মেশিনের সংখ্যা, ধরন ও আর্কিটেকচার সময়ের সাথে সাথে পরিবর্তিত হতে পারে। বিভিন্ন ফিজিক্যাল কোরের পারফর্ম্যান্সের বৈশিষ্ট্য আলাদা হতে পারে, তাই Earth Engine, EECU ব্যবহার করে সব প্রসেসিং অ্যাবস্ট্র্যাক্ট করে। EECU-ঘণ্টা (বা EECU-সময়ের অন্য কোনও ইউনিট) ঘড়ির সময়ের সাথে মেলে না, তাই ১০ EECU-ঘণ্টা ব্যবহার করে এমন কোনও কাজের রানটাইম মাত্র কয়েক মিনিট হতে পারে।

স্থায়িত্ব এবং পূর্বাভাসযোগ্যতা

Earth Engine-এ একই (বা একই ধরনের) অনুরোধ পাঠালে, কখনও কখনও খুবই আলাদা আলাদা পরিমাণে কম্পিউটেশন হতে পারে। পার্থক্যের সাধারণ কারণগুলির মধ্যে রয়েছে:

  • ক্যাশিং, যেমন আগের গণনার ফলাফল (আংশিক বা মধ্যবর্তী ফলাফল সহ) পুনরায় ব্যবহার করা
  • বিভিন্ন অন্তর্নিহিত ডেটা, যেমন স্যাটেলাইট ইমেজের বিভিন্ন সংখ্যা, বিভিন্ন জটিলতার জ্যামিতি ইত্যাদি।
  • EE প্ল্যাটফর্মে পারফর্ম্যান্স অপ্টিমাইজেশন, সমস্যার সমাধান ইত্যাদি সহ অ্যালগরিদম পরিবর্তন।
  • ক্লায়েন্ট লাইব্রেরিতে পরিবর্তন, বিশেষ করে আপনি যদি অন্য ব্যবহারকারীর EE কোড বা প্যাকেজের উপর নির্ভর করেন

বেঞ্চমার্ক

Earth Engine কম্পিউটেশন বেঞ্চমার্কের স্যাম্পেল এক্সপ্লোর করুন।

ব্যর্থ অনুরোধের মেট্রিক

Earth Engine ব্যর্থ অনুরোধ/টাস্কের জন্য পারফর্ম্যান্স মেট্রিক প্রদান করে না, কারণ এই সংখ্যাগুলি ভুল বা বিভ্রান্তিকর হবে। যেমন, কোনও কর্মী টাস্ক প্রতিক্রিয়া না দেওয়ার কারণে কোনও কাজ ব্যর্থ হলে, সেই কর্মীর প্রসেসিং খরচ মোট খরচের মধ্যে অন্তর্ভুক্ত করা যাবে না।

প্রোফাইলার

প্রোফাইলার EECU-সময় এবং মেমরির ব্যবহার (অ্যালগরিদম এবং অ্যাসেট প্রতি) সম্পর্কে তথ্য প্রদান করে যা এটি চালু থাকাকালীন সম্পাদিত গণনা থেকে পাওয়া যায়। প্রোফাইলার আউটপুটের প্রতিটি সারি একটি অ্যালগরিদম, কম্পিউটেশন, অ্যাসেট লোড বা ওভারহেড অপারেশনকে বোঝায়, যেমনটি 'বিবরণ' কলামে বর্ণনা করা হয়েছে। প্রোফাইলারের কলামগুলি হল:

বিবরণ
প্রোফাইল করা হচ্ছে এমন কম্পিউটেশন, অ্যালগরিদম, অ্যাসেট লোড বা ওভারহেড অপারেশনের টেক্সট বিবরণ।
গণনা
'বিবরণ' বিভাগে বর্ণিত অপারেশন যতবার কল করা হয়েছে, তার সমানুপাতিক একটি সূচক।
কম্পিউট করা
অপারেশন(গুলি) দ্বারা নেওয়া EECU-সময়ের একটি সূচক।
বর্তমান মেম

স্ক্রিপ্টের কারণে কোনও সমস্যা হলে তবেই এই কলামটি দেখা যায়

অনেক বেশি মেমরি ব্যবহার করেছে। সমস্যা হওয়ার মুহূর্তে যেকোনও একটি কম্পিউট নোডে কতটা মেমরি ব্যবহার করা হচ্ছে তা এটি দেখায়।

সর্বোচ্চ মেম

অপারেশনের জন্য যেকোনও একটি কম্পিউট নোডে ব্যবহৃত সর্বাধিক মেমরি।

প্রোফাইলার চালু করা হচ্ছে

কোড এডিটর

কোড এডিটর গাইড-এ যেমন বলা হয়েছে, সেই অনুযায়ী "প্রোফাইলারের সাথে রান করুন" বোতামটি ব্যবহার করুন।

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)