Vertex AI Agent Engine ランタイムを最適化してスケーリングする

このページでは、Vertex AI Agent Engine ランタイムのパフォーマンスを最適化してスケーリングするためのベスト プラクティスについて説明します。次のシナリオについて説明します。

これらのシナリオでは、デプロイ パラメータを使用して、一般的なパフォーマンス のボトルネックを解決する方法を示します。特に、実際のアプリケーションで予測できないスパイク トラフィック パターンが発生する場合に有効です 。

コールド スタートの問題

リクエストが到着したときに、リクエストを処理できるアイドル状態のインスタンスまたはコンテナがない場合、Vertex AI Agent Engine は新しいインスタンスまたはコンテナを起動します。これを「コールド スタート」と呼びます。 これにより、リクエストに大きなレイテンシが発生します。

たとえば、デフォルトの min_instances=1 を使用して、300 件の同時リクエストをエージェントに送信すると、次の結果が得られます。

  • コールド スタート (初回実行): 平均レイテンシは約 4.7 秒。

  • ウォーム スタート (2 回目の実行): 平均レイテンシは約 0.4 秒。

4 秒を超えるオーバーヘッドは、負荷を処理するために新しいインスタンスが起動したことが原因です。

コールド スタートの問題を軽減するには、次の方法を試してください。

  • ベースライン トラフィックを処理するのに十分な min_instances 値を設定します。 たとえば、サンプル エージェントに min_instances=10 を設定すると、コールド スタートの平均レイテンシを約 1.4 秒に短縮できます。トラフィックが急増するアプリケーションの場合は、1 からスケーリングしなくても通常の負荷を処理できる値に min_instances を設定します。最大値は 75 です。

  • キューを使用して、安定した連続的で予測可能な負荷を Vertex AI Agent Engine ランタイムに送信します。たとえば、min_instances=10 とデフォルトの concurrency(9)を使用して、Agent Development Kit(ADK)ベースのエージェントで 1 分あたり 1,500 件のクエリ(1 秒あたり 25 件の秒間クエリ数)の持続負荷テストを 60 秒間実行すると、次の結果が得られます。

    • 平均レイテンシは一貫して約 1.6 秒と低くなっています。

安定した連続的な負荷により、サービスはウォーム状態に保たれ、最適なパフォーマンスが得られます。

非同期ワーカーの利用率が低い

デフォルトでは、container_concurrency は同期コード用に構成されています。各 Agent Engine インスタンスは一度に 1 つのリクエストのみを処理します。Agent Development Kit(ADK)に基づくエージェントなどの非同期エージェントは、複数の I/O バウンド リクエスト(LLM やツール呼び出しなど)を同時に処理できます。

たとえば、min_instances=10 とデフォルトの container_concurrency=9 を使用して、ADK ベースのエージェントに 300 件の同時リクエストを送信すると、次の結果が得られます。

  • 中央値のレイテンシは約 4 秒ですが、最大レイテンシは 60 秒に急増します。これは、サービスが徐々にスケールアウトする間に、リクエストが大量にキューに登録されることを示しています。

非同期ワーカーの利用率が低い問題を軽減するには、container_concurrency を増やして、各 Agent Engine インスタンスが複数のリクエストを処理できるようにします。各エージェント プロセスが処理できる同時リクエストの数は container_concurrency / 9 です。値 9 は、各コンテナ内で並行して実行されるエージェント プロセスの数を表します。

たとえば、min_instances=10container_concurrency=36 を使用して、同じ ADK ベースのエージェントに 300 件の同時リクエストを送信すると、次の結果が得られます。

  • 最大レイテンシが 60 秒から約 7 秒に短縮されます。これは、既存のインスタンスがトラフィックの急増をより効果的に吸収できることを示しています。

非同期エージェント(ADK ベースのエージェントなど)の場合は、開始点として container_concurrency を 9 の倍数(36 など)に設定します。これにより、トラフィックの急増に対する応答性が向上し、スケールアウトによるレイテンシが短縮されます。

container_concurrency の値を大きくしすぎると、メモリ不足(OOM)エラーが発生する可能性があることに注意してください。

次のステップ