注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

コンピュート使用量:オントロジーのインデックス化

Foundry のオントロジーは、高速アクセスに最適化されたストレージ形式であるオントロジーインデックスにオブジェクトを格納します。Foundry データセットのデータは任意のサイズや形式を取れるため、オントロジーインデックスに格納できるようにデータセットのデータを変換する必要があります。このプロセスはオントロジーのインデックス化と呼ばれ、任意のサイズのデータセットとオブジェクトに適用できます。オントロジーのインデックス化の処理コストは、コンピュート秒で測定されます。このドキュメントでは、オントロジーのインデックス化でコンピュートがどのように使用されるか、およびコンピュート使用量の管理方法を説明します。

オントロジーのインデックス化によるコンピュート使用量を測定する

オントロジーのインデックス化では、並列化された Spark バックエンドを使用して、任意の大きさのデータを読み取り、オントロジーの形式に変換します。インデックス化ジョブの実行に使用されるコンピュート量は、計算リソース(ドライバーとエグゼキューター)の量と、インデックス化ジョブ自体の総実経過時間に基づきます。

Spark の使用量をコンピュート秒に換算する方法の詳細については、使用量の種類のメインドキュメントを参照してください。以下に、オントロジーのインデックス化で使用されるコンピュート秒の計算例を示します。

オントロジーのインデックス化による使用量を調査する

オントロジーのインデックス化ジョブは、Foundry の Builds アプリケーションに表示され、インデックス化対象のオブジェクトにアタッチされます。オントロジーのインデックス化ジョブは Spark ジョブであり、並列化されたバッチコンピュートに分類されます。そのため、Code Repositories のトランスフォームや Contour のクエリなど、同じバックエンド上のほかのジョブと同じ方法で測定できます。

インデックス化ジョブは、トリガーされる方法に基づいて分類できます。

  • オントロジーのインデックス化ジョブは、データセットをオントロジーのバックエンドにインデックス化します。このコンピュートは、データセットからインデックス化済みオブジェクトを生成するために使用されます。
  • オントロジーのエクスポートジョブは、オントロジーで直接行われた編集内容を、Foundry のデータ変換フレームワーク内のデータセットに永続化します。オントロジーのエクスポートジョブは通常、オブジェクトセット全体の真部分集合にあたる編集内容を扱うため、完全なインデックス化ジョブよりも小規模になる傾向があります。

オントロジーのインデックス化の使用量に影響する要因

オントロジーのインデックス化ジョブは、インデックス化が必要なすべてのデータを読み取り、オントロジーのバックエンドで高速に格納、検索、編集できる形式に変換する必要があります。

データの読み取りとインデックス化におけるコンピュート使用量は、次の要因によって決まります。

  • オブジェクトあたりのレコード数
    • インデックス化するデータセットのレコード数が増えると、オブジェクト数も増えます。各オブジェクトのインデックス化には一定回数の計算操作が必要なため、オブジェクト数が増えると、インデックス化に使用されるコンピュート量も増えます。
  • オブジェクトあたりのプロパティ数
    • インデックス化ジョブは、各オブジェクトの各プロパティを個別に分析してから、オブジェクトインデックスに書き込む必要があります。分析およびインデックス化するプロパティが多いほど、使用されるコンピュート量も増えます。
  • 各プロパティのサイズ
    • プロパティによっては、ほかのプロパティよりもはるかに大きいものがあります。たとえば、多くの内容を含むテキストプロパティは、単純な数値プロパティよりも分析に多くの容量とコンピュートを必要とします。サイズが大きく、より複雑なプロパティタイプを持つオブジェクトは、インデックス化により多くのコンピュートを必要とします。

インデックス化の頻度も、オントロジーの更新に使用されるコンピュート量に大きく影響します。上流データセットに設定されたスケジュールによって、オブジェクトの自動再インデックス化がトリガーされます。オブジェクトを最新の状態に保つことが使用量に与える影響を調べる際は、そのオブジェクトと上流データセットの更新スケジュールを考慮してください。

オントロジーのインデックス化のコンピュートを管理する

オントロジーのインデックス化ジョブを最適化することで、コンピュート使用量を削減できます。最初の、最も簡単な最適化方法は、インデックスへの入力データのサイズを減らすことです。これにより、ジョブの完了に必要な処理量が減ります。可能な範囲で、次のことを行います。

  • 入力レコード数を管理する
  • オブジェクトあたりのプロパティ数を管理する
  • オブジェクトごとの各プロパティのサイズを管理する

もう1つの最適化方法は、オントロジーのインデックス化ジョブで、インデックス化に変更履歴を利用する方式を設定することです。変更履歴を利用するインデックス化では、実行前にジョブを既存のオブジェクトと比較することで、インデックス化ジョブごとに作成または更新する必要があるオブジェクト数を大幅に減らします。変更履歴を利用するインデックス化には、より多くの設定と更新方式の遵守が必要ですが、パフォーマンスと効率が桁違いに向上する可能性があります。

インデックス化のコンピュート計算例

インデックス化ジョブは並列化された Spark ジョブとして実行され、Builds アプリケーションで確認できます。インデックス化ジョブの例を以下に示します。オントロジーのインデックス化ジョブでは、ジョブのサイズに応じて、インデックス化ジョブのドライバーとエグゼキューターのサイズが自動的に選択されます。

Driver:
    num_vcpu: 1
    GiB_RAM: 6
Executors:
    num_vcpu: 1
    GiB_RAM: 4
    num_executors: 2
Total Runtime: 10 seconds

Calculation: 

driver_compute_seconds = max(num_vcpu, GiB_RAM / 7.5) * runtime_in_seconds
                       = max(1vcpu, 6GiB / 7.5) * 10sec
                       = 1 * 10 = 10 compute-seconds

executor_compute_seconds = max(num_vcpu, GiB_RAM / 7.5) * num_executors * runtime_in_seconds
                         = max(1vcpu, 4GiB / 7.5) * 2executors * 10sec
                         = 1 * 2 * 10 = 20 compute-seconds

total_compute_seconds = driver_commpute_seconds + exeucutor_compute_seconds
                      = 10 compute-seconds + 20 compute-seconds
                      = 30 compute-seconds