垂直自動スケーリング

垂直自動スケーリングは、Dataflow Prime において、ワーカーが利用可能なメモリをジョブの要件に合わせて動的にスケールアップまたはスケールダウンできる機能です。この機能は、メモリ不足(OOM)エラーに対するジョブの復元性を高めるとともに、パイプラインの効率を最大化するように設計されています。Dataflow Prime は、パイプラインをモニタリングして、ワーカーのメモリの空き容量不足や過剰な容量を検出し、それらのワーカーをより大きなメモリ容量や小さい容量の新しいワーカーに置き換えます。

重要: 垂直自動スケーリングは、既存のワーカーを新しいワーカーに置き換えます。ワーカーのサイズ変更で発生するレイテンシを改善するために、カスタム コンテナを使用することを強くおすすめします。

ストリーミング

Dataflow Prime を使用するすべての新しいストリーミング ジョブでは、垂直自動スケーリングがデフォルトで有効になっています。

コマンドライン インターフェースを使用して、テンプレートからジョブを起動する場合は、--additional_experiments=disable_vertical_memory_autoscaling フラグを渡すことで垂直自動スケーリングを無効にできます。

Dataflow Prime ストリーミングの Java と Python のパイプラインはすべて、垂直自動スケーリングをサポートします。Dataflow Prime ストリーミングの Java パイプラインは、Streaming Engine なしで使用できます。ただし、垂直自動スケーリングを最適化するには、Streaming Engine を有効にすることをおすすめします。

バッチ

Dataflow Prime のバッチジョブの場合、垂直自動スケーリングはメモリ不足エラーが 4 回発生した後でのみスケールアップします。

  • 垂直自動スケーリングは、ジョブの失敗を防ぐためにスケールアップを実行しますが、スケールダウンは実行しません。
  • プール全体は、ジョブの残りの部分のためにスケールアップされます。
  • リソースヒントが使用され、複数のプールが作成された場合、各プールは別々にスケールアップされます。

バッチジョブの場合、垂直自動スケーリングはデフォルトでは有効になっていません。バッチジョブの垂直自動スケーリングを有効にするには、次のパイプライン オプションを設定します。

  • --experiments=enable_batch_vmr
  • --experiments=enable_vertical_memory_autoscaling

バッチジョブの垂直自動スケーリングを無効にするには、次のいずれかを行います。

  • --experiments=enable_batch_vmr パイプライン オプションを設定しない。
  • --experiments=disable_vertical_memory_autoscaling パイプライン オプションを設定する。

制限事項

  • 垂直方向にスケーリングされるのはワーカーのメモリだけです。
  • デフォルトでは、メモリのスケーリングの上限は 16 GiB です(GPU を使用する場合は 26 GiB)。下限は 6 GiB です(GPU を使用する場合は 12 GiB)。リソースヒントを指定すると、上限と下限の両方を変更できます。
  • 垂直自動スケーリングは、A100 GPU を使用するプールではサポートされていません。
  • バッチジョブの場合、パイプラインが完全に失敗するまでに、失敗した項目を含むバンドルが 4 回以上再試行されることがあります。
  • 垂直自動スケーリングは、VPC Service Controls ではサポートされていません。Dataflow Prime を有効にして VPC Service Controls の境界内で新しいジョブを起動する場合、ジョブは垂直自動スケーリングなしの Dataflow Prime を使用します。
  • 垂直自動スケーリングで Right Fitting を使用する場合、バッチ パイプラインのみがサポートされます。

垂直自動スケーリングをモニタリングする

垂直自動スケーリング オペレーションは、ジョブログとワーカーログに公開されます。これらのログを表示するには、Dataflow ジョブ指標をご覧ください。

水平自動スケーリングへの影響

Dataflow Prime では、垂直自動スケーリングが水平自動スケーリングと並んで動作します。この組み合わせにより、Dataflow Prime がパイプラインのニーズを満たすようにワーカーをシームレスにスケールアップまたはスケールダウンし、コンピューティング容量の利用率を最大化できます。

設計上、垂直自動スケーリング(ワーカーメモリの調整)は、水平自動スケーリング(ワーカー数の調整)よりも低い頻度で発生します。水平自動スケーリングは、垂直自動スケーリングによって更新がトリガーされた後、最長で 10 分経過してから無効になります。この 10 分が経過した後に入力データのバックログが大量に存在する場合、そのバックログをクリアするために水平自動スケーリングが行われる可能性があります。ストリーミング パイプラインの水平自動スケーリングの詳細については、ストリーミングの自動スケーリングをご覧ください。

トラブルシューティング

このセクションでは、垂直自動スケーリングに関連する一般的な問題のトラブルシューティングについて説明します。

垂直自動スケーリングが機能していないようです

垂直自動スケーリングが機能していない場合は、次のジョブの詳細を確認してください。

  • 次のジョブ メッセージを確認して、垂直自動スケーリングが有効になっていることを確認します。 Vertical Autoscaling is enabled. This pipeline is receiving recommendations for resources allocated per worker.

    このメッセージがない場合、垂直自動スケーリングは実行されていません。

  • ストリーミング パイプラインの場合は、enable_vertical_memory_autoscaling フラグが設定されていることを確認します。バッチ パイプラインの場合は、enable_vertical_memory_autoscaling フラグと enable_batch_vmr フラグが設定されていることを確認します。

  • Google Cloud プロジェクトの Cloud Autoscaling API が有効になっていることを確認します。API の有効化

  • ジョブが Dataflow Prime を実行していることを確認します。詳細については、Dataflow Prime の有効化をご覧ください。

ジョブでバックログとウォーターマークが高くなっています

これらの手順はストリーミング ジョブにのみ適用されます。ワーカーの垂直方向の再構築に数分以上かかる場合、入力データのバックログとウォーターマークが高くなる可能性があります。Python パイプラインでこの問題に対処するには、カスタム コンテナの使用を強くおすすめします。ワーカーの再構築によって生じる可能性のあるレイテンシを改善できるためです。Java パイプラインでこの問題に対処するには、Streaming EngineRunner v2 を有効にすることを強くおすすめします。これらの機能を有効にしても問題が解決しない場合は、カスタマーケアにお問い合わせください。

垂直自動スケーリングがメモリ容量に達しました。

デフォルトでは、リソースのヒントを指定しない場合、垂直自動スケーリングでメモリをスケールする範囲はワーカーあたり 16 GiB(GPU を使用する場合は 26 GiB)が上限、ワーカーあたり 6 GiB(GPU を使用する場合は 12 GiB)が下限です。これらの上限に達すると、Cloud Logging で次のいずれかのログメッセージが生成されます。

ストリーミング ジョブ。

Vertical Autoscaling has a desire to upscale memory, but we have hit the memory scaling limit of X GiB. This is only a problem if the pipeline continues to see memory throttling and/or OOMs.

バッチジョブ。

Vertical Autoscaling has a desire to upscale memory, but we have hit the memory scaling limit of 16.0 GiB. Job will fail because we have upsized to maximum size, and the pipeline is still OOMing.

パイプラインで引き続きメモリ不足エラーが表示される場合は、適切な(リソースヒント)を使用して min_ram="numberXB" を指定することで、変換のメモリ要件を定義できます。この設定により、Dataflow はより大きなメモリ容量をサポートするワーカーの初期構成を選択できるようになります。ただし、この初期構成を変更すると、パイプラインで使用される潜在的な並列処理が増える可能性があります。メモリを大量に消費する変換を行う場合、利用可能な並列処理の増加により、パイプラインで今までよりも多くのメモリが使用される可能性があります。このような場合、メモリ フットプリントを削減するために、変換の最適化が必要になることがあります。

ワーカーのメモリ上限は安定していません。メモリ使用量が一定でも、時間の経過とともに上限は増減します。

これらの手順は、ストリーミング ジョブにのみ適用されます。Java パイプラインの場合は、Streaming EngineRunner v2 を有効にしてください。それでも問題が解決しない場合や、この動作が Python パイプラインで起こる場合は、カスタマーケアにお問い合わせください。

一般的なログ メッセージ

このセクションでは、垂直自動スケーリングを有効にするときに生成される一般的なログ メッセージについて説明します。

垂直自動スケーリングが有効になっています。このパイプラインは、ワーカー単位で割り当てられるリソースの推奨値を受信しています。

このメッセージは、垂直自動スケーリングが有効であることを示します。このメッセージがない場合、垂直自動スケーリングはワーカープールで動作していません。

垂直自動スケーリングが有効になっていない場合は、垂直自動スケーリングが機能していないようです。何を確認すれば良いですか?でトラブルシューティングの手順をご覧ください。

プールのワーカーメモリの上限ごとに X GiB から Y GiB に変更するように垂直自動スケーリングの更新がトリガーされました。

このメッセージは、垂直自動スケーリングによってワーカープールのメモリサイズ変更がトリガーされたことを示しています。