Google Vertex AIでエラーコード429 (Resource Exhausted) が出たのでlocationを`global`に変更した
Google Vertex AIのGenerative AIモデルを使って開発を進めていたところ、突然APIリクエストが失敗するようになりました。今回は、その際に遭遇したエラーコード 429 と、その解決策について共有します。
アプリケーションからVertex AIのエンドポイントへリクエストを送った際、以下のようなエラーメッセージが返ってきました。
Failed after 3 attempts. Last error: Resource exhausted. Please try again later. Please refer to https://cloud.google.com/vertex-ai/generative-ai/docs/error-code-429 for more details.
エラーコードは 429、メッセージは “Resource exhausted”(リソース枯渇)とのこと。
最初は単純なリクエスト数の超過かと思い、時間をおいてリトライしましたが、状況は改善しませんでした。
エラーメッセージに含まれるURLを参考に公式ドキュメントを確認すると、エラーコード 429 は以下のいずれかが原因で発生するようです。
今回のケースでは、リクエスト数はそれほど多くなかったため、後者の「特定リージョンでのリソース不足」の可能性が高いと判断しました。
私たちの環境では、APIリクエスト先として us-central1 リージョンを指定していました。
global へ変更そこで、APIリクエストのエンドポイントロケーションを変更することにしました。
具体的には、アプリケーションで設定していた環境変数 GOOGLE_VERTEX_LOCATION の値を、以下のように変更しました。
変更前:
GOOGLE_VERTEX_LOCATION="us-central1"変更後:
GOOGLE_VERTEX_LOCATION="global"この変更をデプロイしたところ、あれだけ頻発していたエラーコード 429 が嘘のように発生しなくなり、APIリクエストが安定して成功するようになりました。
global で解決したのか?公式ドキュメントによると、Vertex AIの生成AIモデルには、us-central1 のようなリージョナルエンドポイントと、global エンドポイントが存在します。
us-central1など): そのリージョン内の物理的なコンピューティングリソースでリクエストが処理されます。global): リクエストは送信元の場所に基づいて、最も近い利用可能なリージョンにルーティングされます。今回の場合、us-central1 リージョンで一時的に高い負荷がかかり、リソースが枯渇していたのではないかと推測されます。
global エンドポイントに変更したことで、Googleがトラフィックを他の空いているリージョンへ動的に振り分けてくれるようになり、リソース枯渇の問題を回避できた、というわけです。
Google Vertex AIでエラーコード 429 (Resource exhausted) に遭遇した場合、リトライ処理を実装するのはもちろんですが、APIリクエストのロケーション設定を見直すのも非常に有効な手段です。
もし特定のリージョンを指定していて同様のエラーに悩まされている方がいれば、一度 global ロケーションを試してみてはいかがでしょうか。
以上、Google Vertex AIでエラーコード 429 (Resource exhausted) が出たのでlocationをglobalに変更した、現場からお送りしました。