このページでは、Vertex AI Agent Engine Runtime のパフォーマンスを最適化してスケーリングする方法に関するベスト プラクティスについて説明します。次のシナリオについて説明します。
このシナリオでは、デプロイ パラメータを使用して、一般的なパフォーマンス ボトルネックを解決する方法を示します。特に、実際のアプリケーションで予測不可能なスパイク状のトラフィック パターンが発生する場合に有効です。
コールド スタートの問題
コールド スタートは、リクエストが到着したときに、それを処理するアイドル状態のインスタンスまたはコンテナがない場合に発生します。この場合、Vertex AI Agent Engine は新しいインスタンスまたはコンテナを起動する必要があります。これにより、リクエストのレイテンシが大幅に増加します。
たとえば、デフォルトの min_instances=1 を使用してエージェントに 300 個の同時リクエストを送信すると、次の結果が表示されます。
コールド スタート(初回実行): 平均レイテンシは約 4.7 秒。
ウォーム スタート(2 回目の実行を即時に行う場合): 平均レイテンシは約 0.4 秒。
4 秒を超えるオーバーヘッドは、負荷を処理するために新しいインスタンスが起動したことが原因です。
コールド スタートの問題を軽減するには、次の方法をお試しください。
ベースライン トラフィックを処理するのに十分な
min_instances値を設定します。たとえば、min_instances=10をエージェントの例に設定すると、コールド スタートの平均レイテンシを約 1.4 秒に短縮できます。トラフィックが急増するアプリケーションやトラフィックが多いアプリケーションの場合は、1 からスケーリングする必要なく、通常の負荷を処理できる値にmin_instancesを設定します。最大値は 10 です。キューを使用して、安定した継続的な予測可能な負荷を 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 つのリクエストのみを処理します。エージェント開発キット(ADK)に基づくエージェントなどの非同期エージェントは、複数の I/O バウンド リクエスト(LLM やツール呼び出しなど)を同時に処理できます。
たとえば、min_instances=10 とデフォルトの container_concurrency=9 を使用して ADK ベースのエージェントに 300 件の同時リクエストを送信すると、次の結果が得られます。
- レイテンシの中央値は約 4 秒ですが、最大レイテンシは 60 秒まで急上昇します。これは、サービスがゆっくりとスケールアウトしている間にリクエストが大量にキューに登録されていることを示しています。
使用率の低い非同期ワーカーを軽減するには、container_concurrency を増やして、各 Agent Engine インスタンスが複数のリクエストを処理できるようにします。各エージェント プロセスが処理できる同時リクエストの数は container_concurrency / 9 です。値 9 は、各コンテナ内で並行して実行されているエージェント プロセスの数を表します。
たとえば、min_instances=10 と container_concurrency=36 を使用して同じ ADK ベースのエージェントに 300 件の同時リクエストを送信すると、次の結果が得られます。
- 最大レイテンシが 60 秒から約 7 秒に短縮されます。これは、既存のインスタンスがトラフィックの急増をより効果的に吸収できることを示しています。
非同期エージェント(ADK ベースのエージェントなど)の場合は、container_concurrency を 9 の倍数(36 など)に設定します。これにより、トラフィックの急増に対する応答性が向上し、スケールアウトによるレイテンシが短縮されます。
container_concurrency の値を大きくしすぎると、メモリ不足(OOM)エラーが発生する可能性があります。