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

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

وحدات EECU

نظرة عامة

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

الحافز

يريد مستخدِمو Earth Engine غالبًا إجراء تقديرات حول مقدار قوة المعالجة المطلوبة لسير العمل، وتوفّر وحدات EECU مقياسًا متّسقًا لإجراء المقارنات.

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

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

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

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

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

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

يمكنك استكشاف نماذج مقاييس أداء عمليات الحوسبة في 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)