運算總覽

Earth Engine 是建構在 Google 工具和服務之上,可執行大規模運算。為了讓您輕鬆執行大型地理空間分析,Earth Engine 平台和 API 會隱藏大部分底層並行處理基礎架構的複雜度。

EECU

總覽

Earth Engine 運算單元 (EECU) 是一種機制,用於表示即時處理能力的數量。Earth Engine 會追蹤工作的總運算足跡,並以 EECU 使用量 (EECU 秒數、EECU 小時數等) 做為函數。由於 Google 有許多不同類型的處理器核心、架構等,EECU 是討論運算能力時實用的抽象概念。

動機

EE 使用者通常會想預估工作流程所需的處理效能,而 EECU 可提供一致的指標,用於進行比較。

與 CPU 指標的比較

處理特定結果的機器數量、類型和架構可能會隨時間變更。由於不同實體核心的效能特徵可能不同,Earth Engine 會使用 EECU 抽象化所有處理作業。EECU 小時 (或任何其他 EECU 時間單位) 與時鐘時間不相符,因此耗用 10 EECU 小時的工作可能實際上只花了幾分鐘。

穩定性和可預測性

向 Earth Engine 傳送相同 (或類似) 要求時,有時會導致運算量差異甚大。造成差異的常見因素包括:

  • 快取,例如重複使用先前運算的結果 (包括部分或中間結果)
  • 不同的基礎資料,例如不同的衛星圖像數量、不同複雜度的幾何圖形等。
  • EE 平台的演算法變更,包括效能最佳化、錯誤修正等。
  • 用戶端程式庫變更,特別是如果您依賴其他使用者的 EE 程式碼或套件

基準

探索Earth Engine 運算基準測試範例

失敗要求的指標

由於失敗的請求/工作數字可能不準確或誤導,Earth Engine 不會提供相關成效指標。舉例來說,如果工作因 worker 工作未回應而失敗,則該 worker 的處理耗用量將無法納入總計。

Profiler

分析器會提供 EECU 時間和記憶體用量 (依照啟用時執行的運算結果,依照演算法和資產) 相關資訊。剖析器輸出內容中的每個資料列都對應至「說明」欄所述的演算法、運算、素材資源載入或額外作業。分析器中的資料欄如下:

說明
對正在分析的運算、演算法、素材資源載入或額外作業的文字說明。
數量
這項指標與「Description」中所述作業的叫用次數成正比。
運算
指標,表示作業所需的 EECU 時間。
目前的記憶體

只有在指令碼發生錯誤時,這個欄才會顯示

使用過多記憶體。這項指標會顯示在錯誤發生時,任何單一運算節點上使用的記憶體量。

尖峰記憶體

在任何單一運算節點上,為該作業使用的記憶體上限。

啟用分析器

程式碼編輯器

請按下「Run with Profiler」按鈕,如程式碼編輯器指南所述。

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 Notebook 中進行分析 (請注意,這只是一種方法,可能不適用於所有情況):

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)