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

Code Repositories を利用したコンピュート使用量

Code Repositories でビルドを実行するには、Foundry コンピュート(コンピュート秒で測定されるリソース)が必要です。このドキュメントでは、ビルドがコンピュートをどのように使用し、製品内でコンピュート使用量を調査および管理する方法に関する情報を提供します。

1 つ以上のデータセット変換ビルドを実行すると、Foundry は変換ロジックをサーバーレスコンピュートクラスタに取り込み、コードを実行します。ビルドの長さとサイズは、コードの複雑さ、入力および出力データセットのサイズ、コードに設定されたSpark 計算プロファイルによって異なります。

入力データセット上でコードを実行するためには、Foundry コンピュート(Foundry コンピュート秒で測定される)が必要であり、並列コンピュートを実行して変換の出力が Foundry ストレージに書き込まれる場合には Foundry ストレージが必要です。コードを書く行為自体はコンピュート使用量を発生させません。データセットのビルドがコンピュート使用量を発生させます。

Foundry コンピュートの測定

Code Repositories のトランスフォームエンジンは、バックエンドで並列コンピュートを使用し、最も一般的には Spark のスケーラブルコンピューティングフレームワークで動作します。Code Repositories の変換は、ジョブの実行中に使用される Foundry コンピュート秒 の合計数で測定されます。これらのコンピュート秒は、ジョブ全体の期間、つまり入力データセットからの読み取り時間、コードの実行時間(I/O 待ち時間などの操作を含む)、および出力データセットを Foundry に書き戻す時間を含めて測定されます。

並列計算を利用するように変換を設定することができます。コンピュート秒はコンピュートランタイムの尺度であり、ウォールクロックタイムではないため、並列変換はウォールクロック秒あたり複数のコンピュート秒を発生させます。Code Repositories のジョブに対する並列コンピュートの Foundry コンピュート秒の測定方法の詳細については、以下の例をご覧ください。

Foundry の使用料金を支払う際のデフォルトの使用料金は以下のとおりです。

vCPU / GPU使用率
vCPU1
T4 GPU1.2

Palantir とのエンタープライズ契約がある場合は、コンピュート使用量の計算を進める前に Palantir の担当者にお問い合わせください。

Code Repositories から Foundry コンピュート使用量を調査する

使用情報は、使用メトリックのドリルダウンを許可するリソース管理アプリケーションで確認できます。

ビルドが Foundry コンピュート使用量のドライバーである一方、その使用量はそれに関連する長寿命リソースに記録されます。データセット変換の場合、リソースはジョブによって具現化されるデータセット(またはデータセットのセット)です。リソース使用メトリックの下のデータセット詳細タブで、データセットの使用量のタイムラインを表示できます。

複数の出力データセットを生成する変換では、コンピュート使用量はすべてのデータセット間で均等に分配されることに注意してください。たとえば、変換ジョブが 2 つのデータセットを作成し、1 つは 5 行で、もう 1 つは 500 万行である場合、Foundry コンピュート秒の数は両方のデータセット間で均等に分配されます。

Foundry コンピュート使用量のドライバーを理解する

早期にキャンセルされない限り、Code Repositories の変換は、すべてのロジックがすべてのデータで実行され、出力が Foundry に書き戻されるまで実行されます。このランタイムに影響する 2 つの主要な要素は、(1)入力データのサイズと(2)変換ロジックによって実行される計算操作の複雑さです。

  • 同じロジックを持つ場合、入力データサイズが大きいジョブは、入力データサイズが小さいジョブよりも多くのコンピュートが必要です。たとえば、100GB のデータで列処理を実行するジョブは、同じ処理を 10GB のデータで実行するジョブよりも多くの Foundry コンピュート秒を使用します。
  • データ上でより複雑な操作を実行するジョブは、比較的操作が少ないジョブよりも多くのコンピュートが必要です。これは「ジョブの複雑さ」とも呼ばれます。
    • 基本的な例として、2 つの数学的操作、5 * 55! の間の操作数を考えてみましょう。5 * 5 は 1 つの乗算操作です。5!5 * 4 * 3 * 2 * 1(4 つの乗算操作)に相当し、これは 5 * 5 の例の 2 倍の複雑さです。ジョブが集約、結合、または機械学習アルゴリズムなどのタスクで複雑になるにつれて、ジョブがデータで完了しなければならない操作の数が増えます。

Code Repositories で Foundry コンピュート使用量を管理する

各ジョブについて、パフォーマンスとコンピュート使用量をドライブした基本的なコンピュートメトリックを確認できます。詳細については、Spark の詳細を理解するを参照してください。

ジョブ内で、Foundry コンピュート秒は、サイズおよび並列化されたエグゼキュータの数によって駆動されます。これらの設定は、ジョブごとに完全に設定可能です。ジョブごとにどのように設定されるかについては、Spark 計算プロファイルのドキュメントを確認してください。エグゼキュータのサイズは、メモリと vCPU の数で制御されます。エグゼキュータごとの vCPU の増加とメモリの増加は、そのエグゼキュータによって発生するコンピュート秒を増加させます。

同時タスクの数は、設定されたエグゼキュータ数とそれに対応する vCPU 数によって駆動されます。構成オーバーライドが指定されていない場合、変換はデフォルトの Spark プロファイルを使用します。結果として得られるデータセットの Foundry ストレージは、作成されるデータセットのサイズによって駆動されます。

最後に、異なるロジックを持つジョブは、非常に異なる数の操作で同じ結果を達成することができます。

使用量を管理するためのコードの最適化

ジョブが使用するコンピュート秒を最適化および管理する方法はいくつかあります。このセクションでは、一般的に使用される最適化手法に関する詳細情報へのリンクを提供します。

  • Foundry で採用されているほとんどの種類のコードリポジトリバッチコンピュートに対して、分散クラスターコンピューティングフレームワークである Spark は、さまざまな最適化手法を提供します。Spark の最適化について詳しく学ぶ。
  • Spark では、パーティションを最適化してビルドを迅速化できます。最適なパーティション数は、行数、列数、列のタイプ、および内容によって異なります。データセットサイズの 128 MB あたり 1 つのパーティションのおおよその比率をお勧めします。
  • インクリメンタル計算は、出力データセットを生成するための変換を実行する効率的な方法です。インクリメンタル計算では、変換のビルド履歴を活用して、変換が実行されるたびに出力データセット全体を再計算する必要がなくなります。
  • 特に中小規模のデータセットについては、Spark 以外のいくつかのコンピュートエンジンが、シングルノードアプリケーションのベンチマークで一貫して Spark のパフォーマンスを上回っています。そのため、パイプラインの実行にこれらの代替手段を使用すると、処理速度が向上し、コンピュート消費量が削減される可能性があります。これらのオプションを最大限に活用するためには、軽量変換に慣れることをお勧めします。
  • ビルドがスケジュールを使ってオーケストレーションされている場合、コストを最適化するためにスケジューリングのベストプラクティスを読むことをお勧めします。

Foundry コンピュート使用量の計算

使用例 1:標準メモリ

この例では、標準メモリ要求を持つ静的に割り当てられたジョブの 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) * 120秒
                       = 120コンピュート秒

executor_compute_seconds = num_executors * max(num_vcpu, GiB_RAM/7.5) * num_seconds 

                         = 4 * max(1, 6/7.5) * 120秒
                         = 480コンピュート秒

total_compute_seconds = 120 + 480 = 600コンピュート秒 

注釈:

このコードは、特定のジョブのコンピュート時間を計算しています。この計算は、使用されるCPUとメモリの量に基づいています。また、ジョブの合計実行時間も考慮に入れています。

'driver_compute_seconds'は、ドライバーの計算時間を計算します。これは、使用されるvCPUの数か、使用されるRAMの量(GiB)を7.5で割ったもの(これらのうち大きい方)にジョブの秒数を掛けて求められます。

'executor_compute_seconds'は、エグゼキュータの計算時間を計算します。これは、エグゼキュータの数に使用されるvCPUの数か、使用されるRAMの量(GiB)を7.5で割ったもの(これらのうち大きい方)にジョブの秒数を掛けて求められます。

'total_compute_seconds'は、ドライバーとエグゼキュータの合計の計算時間です。

使用例 2:大容量メモリ

この例では、大きなメモリ要求を持つ静的に割り当てられたジョブに対して、Foundry Compute の計測方法を説明します。

ドライバープロファイル:
    vCPUs: 2
    GiB_RAM: 6
エグゼキュータープロファイル:
    vCPUs: 1
    GiB_RAM: 15
    Count: 4
全ジョブの壁時計ランタイム: 
    120秒



計算:
driver_compute_seconds = max(num_vcpu, GiB_RAM/7.5) * num_seconds
                       = max(2vcpu, 6gib/7.5gib) * 120秒
                       = 240計算秒

executor_compute_seconds = num_executors * max(num_vcpu, GiB_RAM/7.5) * num_seconds 
                         = 2 * max(1, 15/7.5) * 120秒 
                         = 960計算秒

total_compute_seconds = driver_compute_seconds + executor_compute_seconds
                      = 240 + 480 = 720計算秒 

コメント:

このコードは、特定のジョブの計算時間を計算するためのものです。計算時間は、ドライバーとエグゼキューターの計算時間の合計で計算されます。ドライバーとエグゼキューターの計算時間は、それぞれのvCPU数とRAM量(7.5で除算)の大きい方を採用し、ジョブの壁時計ランタイム(この場合は120秒)で乗じます。

使用例 3:動的なエグゼキュータ数

この例では、Foundry Compute の測定方法を、動的に割り当てられたジョブについて説明します。このジョブでは、実行時間の一部が 2 つのエグゼキュータで実行され、残りの実行時間は 4 つのエグゼキュータで実行されます。

ドライバープロファイル:
    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

使用例 4: GPU コンピュート

この例では、静的に割り当てられたジョブの Foundry GPU コンピュートの計測方法を示します。

ドライバープロファイル:
    T4 GPU: 1
実行者プロファイル:
    T4 GPU: 1
    カウント: 4
合計ジョブ壁時計ランタイム: 
    120秒

計算:
# ドライバー計算時間 = GPU数 * GPU使用率 * 秒数
driver_compute_seconds = num_gpu * gpu_usage_rate * num_seconds
                       = 1gpu * 1.2 * 120sec
                       = 144 計算秒

# 実行者計算時間 = 実行者数 * GPU数 * GPU使用率 * 秒数
executor_compute_seconds = num_executors * num_gpu * gpu_usage_rate * num_seconds 
                         = 4 * 1 * 1.2 * 120sec 
                         = 576 計算秒

# 合計計算時間 = 144 + 576 = 720 計算秒
total_compute_seconds = 144 + 576 = 720 計算秒