注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Code Repositories でビルドを実行するには、コンピュート秒単位で測定されるリソースである Foundry コンピュートを使用する必要があります。このドキュメントでは、ビルドがコンピュートをどのように使用するかを詳しく説明し、製品内でコンピュート使用量を調査および管理する方法を紹介します。
1個以上のデータセットのトランスフォームビルドを実行すると、Foundry はトランスフォームのロジックをサーバーレスコンピュートクラスターに取り込み、コードを実行します。ビルドの所要時間と規模は、コードの複雑さ、入力データセットと出力データセットのサイズ、およびコードに設定された Spark 計算プロファイルによって異なります。
入力データセットに対してコードを実行する際には、並列化された計算を実行するときに Foundry コンピュート(Foundry コンピュート秒で測定)が必要となり、変換の出力を Foundry Storage に書き込むときに Foundry ストレージが必要となります。コードを記述するだけではコンピュート使用量は発生しません。データセットのビルド時にのみコンピュート使用量が発生します。
Code Repositories を支えるトランスフォームエンジンは、バックエンドで並列計算を使用しており、通常はスケーラブルな計算フレームワークである Spark を使用します。Code Repositories のトランスフォームは、ジョブの実行時間中に使用された Foundry コンピュート秒の合計で測定されます。コンピュート秒はジョブの全実行期間にわたって測定され、入力データセットの読み取り、コードの実行(I/O 待ちなどの処理を含む)、および出力データセットの Foundry への書き戻しにかかる時間が含まれます。
トランスフォームで並列計算を使用するように設定できます。コンピュート秒は実経過時間ではなく、計算の実行時間を測定するため、並列トランスフォームでは実経過時間の1秒につき複数のコンピュート秒が発生します。Code Repositories のジョブで並列化された計算を Foundry コンピュート秒として測定する方法の詳細は、以下の例を参照してください。
Foundry の使用量に対する課金では、デフォルトの使用量換算率は次のとおりです。
| vCPU / GPU | 使用量換算率 |
|---|---|
| vCPU | 1 |
| T4 GPU | 1.2 |
| V100 GPU | 3 |
| A100 GPU | 1.3 |
| A10G GPU | 1.5 |
| L4 GPU | 2.1 |
| H100 GPU | 4.7 |
| H200 GPU | 4.7 |
エンタープライズ向けの換算率は異なる場合があります。コンピュート使用量の計算を進める前に、Palantir の担当者にお問い合わせください。
使用量の情報は、使用量メトリクスをドリルダウンできるリソース管理アプリケーションで確認できます。
Foundry コンピュート使用量はビルドによって発生しますが、その使用量は関連する長期存続リソースに対して記録されます。データセットのトランスフォームの場合、このリソースはジョブによって実体化されるデータセットです。データセットの使用量の推移は、データセットの詳細タブにあるリソース使用メトリクスで確認できます。
複数の出力データセットを生成するトランスフォームでは、コンピュート使用量がすべてのデータセットに均等に分配されます。たとえば、トランスフォームジョブが2個のデータセットを作成し、一方が5行、もう一方が500万行であっても、Foundry コンピュート秒数は2個のデータセットに均等に分配されます。
途中でキャンセルされない限り、Code Repositories のトランスフォームは、すべてのデータに対してすべてのロジックが実行され、出力が Foundry に書き戻されるまで実行されます。この実行時間に影響する主な要因は、(1) 入力データのサイズと (2) トランスフォームのロジックによって行われる計算処理の複雑さの2つです。
5 * 5 と 5! の演算回数を考えてみます。5 * 5 は1回の乗算です。5! は 5 * 4 * 3 * 2 *1(4回の乗算)と同等であり、5 * 5 の例の2倍の複雑さです。集計、結合、機械学習アルゴリズムなどのタスクによってジョブが複雑になるにつれ、ジョブがデータに対して実行する必要のある処理の数は増える可能性があります。ジョブごとに、そのパフォーマンスとコンピュート使用量を左右した基礎となるコンピュートメトリクスを確認できます。詳細は、Spark の詳細を理解するを参照してください。
ジョブの Foundry コンピュート秒は、並列化されたエグゼキューターのサイズと数によって決まります。これらの設定はどちらもジョブごとに自由に設定できます。ジョブごとの設定方法については、Spark 計算プロファイルのドキュメントを参照してください。エグゼキューターのサイズは、メモリーと vCPU 数によって決まります。エグゼキューターあたりの vCPU 数とメモリーを増やすと、そのエグゼキューターで発生するコンピュート秒が増加します。
同時に実行されるタスク数は、設定されたエグゼキューター数と、それぞれの vCPU 数によって決まります。設定のオーバーライドが指定されていない場合、トランスフォームはデフォルトの Spark プロファイルを使用します。生成されるデータセットの Foundry ストレージ使用量は、作成されるデータセットのサイズによって決まります。
最終的に、異なるロジックを持つジョブでは、同じ結果を実現する場合でも、処理の数が大きく異なることがあります。
コードを最適化し、ジョブが使用するコンピュート秒を管理する方法はいくつかあります。このセクションでは、よく使われる最適化手法の詳細情報へのリンクを紹介します。
この例では、標準的なメモリー要求量で静的にリソースが割り当てられるジョブについて、Foundry コンピュートの測定方法を示します。
Driver profile:
vCPUs: 1
GiB_RAM: 6
Executor profile:
vCPUs: 1
GiB_RAM: 6
Count: 4
Total Job Wall-Clock Runtime:
120 seconds
Calculation
driver_compute_seconds = max(num_vcpu, GiB_RAM/7.5) * num_seconds
= max(1vcpu, 6gib/7.5gib) * 120sec
= 120 compute-seconds
executor_compute_seconds = num_executors * max(num_vcpu, GiB_RAM/7.5) * num_seconds
= 4 * max(1, 6/7.5) * 120sec
= 480 compute-seconds
total_compute_seconds = 120 + 480 = 600 compute-seconds
この例では、より大きなメモリー要求量で静的にリソースが割り当てられるジョブについて、Foundry コンピュートの測定方法を示します。
Driver Profile:
vCPUs: 2
GiB_RAM: 6
Executor profile:
vCPUs: 1
GiB_RAM: 15
Count: 4
Total Job Wall-Clock Runtime:
120 seconds
Calculation:
driver_compute_seconds = max(num_vcpu, GiB_RAM/7.5) * num_seconds
= max(2vcpu, 6gib/7.5gib) * 120sec
= 240 compute-seconds
executor_compute_seconds = num_executors * max(num_vcpu, GiB_RAM/7.5) * num_seconds
= 4 * max(1, 15/7.5) * 120sec
= 960 compute-seconds
total_compute_seconds = driver_compute_seconds + executor_compute_seconds
= 240 + 960 = 1200 compute-seconds
この例では、動的にリソースが割り当てられるジョブについて、Foundry コンピュートの測定方法を示します。ジョブの実行時間の一部では2個のエグゼキューターで処理が実行され、残りの時間では4個のエグゼキューターで処理が実行されます。
Driver Profile:
vCPUs: 2
GiB_RAM: 6
Executor profile:
vCPUs: 1
GiB_RAM: 6
Count:
min: 2
max: 4
Total Job Wall-Clock Runtime:
120 seconds:
2 executors: 60 seconds
4 executors: 60 seconds
Calculation:
driver_compute_seconds = max(num_vcpu, GiB_RAM/7.5) * num_seconds
= max(2vcpu, 6gib/7.5gib) * 120sec
= 240 compute-seconds
# エグゼキューター2個でのジョブ実行時間に対する計算秒数を計算します
2_executor_compute_seconds = num_executors * max(num_vcpu, GiB_RAM/7.5) * num_seconds
= 2 * max(1, 6/7.5) * 60sec
= 120 compute-seconds
# エグゼキューター4個でのジョブ実行時間に対する計算秒数を計算します
4_executor_compute_seconds = num_executors * max(num_vcpu, GiB_RAM/7.5) * num_seconds
= 4 * max(1, 6/7.5) * 60sec
= 240 compute-seconds
total_compute_seconds = driver_compute_seconds + 2_executor_compute_seconds + 4_executor_compute_seconds
= 240 + 120 + 240 = 600 compute-seconds
この例では、静的にリソースが割り当てられるジョブについて、Foundry GPU コンピュートの測定方法を示します。
Driver profile:
T4 GPU: 1
Executor profile:
T4 GPU: 1
Count: 4
Total Job Wall-Clock Runtime:
120 seconds
Calculation:
driver_compute_seconds = num_gpu * gpu_usage_rate * num_seconds
= 1gpu * 1.2 * 120sec
= 144 compute-seconds
executor_compute_seconds = num_executors * num_gpu * gpu_usage_rate * num_seconds
= 4 * 1 * 1.2 * 120sec
= 576 compute-seconds
total_compute_seconds = 144 + 576 = 720 compute-seconds