運算總覽

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 時間和記憶體用量 (依演算法和資產) 的相關資訊,這些資訊是啟用分析器時執行的運算結果。分析器輸出內容中的每一列都對應到演算法、運算、素材資源載入或負擔作業,如「說明」欄所述。分析器中的資料欄如下:

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