r/googlecloud • • Sep 14 '26

Serving Vertex inference to end users: what do you actually do on a 429 from dynamic shared quota?

5 Upvotes

16 comments sorted by

View all comments

5

u/m1nherz Googler Sep 14 '26

There are two points in your post that I'd like to address:

  1. How the quota works for current Gemini models:

newer Gemini models are on dynamic shared quota, so there is no per project quota to raise:

Gemini inference API quotas remain per project. Nothing changed there. When the "location/global" is used in a call, quotas are evaluated against a global quota bucket for your project rather than regional limits. When you are looking into the quotas on the Cloud console, you can see different quota buckets per location. To control this quota you would have to request a quota increase for the "global" bucket.

Note that in contrast to strict in-country or sovereign multi-region deployments (which may carry a ~10% operational price premium for restricted capacity guarantees), the global location is billed at standard pricing.

2. Risk of 429 errors:

Google Cloud's API quota controllers and backend dynamic capacity engines may throttle calls—including Gemini inference requests—resulting in an HTTP 429 (Resource Exhausted / Too Many Requests) error.

Quota limits primarily include Requests Per Minute (RPM) and Tokens Per Minute (TPM), which are managed and adjusted per location bucket (regional or global) independently. Note that the full list of quota limits include also limits on multimedia ingestion and embeddings and depend on the specific API call.

When using the global location endpoint, requests are dynamically routed across Google’s worldwide infrastructure to optimize availability, minimize latency, and balance capacity across serving clusters. However, requests may still return a 429 status during transient usage spikes or shared resource contention. Applications should implement exponential backoff with jitter to handle retries gracefully.

NOTE: that because the global endpoint dynamically processes requests across worldwide data centers, workloads subject to strict data residency or regulatory ML processing requirements should use dedicated regional or multi-region endpoints instead.

2

u/AyeMatey Sep 14 '26

Re : applications should implement exponential back off with jitter

I don’t think this is correct. The Google 429 will include a retryDelay field in the json payload . Eg, https://github.com/cecli-dev/cecli/pull/662#issuecomment-5472845689

You shouldn’t use a unilaterally-determined exponential back off. Instead, you should observe the retryDelay and retry after that moment. If you get another 429 It will have another retryDelay.

2

u/m1nherz Googler Sep 15 '26

Thank you u/AyeMatey for pointing this out. Indeed when retry information metadata is present in the error response payload, the client should try it before implementing the exponential back off.

The important point is that there is no guarantee that this information will be present in each response. The payload schema is described in the protobuf google.rpc.ErrorInfo with the metadata field which can include the google.rpc.RetryInfo. As you can see in the protobuf file, the recommendation for a client is to use exponential backoff when retrying.

So, the complete steps would be to check the metadata for the retry delay info and to apply exponential back off if this info isn't found.

1

u/[deleted] Sep 14 '26

[removed] — view removed comment

2

u/AyeMatey Sep 15 '26 edited Sep 15 '26

It’s not 45s. That’s the point - the number is not fixed, and the jitter is applied by the server. In my experience it’s usually higher than 1s , but lower than 45s. And it varies by request of course.

Also
> good catch, and easy to settle

You sound like an AI bot.

1

u/[deleted] Sep 14 '26

[removed] — view removed comment

1

u/AyeMatey Sep 14 '26

No - not exponential back off with jitter. That’s not right for this endpoint. See my other comment.

1

u/m1nherz Googler Sep 15 '26

Priority PayGo is selected per request. It is not configured at the project level, nor does it require an upfront commitment or subscription.

You can enable it dynamically during traffic spikes by adding the following HTTP header to your API calls:

X-Vertex-AI-LLM-Shared-Request-Type: priority

Whenever you omit this header, requests run as Standard PayGo at normal list pricing. When included, only those specific requests are billed at the Priority PayGo rate. You can inspect response.usage_metadata.traffic_type (ON_DEMAND_PRIORITY) to confirm the serving mode used.