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
|
accelerator |
ユーザー指定の GPU の割り当て。これにより、パイプラインとそのステップにおける GPU の使用と費用を制御できます。Dataflow ワーカーにアタッチする GPU のタイプと数を、フラグのパラメータとして指定します。 例: accelerator="type:GPU_TYPE;count:GPU_COUNT;machine_type:MACHINE_TYPE;CONFIGURATION_OPTIONS"
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-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
の実体化を強制するオペレーションをパイプラインに追加することで、融合を防ぐことができます。詳細については、融合を防ぐをご覧ください。
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 プラットフォームをご覧ください。