Right Fitting

Right Fitting 機能は、Apache Beam リソースヒントを使用して、パイプラインのワーカー リソースをカスタマイズします。特定のパイプライン ステップに複数の異なるリソースをターゲット設定できるため、パイプラインの柔軟性と機能性が向上します。さらに、コストの削減を実現できる可能性もあります。たとえば、より高額な費用を要するリリースについては、それらのリソースを必要とするパイプライン ステップにのみ適用し、費用を抑えられるリソースをその他のパイプライン ステップに適用できます。Right Fitting を使用して、パイプライン全体または特定のパイプライン ステップのリソース要件を指定します。

サポートと制限事項

  • リソースヒントは、Apache Beam Java SDK と Python SDK バージョン 2.31.0 以降でサポートされています。
  • Right Fitting はバッチ パイプラインでサポートされています。
  • Right Fitting は、水平自動スケーリングが有効になっているストリーミング パイプラインでサポートされています。

  • Right Fitting は Dataflow Prime をサポートしています。

  • Right Fitting は FlexRS をサポートしていません。

  • Right Fitting を使用する場合は、worker_accelerator サービス オプションを使用しないでください。

Right Fitting を有効にする

Right Fitting を有効にするには、パイプラインで利用可能なリソースヒントを 1 つ以上使用します。パイプラインでリソースヒントを使用すると、Right Fitting が自動的に有効になります。詳細については、このドキュメントのリソースヒントを使用するのセクションをご覧ください。

利用可能なリソースヒント

次のリソースヒントを利用できます。

リソースヒント 説明
min_ram

ワーカーに割り当てる RAM の最小容量(GB)。Dataflow は、新しいワーカー(水平スケーリング)または既存のワーカー(垂直スケーリング)にメモリを割り当てる際に、この値を下限として使用します。

例:

min_ram=NUMBERGB
  • NUMBER は、パイプラインまたはパイプライン ステップに必要なワーカーメモリの最小値に置き換えます。
  • min_ram は、ワーカーごとの集計仕様です。vCPU ごとの仕様ではありません。たとえば、min_ram=15GB を設定した場合、Dataflow はワーカー内のすべての vCPU で利用可能な合計メモリを 15 GB 以上に設定します。
accelerator

ユーザー指定の GPU の割り当て。これにより、パイプラインとそのステップにおける GPU の使用と費用を制御できます。Dataflow ワーカーにアタッチする GPU のタイプと数を、フラグのパラメータとして指定します。

例:

accelerator="type:GPU_TYPE;count:GPU_COUNT;machine_type:MACHINE_TYPE;CONFIGURATION_OPTIONS"
  • GPU_TYPE は、使用する GPU のタイプに置き換えます。Dataflow でサポートされている GPU タイプのリストについては、Dataflow での GPU のサポートをご覧ください。
  • GPU_COUNT は、使用する GPU の数に置き換えます。
  • 省略可: MACHINE_TYPE は、GPU で使用するマシンのタイプに置き換えます。
    • マシンタイプは、選択した GPU タイプと互換性を有する必要があります。GPU のタイプとそれらが互換性を有するマシンタイプの詳細については、GPU プラットフォームをご覧ください。
    • accelerator リソースヒントとワーカー マシンタイプのパイプライン オプションの両方でマシンタイプを指定すると、Right Fitting の際にパイプライン オプションは無視されます。
  • Dataflow で NVIDIA GPU を使用するには、install-nvidia-driver 構成オプションを設定します。

GPU の使用について詳しくは、Dataflow での GPU の使用をご覧ください。

リソースヒントのネスト

リソースヒントは、次のようにパイプライン変換階層に適用されます。

  • min_ram: 変換の値は、変換自体とその変換階層の親に設定された値の中で最大の min_ram ヒント値として評価されます。
    • 例: 内側の変換のヒントで min_ram が 16 GB に設定され、階層セットの外側の変換ヒントで min_ram が 32 GB に設定されている場合、変換全体のすべてのステップで 32 GB のヒントが使用されます。
    • 例: 内側の変換のヒントで min_ram が 16 GB に設定され、階層セットの外側の変換ヒントで min_ram が 8 GB に設定されている場合、8 GB のヒントは内側の変換に含まれていない外側の変換のすべてのステップに使用されます。また、16 GB のヒントは内側の変換のすべてのステップに使用されます。
  • accelerator: 変換の階層で最も内側の値が優先されます。
    • 例: 階層内で内側の変換の accelerator ヒントが外側の変換の accelerator ヒントと異なる場合、内側の変換の accelerator ヒントが内側の変換に使用されます。

パイプライン全体に設定されたヒントは、最も外側の変換で設定された別のヒントとして扱われます。

リソースヒントを使用する

リソースヒントは、パイプライン全体またはパイプライン ステップで設定できます。

パイプライン リソースのヒント

コマンドラインからパイプラインを実行する場合は、リソースのヒントをパイプライン全体に設定できます。

Python 環境を設定するには、Python チュートリアルをご覧ください。

例:

    python my_pipeline.py \
        --runner=DataflowRunner \
        --resource_hints=min_ram=numberGB \
        --resource_hints=accelerator="type:type;count:number;install-nvidia-driver" \
        ...

パイプライン ステップのリソースヒント

リソースヒントは、プログラムによってパイプライン ステップ(変換)に設定できます。

Java

Apache Beam SDK for Java をインストールするには、Apache Beam SDK をインストールするをご覧ください。

リソースヒントは、ResourceHints クラスを使用して、プログラムでパイプライン変換に設定できます。

次の例は、パイプライン変換でリソースヒントをプログラムにより設定する方法を示しています。

pcoll.apply(MyCompositeTransform.of(...)
    .setResourceHints(
        ResourceHints.create()
            .withMinRam("15GB")
            .withAccelerator(
    "type:nvidia-l4;count:1;install-nvidia-driver")))

pcoll.apply(ParDo.of(new BigMemFn())
    .setResourceHints(
        ResourceHints.create().withMinRam("30GB")))

リソースヒントをプログラムでパイプライン全体に設定するには、ResourceHintsOptions インターフェースを使用します。

Python

Apache Beam SDK for Python をインストールするには、Apache Beam SDK をインストールするをご覧ください。

リソースヒントは、PTransforms.with_resource_hints クラスを使用して、プログラムでパイプライン変換に設定できます。詳細については、ResourceHint クラスをご覧ください。

次の例は、パイプライン変換でリソースヒントをプログラムにより設定する方法を示しています。

pcoll | MyPTransform().with_resource_hints(
    min_ram="4GB",
    accelerator="type:nvidia-tesla-l4;count:1;install-nvidia-driver")

pcoll | beam.ParDo(BigMemFn()).with_resource_hints(
    min_ram="30GB")

パイプライン全体にリソースヒントを設定するには、パイプラインの実行時に --resource_hints パイプライン オプションを使用します。例については、パイプラインのリソースヒントをご覧ください。

Go

リソースヒントは Go ではサポートされていません。

複数のアクセラレータのサポート

パイプライン内では、変換ごとに異なるアクセラレータ構成を使用できます。これには、異なるマシンタイプを必要とする構成が含まれます。これらの変換レベルのアクセラレータ構成は、パイプライン レベルの構成が指定されている場合、その構成よりも優先されます。

Right Fitting と融合

融合の最適化のプロセスの一部として、同じワーカープールのワーカーで異なるリソースのヒントが設定された変換を実行できる場合があります。変換が融合されると、Dataflow は、変換に設定されたリソースのヒントの結合条件を満たす環境で変換を実行します。場合によっては、パイプライン全体が含まれます。

リソースのヒントを結合できない場合、融合は行われません。たとえば、異なる GPU のリソースヒントはマージできないため、これらの変換は融合されません。

また、Dataflow に中間 PCollection の実体化を強制するオペレーションをパイプラインに追加することで、融合を防ぐことができます。これは、GPU や大容量メモリマシンなどの高価なリソースを、これらの特別なリソースを必要としない遅いステップや、計算コストの高いステップから分離する場合に特に便利です。このようなケースでは、融合の解除で実体化が必要になっても、処理の遅い CPU にバインドされたステップと、高価な GPU または大容量メモリのマシンを必要とするステップとの融合を強制的に解除したほうがよい場合もあります。詳細については、融合を防ぐをご覧ください。

ストリーミング Right Fitting

ストリーミング ジョブでは、--experiments=enable_streaming_rightfitting パイプライン オプションを設定することで、Right Fitting を有効にできます。

リソース要件が異なるステージが含まれている場合、Right Fitting を使用するとパイプラインのパフォーマンスが向上する可能性があります。

例: CPU 使用率の高いステージと GPU を必要とするステージを含むパイプライン

Right Fitting が有効な可能性があるパイプラインの例として、まず CPU を多く使う処理を行ったうえで、GPU を必要とする処理を行うパイプラインがあります。Right Fitting を使用しない場合、CPU 使用率の高いステージを含むすべてのパイプライン ステージを実行するように、単一の GPU ワーカープールを構成する必要があります。これにより、ワーカープールが CPU 使用率の高いステージを実行しているときに、GPU リソースが十分に活用されない可能性があります。

Right Fitting が有効になっていて、GPU を必要とする処理にリソースヒントが適用されている場合、パイプラインは 2 つの別々のプールを作成します。これにより、CPU 使用率の高い処理は CPU ワーカープールで実行され、GPU を必要とする処理は GPU ワーカープールで実行されます。

このパイプラインの例では、自動スケーリング テーブルに、CPU 使用率の高い処理 Pool 0 を実行するワーカープールが最初に 99 個のワーカーにスケールアップされ、後で 87 個のワーカーにスケールダウンされることが示されています。GPU を必要とする処理 Pool 1 を実行するワーカープールは、13 個のワーカーにスケールアップされます。

2 つのプールが自動スケーリングされていることを示す表。

CPU 使用率のグラフは、両方のワーカープールのワーカーで全体的に CPU 使用率が高いことを示しています。

2 つの異なるプールからのワーカーの CPU 使用率を示すグラフ。

Right Fitting のトラブルシューティングを行う

このセクションでは、Right Fitting に関連する一般的な問題のトラブルシューティングの手順について説明します。

無効な構成

Right Fitting の使用を試みると、次のエラーが発生します。

Workflow failed. Causes: One or more operations had an error: 'operation-OPERATION_ID':
[UNSUPPORTED_OPERATION] 'NUMBER vCpus with NUMBER MiB memory is
an invalid configuration for NUMBER count of 'GPU_TYPE' in family 'MACHINE_TYPE'.'.

このエラーは、選択した GPU タイプが、選択したマシンタイプと互換性がない場合に発生します。このエラーを解決するには、互換性のある GPU タイプとマシンタイプを選択します。互換性の詳細については、GPU プラットフォームをご覧ください。

Right Fitting を確認する

自動スケーリングの指標を表示し、Worker pool 列が表示され、さまざまなプールが一覧表示されていることを確認することで、Right Fitting が有効になっているかを検証できます。

Right Fitting が有効になっている場合に、複数のプールを含むパイプラインのワーカーの履歴を示すテーブル。

ストリーミング Right Fitting のパフォーマンス

Right Fitting が有効になっているストリーミング パイプラインが、Right Fitting が有効になっていないパイプラインよりも常にパフォーマンス的に優れているとは限りません。たとえば次のようなケースが挙げられます。

  1. パイプラインがより多くのワーカーを使用している
  2. システム レイテンシが高い、またはスループットが低い
  3. ワーカープールのサイズが頻繁に変更されるか、安定していない

パイプラインでこの現象が発生した場合は、--experiments=enable_streaming_rightfitting パイプライン オプションを削除することで Right Fitting を無効にできます。また、アクセラレータ リソースヒントを使用して Right Fitting が有効になっているストリーミング パイプラインでは、望ましい数よりも多くのアクセラレータが使用される可能性があります。パイプラインでこの現象が発生した場合は、--experiments=max_num_accelerators=NUM パイプライン オプションを設定して、パイプラインで使用されるアクセラレータの最大数を構成できます。