Earth Engine is built on top of Google's tools and services for performing computations at a massive scale. To make it easy to run large geospatial analyses, the Earth Engine platform and API hide much of the complexity of the underlying parallel-processing infrastructure.
EECUs
সংক্ষিপ্ত বিবরণ
আর্থ ইঞ্জিন কম্পিউট ইউনিট (EECU) হলো তাৎক্ষণিক প্রসেসিং ক্ষমতার পরিমাণ উপস্থাপনের একটি পদ্ধতি। আর্থ ইঞ্জিন সময়ের সাথে সাথে টাস্কগুলোর EECU ব্যবহারের ভিত্তিতে তাদের মোট কম্পিউটেশনাল ফুটপ্রিন্ট ট্র্যাক করে (EECU-সেকেন্ড, EECU-ঘণ্টা, ইত্যাদি)। যেহেতু গুগলের বিভিন্ন ধরনের প্রসেসর কোর, আর্কিটেকচার ইত্যাদি রয়েছে, তাই কম্পিউটেশনাল ক্ষমতা নিয়ে আলোচনার জন্য EECU একটি কার্যকর বিমূর্ত ধারণা।
অনুপ্রেরণা
EE users often want to make estimates about the amount of processing power required for their workflows, and EECUs provide a consistent metric for making comparisons.
সিপিইউ মেট্রিক্সের সাথে তুলনা
একটি নির্দিষ্ট ফলাফলের উপর কাজ করা মেশিনগুলির সংখ্যা, প্রকার এবং আর্কিটেকচার সময়ের সাথে সাথে পরিবর্তিত হতে পারে। যেহেতু বিভিন্ন ফিজিক্যাল কোরের পারফরম্যান্সের বৈশিষ্ট্য ভিন্ন হতে পারে, তাই আর্থ ইঞ্জিন (Earth Engine) EECU ব্যবহার করে সমস্ত প্রসেসিংকে অ্যাবস্ট্রাক্ট করে। একটি EECU-আওয়ার (বা EECU-সময়ের অন্য কোনো একক) ওয়াল ক্লক টাইমের সাথে সঙ্গতিপূর্ণ নয়, তাই যে কাজটি ১০ EECU-আওয়ার সময় নেয়, তার পর্যবেক্ষণকৃত রানটাইম মাত্র কয়েক মিনিট হতে পারে।
স্থিতিশীলতা এবং পূর্বাভাসযোগ্যতা
Sending the same (or similar) requests to Earth Engine can sometimes result in very different amounts of computation. Common drivers of differences include:
- caching , such as reusing the results of previous computations (including partial or intermediate results)
- different underlying data , such as varying numbers of satellite images, geometries of different complexity, etc.
- algorithm changes on the EE platform, including performance optimizations, bugfixes, etc.
- changes to client libraries , particularly if you depend on other users' EE code or packages
বেঞ্চমার্ক
Explore sample Earth Engine computation benchmarks .
ব্যর্থ অনুরোধের মেট্রিক্স
Earth Engine doesn't provide performance metrics for failed requests/tasks, since these numbers would be inaccurate or misleading. As an example, if a job fails because a worker task became unresponsive, that worker's processing consumption wouldn't be able to factor into the total.
প্রোফাইলার
The profiler provides information about EECU-time and memory usage (per algorithm and asset) resulting from the computation performed while it's enabled. Each row in the profiler output corresponds to an algorithm, computation, asset load or overhead operation as described in the 'Description' column. The columns in the profiler are:
- বর্ণনা
- A textual description of the computation, algorithm, asset load or overhead operation being profiled.
- গণনা
- An indicator proportional to the number of times the operation described in 'Description' was invoked.
- গণনা করুন
- An indicator of EECU-time taken by the operation(s).
- বর্তমান সদস্য
This column appears only if there was an error because the script
used too much memory. It shows the amount of memory in use on any single compute node at the moment the error occurred.
- পিক মেম
Maximum memory used on any single compute node for the operation.
প্রোফাইলার সক্রিয় করা
কোড সম্পাদক
Use the "Run with Profiler" button, as described in the Code Editor guide .
পাইথন
Include the following code in your Python script to enable the profiler:
with ee.profilePrinting():
print(ee.Number(3.14).add(0.00159).getInfo())
The profile will be printed when the context ends, whether or not any error occurred within the context.
To capture the profile as a string, write the profile to a string buffer:
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())
Here is a suggestion for turning the profile string into a table for easier analysis in Colab and Jupyter Notebooks (note that this is just one approach and may not be suitable for all cases):
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)