運算總覽

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 不會提供失敗要求/工作的成效指標, 因為這些數字不準確或會誤導使用者。舉例來說,如果工作因工作站工作無回應而失敗,該工作站的處理耗用量就無法計入總量。

Profiler

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

說明
正在剖析的運算、演算法、資產載入或額外負荷作業的文字說明。
數量
指標與「說明」中描述的作業叫用次數成正比。
運算
作業所用 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 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)