注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
Code Repositories でビルドを実行するには、Foundry の計算リソースが必要で、これはコンピュート秒で測定されます。本ドキュメントでは、ビルドが計算をどのように使用し、製品内での計算使用量の調査と管理に関する情報を提供します。
一つ以上のデータセットのトランスフォームビルドを実行すると、Foundry はトランスフォームのロジックをそのサーバーレス計算クラスターに引き出し、コードを実行します。ビルドの長さとサイズは、コードの複雑さ、入力と出力のデータセットのサイズ、そしてコードに設定されたSpark の計算プロファイルによって決まります。
入力データセット上でのコードの実行には、Foundry の計算リソース(Foundry のコンピュート秒で測定)が必要で、トランスフォームの結果が Foundry のストレージに書き込まれる場合には Foundry のストレージが必要です。コードの作成行為自体は計算使用量を発生させません。データセットのビルドのみが計算使用量を発生させます。
Code Repositories を支えるトランスフォームエンジンは、バックエンドで並列計算を使用し、最も一般的には、Spark のスケーラブルな計算フレームワークで使用されます。Code Repositories のトランスフォームは、ジョブの実行時間中に使用される Foundry のコンピュート秒の総数で測定されます。これらのコンピュート秒は、ジョブの全期間中に測定され、入力データセットの読み取り、コードの実行(I/O の待機などの操作を含む)、および出力データセットの Foundry への書き戻しにかかった時間を含みます。
トランスフォームは並列計算を利用するように設定できます。コンピュート秒は計算実行時間の尺度であり、壁時計時間ではないため、並列トランスフォームは壁時計秒あたり複数のコンピュート秒を発生させます。Code Repositories のジョブに対する並列計算の測定方法については、以下の例をご覧ください。
Foundry の使用料を支払う際には、デフォルトの使用料率は以下の通りです:
vCPU / GPU | 使用率 |
---|---|
vCPU | 1 |
T4 GPU | 1.2 |
もし Palantir とエンタープライズ契約を結んでいる場合は、計算使用量の計算を進める前に、Palantir の代表者に連絡してください。
使用量情報はリソース管理アプリケーションで確認でき、使用量メトリクスの詳細な分析が可能です。
ビルドが Foundry の計算使用量の主要な要因である一方、その使用量はそれに関連付けられた長期リソースに対して記録されます。データセットのトランスフォームの場合、リソースはジョブによって具体化されるデータセット(またはデータセットのセット)です。データセットの詳細タブのリソース使用量メトリクスの下でデータセットの使用量のタイムラインを見ることができます。
複数の出力データセットを生成するトランスフォームでは、計算使用量はすべてのデータセット間で均等に分散されます。例えば、トランスフォームジョブが二つのデータセットを作成し、一つは五行、もう一つは五百万行の場合、Foundry のコンピュート秒の数は二つの間で均等に分散されます。
キャンセルされない限り、Code Repositories のトランスフォームは、すべてのロジックがすべてのデータに対して実行され、出力が Foundry に書き戻されるまで実行されます。この実行時間に影響を与える主要な要素は、(1)入力データのサイズと(2)トランスフォームロジックによって行われる計算操作の複雑さです。
5 * 5
と5!
の二つの数学的操作の間の操作数を考えてみてください。5 * 5
は一つの乗算操作です。5!
は5 * 4 * 3 * 2 *1
(四つの乗算操作)と等価で、5 * 5
の例の二倍の複雑さです。ジョブが集約、結合、または機械学習アルゴリズムなどのタスクで複雑になるにつれて、ジョブがデータ上で完了しなければならない操作の数は増える可能性があります。各ジョブについて、ジョブのパフォーマンスと計算使用量を推進した基礎となる計算メトリクスをレビューすることができます。詳細については、Spark の詳細の理解を参照してください。
ジョブでは、Foundry のコンピュート秒は、並列化されたエグゼキュータのサイズと数によって決まります。これらの設定は、ジョブごとに完全に設定可能です。この設定方法については、Spark の計算プロファイルのドキュメントを参照してください。エグゼキュータのサイズは、そのメモリと vCPU の数によって制御されます。エグゼキュータあたりの vCPU の増加とメモリの増加は、そのエグゼキュータが発生させるコンピュート秒を増加させます。
同時に実行されるタスクの数は、設定されたエグゼキュータの数とそれに対応する vCPU の数によって決まります。設定上書きが指定されていない場合、トランスフォームはデフォルトの Spark プロファイルを使用します。結果として得られるデータセットの Foundry ストレージは、作成されるデータセットのサイズによって決まります。
最終的には、異なるロジックを持つジョブでも、非常に異なる数の操作で同じ結果を達成することができます。
ジョブが使用するコンピュート秒を管理するために、コードを最適化する方法はいくつかあります。このセクションでは、一般的に使用される最適化手法に関する詳細情報へのリンクを提供します。
この例では、標準メモリ要求を持つ静的に割り当てられたジョブの Foundry 計算の測定方法を示しています。
ドライバープロファイル:
vCPUs: 1
GiB_RAM: 6
実行者プロファイル:
vCPUs: 1
GiB_RAM: 6
Count: 4
全ジョブの壁時計ランタイム:
120秒
計算
driver_compute_seconds = max(num_vcpu, GiB_RAM/7.5) * num_seconds
= max(1vcpu, 6gib/7.5gib) * 120sec
= 120 コンピュート秒
# ドライバーの計算秒数は最大のVCPU数とRAMサイズを7.5で割った値を比較し、それを秒数で掛けたものとなります。この例では1VCPUと6GiBのRAMを7.5で割った値を比較し、それを120秒で掛けています。結果は120コンピュート秒です。
executor_compute_seconds = num_executors * max(num_vcpu, GiB_RAM/7.5) * num_seconds
= 4 * max(1, 6/7.5) * 120sec
= 480 コンピュート秒
# 実行者の計算秒数は、実行者の数と最大のVCPU数とRAMサイズを7.5で割った値を比較し、それを秒数で掛けたものとなります。この例では、実行者の数4と1VCPUと6GiBのRAMを7.5で割った値を比較し、それを120秒で掛けています。結果は480コンピュート秒です。
total_compute_seconds = 120 + 480 = 600 コンピュート秒
# トータルの計算秒数は、ドライバーの計算秒数と実行者の計算秒数を足したものとなります。この例では、120コンピュート秒と480コンピュート秒を足して、トータルは600コンピュート秒となります。
この例では、大容量メモリ要求を持つ静的に割り当てられたジョブの Foundry Compute の計測方法を示しています。
ドライバープロファイル:
vCPUs:2
GiB_RAM:6
エクゼキュータープロファイル:
vCPUs:1
GiB_RAM:15
数:4
合計ジョブ実行時間:
120秒
計算:
# ドライバーの計算秒数 = max(VCPUの数, RAM/7.5) * 秒数
driver_compute_seconds = max(num_vcpu, GiB_RAM/7.5) * num_seconds
= max(2vcpu, 6gib/7.5gib) * 120sec
= 240 計算秒
# エクゼキュータの計算秒数 = エクゼキュータの数 * max(VCPUの数, RAM/7.5) * 秒数
executor_compute_seconds = num_executors * max(num_vcpu, GiB_RAM/7.5) * num_seconds
= 4 * max(1, 15/7.5) * 120sec
= 960 計算秒
# 合計計算秒数 = ドライバーの計算秒数 + エクゼキュータの計算秒数
total_compute_seconds = driver_compute_seconds + executor_compute_seconds
= 240 + 960 = 1200 計算秒
この例では、一部のジョブ実行時間が2つのエグゼキュータで行われ、残りのジョブ時間が4つのエグゼキュータで行われる動的に割り当てられたジョブに対して、Foundry Computeがどのように測定されるかを示しています。
ドライバープロフィール:
vCPUs:2
GiB_RAM:6
エグゼキュータプロフィール:
vCPUs:1
GiB_RAM:6
数量:
最小:2
最大:4
全ジョブの壁時計ランタイム:
120秒:
2エグゼキュータ:60秒
4エグゼキュータ:60秒
計算:
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 コンピュートがどのように測定されるかを示しています。
ドライバープロファイル:
T4 GPU: 1
エグゼキュータプロファイル:
T4 GPU: 1
数量:4
合計ジョブ実行時間:
120秒
計算:
driver_compute_seconds = num_gpu * gpu_usage_rate * num_seconds
= 1gpu * 1.2 * 120秒
= 144 コンピュート秒
executor_compute_seconds = num_executors * num_gpu * gpu_usage_rate * num_seconds
= 4 * 1 * 1.2 * 120秒
= 576 コンピュート秒
total_compute_seconds = 144 + 576 = 720 コンピュート秒
このコードでは、データ処理のためのGPU使用時間を計算しています。driver_compute_seconds
はドライバーのGPU使用時間を表し、executor_compute_seconds
はエグゼキュータのGPU使用時間を表します。最後に、これらの合計時間をtotal_compute_seconds
で計算しています。