نظرة عامة على الحوسبة

تم إنشاء Earth Engine استنادًا إلى أدوات Google وخدماتها لإجراء محاسبات على نطاق واسع. لتسهيل إجراء تحليلات جغرافية مكانية كبيرة، تحجب منصة Earth Engine وواجهة برمجة التطبيقات الكثير من التعقيدات في البنية الأساسية للمعالجة المتوزية.

نظام EECU

نظرة عامة

وحدة الحوسبة في Earth Engine (EECU) هي آلية لتمثيل مقدار طاقة المعالجة الفورية. تتتبّع أداة Earth Engine إجمالي أثر المهام الحسابي استنادًا إلى استخدامها لوحدة معالجة الطاقة الإلكترونية (EECU) بمرور الوقت (ثواني وحدة معالجة الطاقة الإلكترونية وساعات وحدة معالجة الطاقة الإلكترونية وما إلى ذلك). لأنّ Google لديها العديد من الأنواع المختلفة من نوى المعالجات والهياكل وغيرها إنّ وحدات المعالجة المركزية للطاقة الكهربائية هي نموذج مجرد مفيد للحديث عن الطاقة الحسابية.

الحافز

غالبًا ما يريد مستخدمو الأجهزة الإلكترونية إجراء تقديرات بشأن مقدار طاقة المعالجة المطلوبة لسير العمل، وتقدّم وحدات EECU مقياسًا متّسقًا لإجراء مقارنة.

المقارنة بمقاييس وحدة المعالجة المركزية

يمكن أن يتغيّر عدد الأجهزة وأنواعها وبنيتها التي تعمل على نتيجة معيّنة بمرور الوقت. بما أنّ النوى المادية المختلفة يمكن أن تمتلك ميزات أداء مختلفة، تُلخِّص Earth Engine جميع عمليات المعالجة باستخدام وحدات المعالجة المركزية للتطبيقات الإلكترونية. لا تتوافق ساعة EECU (أو أي وحدة أخرى من وقت EECU) مع وقت الساعة المعروض على الحائط، لذا قد يكون وقت التشغيل المرصود لمهمة تستهلك 10 ساعات EECU هو بضع دقائق فقط.

الثبات والقدرة على التنبؤ

قد يؤدي إرسال الطلبات نفسها (أو الطلبات المشابهة) إلى Earth Engine أحيانًا إلى اختلافٍ كبير في عمليات الحساب. تشمل الأسباب الشائعة للاختلافات ما يلي:

  • التخزين المؤقت، مثل إعادة استخدام نتائج العمليات الحسابية السابقة (بما في ذلك النتائج الجزئية أو الوسيطة)
  • بيانات أساسية مختلفة، مثل أعداد مختلفة من صور الأقمار الصناعية، أشكال هندسية بمستويات تعقيد مختلفة، وما إلى ذلك
  • تغييرات الخوارزمية على منصة EE، بما في ذلك تحسينات الأداء وإصلاحات الأخطاء وما إلى ذلك
  • التغييرات في مكتبات العميل، خاصةً إذا كنت تعتمد على رمز أو حِزم ECMAScript الخاصة بالمستخدمين الآخرين

مقاييس الأداء

اطّلِع على عيّنة من مقاييس أداء العمليات الحسابية في Earth Engine.

مقاييس الطلبات التي تعذّر تنفيذها

لا يوفّر Earth Engine مقاييس الأداء للطلبات أو المهام التي تعذّر إكمالها، لأنّ هذه الأرقام ستكون غير دقيقة أو مضلِّلة. على سبيل المثال، إذا تعذّر إكمال مهمة لأنّ إحدى مهام العمال لم تعُد تستجيب، لن يتم احتساب استهلاك معالجة هذا العامل في الإجمالي.

أداة تحليل الأداء

يقدّم أداة تحليل الأداء معلومات عن وقت معالجة وحدة التحكّم في الطاقة واستخدام الذاكرة (لكل خطوة في الإجراء ومادّة عرض) الناتج عن العمليات الحسابية التي يتم إجراؤها عندما تكون الميزة مفعّلة. يتطابق كل صف في ناتج أداة تحليل الأداء مع خوارزمية أو عملية حسابية أو تحميل مواد عرض أو عملية إدارية كما هو موضّح في عمود "الوصف". في ما يلي الأعمدة في أداة تحليل الأداء:

الوصف
وصف نصي للحساب أو الخوارزمية أو تحميل مواد العرض أو العملية الإضافية التي يتم تحليلها
الإحصاء
مؤشر يتناسب مع عدد مرّات استدعاء العملية الموضّحة في "الوصف"
الحوسبة
مؤشر لوقت 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)