Right Fitting

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

サポートと制限事項

  • リソースヒントは、Apache Beam Java SDK と Python SDK バージョン 2.31.0 以降でサポートされています。
  • 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-tesla-k80;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-k80;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 の実体化を強制するオペレーションをパイプラインに追加することで、融合を防ぐことができます。詳細については、融合を防ぐをご覧ください。

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 プラットフォームをご覧ください。