処理環境

Earth Engine には、データ処理用のインタラクティブ環境とバッチ環境があります。これらの 2 つの環境(または「レルム」)は、異なるタイプのクエリを処理し、パフォーマンス特性が大きく異なるため、それぞれを使用するタイミングと方法を理解することが重要です。

インタラクティブ環境

「同期」または「オンライン」スタックとも呼ばれるこの環境は、すぐに完了する小規模なリクエストへの応答に最適化されています(レスポンスは数十メガバイトのデータに制限され、5 分以内に処理を完了する必要があります)。割り当て上限まで、多くのリクエストを並列に実行できます。

エンドポイント

インタラクティブ環境は、標準高負荷の異なる API エンドポイントで構成されています。

標準エンドポイント

標準エンドポイントは、ほとんどの人による使用に適しています。これは、コードエディタと Earth Engine アプリを強化するものです。具体的には、このエンドポイントは、プログラム以外の低量の同時リクエストが関係する、レイテンシに敏感なアプリケーションに最適です。

大量のエンドポイント

大容量エンドポイントは、標準エンドポイントよりも多くのリクエストを並行して処理するように設計されています。主な違いは次のとおりです。

  • レイテンシが高い: 高負荷エンドポイントでは、リクエストあたりの平均レイテンシが高くなります。
  • キャッシュ保存が少ない: 中間結果のキャッシュ保存が少なくなるため、複雑なクエリでは計算時間が長くなる可能性があります。
  • 自動化された小規模なクエリに最適: 大容量エンドポイントは、多数のプログラマティック リクエストの処理に優れていますが、集計を必要としない単純なクエリ(ビルド済み画像からタイルを取得するなど)に最適です。

効率的なキャッシュ保存が必要な複雑な分析の場合は、標準の API エンドポイントが適している場合があります。大容量エンドポイントは、高スループットで計算量の少ないタスク用に最適化されています。通常、複雑なクエリでは、大容量エンドポイントを使用する場合、通常のオンライン エンドポイントよりも多くの EECU 時間が必要になります。

大量のエンドポイントの使用

Python クライアント

earthengine ライブラリを初期化するときに、opt_url パラメータを渡して https://earthengine-highvolume.googleapis.com に設定します。いつものように、適切な認証情報を渡し、Cloud プロジェクトを指定してください。次に例を示します。

ee.Initialize(
    credentials=credentials,
    project='my-project',
    opt_url='https://earthengine-highvolume.googleapis.com'
)

JavaScript クライアント

ee.initialize() を使用して earthengine ライブラリを初期化する場合は、最初のパラメータに https://earthengine-highvolume.googleapis.com を渡します。

REST API

REST リクエストを https://earthengine-highvolume.googleapis.com に転送します(REST API クイックスタートに示すように、https://earthengine.googleapis.com ではなく)。

バッチ環境

「非同期」または「オフライン」スタックとも呼ばれるこの環境は、大量のデータを高レイテンシの並列処理するように最適化されています。リクエストは、通常、データのimport関数またはエクスポート関数(Export.*ee.batch.*)を使用します。各バッチタスクの最大存続期間は 10 日です。各プロジェクトは最大 3, 000 件の保留タスクをサポートしますが、各ユーザーは少数の同時実行タスクに制限されます。

タスクのライフサイクル

タスクはキューに送信され、優先度(高いものから順に)と送信時間(早いものから順に)で並べ替えられます。タスクがバッチ プロセッサに割り当てられると、タスクの状態は SUBMITTED(キュー内)から RUNNING に変わります。各プロセッサは、さまざまな数のバッチワーカーをオーケストレートして計算を実行し、タスクの結果を生成します。タスクのワーカー数は、EE サービスのジョブの並列処理能力によって決まります。ユーザーが構成することはできません。

Cloud プロジェクトを使用する場合、タスクを一覧表示するプロジェクト レベルの権限を持つすべてのユーザーにタスクが表示されます。プロジェクトが有料の Earth Engine アクセスに登録されている場合、タスクはプロジェクト全体のキュー内に編成されます。プロジェクトが無料(研究用)のアクセスに登録されている場合、タスクは個別にスケジュールされますが、プロジェクトのすべてのユーザーに表示されます。

必要なアーティファクト(Earth Engine アセット、Google Cloud Storage 内のファイルなど)が作成されると、タスクは正常に完了します。

タスク管理

タスクは、次のインターフェースを使用して表示およびキャンセルできます。

タスクの失敗

再試行しても修正されない理由(データが無効であるなど)でタスクが失敗した場合、タスクは FAILED としてマークされ、再実行されません。

タスクが断続的な理由(計算の実行中にタイムアウトしたなど)で失敗した場合、Earth Engine は自動的に再試行を試みて retries フィールドに入力します。タスクは最大 5 回失敗できます。最後の失敗により、タスク全体が FAILED としてマークされます。

タスク ID

各タスクには、3DNU363IM57LNU4SDTMB6I33 形式の英数字 ID が割り当てられます。これらの情報は、タスク管理インターフェースで確認または取得できます。タスクをプログラムで開始する場合は、ee.data.newTaskId からタスク ID を取得します。エクスポート タスクまたは取り込みタスクのデバッグについてサポートをリクエストする場合は、このタスク ID をコピー可能な文字列として指定してください(スクリーンショットではありません)。

タスクの状態のリスト

タスクの state 値は次のとおりです。

  • UNSUBMITTED、クライアントで保留中
  • READY、サーバーでキューに追加済み
  • RUNNING(現在実行中)
  • COMPLETED、正常に完了
  • FAILED、完了しなかった
  • CANCEL_REQUESTED: まだ実行中だが、キャンセルがリクエストされている(タスクがキャンセルされる保証はない)
  • CANCELLED、オーナーによってキャンセル済み

タスクの優先度

タスクの優先度は、キュー内のタスクの順序を制御するメカニズムです。優先度の高いタスクは、送信時間に関係なく、優先度の低い他の保留中のタスクよりも先にスケジュールされます。デフォルトのタスク優先度は 100 です。

エクスポート タスクに他の優先度(高または低)を設定できるのは、有料の Earth Engine アクセスに登録されているプロジェクトのユーザーのみです。エクスポート タスクの優先度を変更しても、インポート タスクとの相対的なスケジュールには影響しません。これは、2 種類のタスクが別々にスケジュールされるためです。

例: タスクの優先度の使用

次のタスクリストについて考えてみましょう。タスク 1 ~ 5 はデフォルトの優先度で自然な順序で送信されます。優先度がすべて同じであるため、送信された順序で実行されます。このプロジェクトでは2 つのバッチ処理スロットを使用できるため、2 つ(最初に送信されたものと 2 番目に送信されたもの)が同時に実行されます。

Task name           State      Priority
---------------------------------------
MyDefaultTask5      READY      100
MyDefaultTask4      READY      100
MyDefaultTask3      READY      100
MyDefaultTask2      RUNNING    100
MyDefaultTask1      RUNNING    100

新しいタスク MyHighPriorityTask1 を送信しても、実行中のタスクには影響しません。

Task name           State      Priority
---------------------------------------
MyHighPriorityTask    READY      500
MyDefaultTask5        READY      100
MyDefaultTask4        READY      100
MyDefaultTask3        READY      100
MyDefaultTask2        RUNNING    100
MyDefaultTask1        RUNNING    100

実行中のタスクのいずれかが完了すると、優先度が最も高い保留中のタスク(この場合は優先度の高いタスク)が実行されます。

Task name             State      Priority
-----------------------------------------
MyHighPriorityTask    RUNNING    500
MyDefaultTask5        READY      100
MyDefaultTask4        READY      100
MyDefaultTask3        READY      100
MyDefaultTask2        COMPLETED  100
MyDefaultTask1        RUNNING    100