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
に変更した、現場からお送りしました。