Why Your Kubernetes Load Balancer Is Wasting GPU Money – and How SageMaker’s HyperPod Inference Gateway Fixes It

According to an AWS blog post, Amazon SageMaker has launched a HyperPod Inference Gateway that claims to slash first‑token latency by up to 82 % and eliminate idle GPU capacity. The feature drops in as a single EKS add‑on and promises to work with any OpenAI‑compatible model server without code changes.
The hidden cost of naive routing
Running large language models on a GPU fleet already feels like buying premium gasoline for a car that spends most of its time idling. The default Kubernetes load balancers—round‑robin or least‑connections—have no clue what each pod is doing inside the GPU. They cannot see whether a pod’s key‑value (KV) cache is full, whether it is in the middle of a long‑context generation, or whether it already holds the LoRA adapter your request needs. The result is a classic “busy‑work‑while‑idle” scenario: busy pods get more requests, idle pods sit empty, and first‑token latency spikes to several seconds during traffic bursts. To keep the latency tolerable, teams over‑provision GPU nodes, paying for capacity that never does useful work.
How the Inference Gateway works under the hood
The gateway introduces a two‑tier architecture built entirely on Kubernetes‑native primitives. Tier 1 lives as a per‑cluster add‑on (the amazon-sagemaker-hyperpod-inference addon). It comprises three components:
- Envoy Gateway – a high‑performance L7 proxy that terminates HTTPS and presents a single private endpoint per cluster.
- Body‑Based Router (BBR) – inspects the JSON body of each OpenAI‑compatible request, extracts the
modelfield, and directs the request to the appropriate model pool. This enables one gateway to serve many models. - Endpoint Picker (EPP) – the decision engine. It consumes Prometheus metrics from every model‑serving pod and scores each pod on several real‑time signals: KV cache utilization, queue depth, LoRA adapter residency, prefix cache hit rate, and number of running requests. Each metric has a configurable weight, letting you bias the routing toward latency‑sensitive chat or throughput‑oriented batch jobs.
Tier 2, announced as “coming soon,” will add a Global Inference Router that coordinates traffic across clusters and regions, handling cross‑cluster failover, global rate limiting, and cost‑aware shaping. Because Tier 1 already does the heavy lifting locally, most users can see benefits immediately without waiting for the global layer.
Real‑world benchmark results
The blog post reports a set of controlled experiments that compare the gateway against a vanilla Kubernetes round‑robin load balancer. Four models (8 B to 235 B parameters) were deployed on p5.48xlarge (H100) and g5 (A10G) instances. Three traffic patterns were examined: mixed GPU generations, bursty demand, and shared prompt prefixes. The key numbers are presented in the table below, where “‑97 %” means the first‑token latency (TTFT) fell to 3 % of the baseline.
| Workload condition | TTFT P95 change | TTFT P99 change | Throughput change |
|---|---|---|---|
| Mixed GPU generations (Llama‑3.1‑8B) | –97 % | –97 % | +8 % |
| Mixed GPU generations (Qwen3‑32B) | –98 % | –97 % | +50 % |
| Bursty traffic (Llama‑3.1‑70B) | –94 % | –98 % | +12 % |
| Bursty traffic (Qwen3‑235B) | Comparable | –89 % | Comparable |
| Shared prompt prefix (Llama‑3.1‑8B) | –26 % | –43 % | Comparable |
| Uniform fleet, steady traffic (Qwen3‑235B) | Comparable | Comparable | Comparable |
“Comparable” indicates the difference was within normal run‑to‑run variance. The pattern is clear: the more heterogeneous the fleet and the more erratic the traffic, the larger the latency win. When the fleet is perfectly uniform and traffic is constant, the gateway performs on par with round‑robin.
What changes for you – trade‑offs and watch‑outs
The headline claim—cutting first‑token latency by up to 82 %—holds up in the mixed‑hardware, bursty scenarios that most production LLM services actually face. The trade‑off is the added complexity of a new Kubernetes add‑on and a set of metrics to monitor. If you already run a mature Prometheus/Grafana stack, the gateway simply adds a few more series (KV cache utilization, queue depth, etc.) that you can scrape alongside existing pods. If you lack that observability pipeline, you’ll need to provision it before you can trust the scores that drive routing.
Another subtle cost is the initial label‑ing and CRD (Custom Resource Definition) configuration. The gateway does not auto‑discover pods; you must add a label like app: vllm-llama to each model deployment and then create an InferenceGatewayConfig that maps those labels to model names. This is a one‑time operational step, but it introduces a dependency on correct labeling—mistyped labels will cause requests to be rejected with HTTP 429 errors.
Finally, the gateway’s default scoring weights are tuned for a generic latency‑sensitive workload. If you run heavy batch jobs that tolerate higher latency, you may want to increase the weight on “running requests” to favor throughput. The documentation says the weights are configurable, but the blog post does not provide concrete examples. Expect a short period of trial‑and‑error to find the sweet spot for your particular mix of chat and batch workloads.
Quick start checklist you can try today
- Install the add‑on – Run the
aws eks create-addoncommand shown in the post, substituting your cluster name. - Label your model pods – Add a simple label under
metadata.labelsthat matches themodelSelectoryou will define. - Create an
InferenceGatewayConfig– Use the YAML snippet from the announcement, adjustingmodelNameandmatchLabelsto your own model and label. - Send a test request – Curl the gateway’s private endpoint with an OpenAI‑compatible JSON payload; the response time should drop noticeably compared to the same request routed through your existing ALB.
- Monitor the new metrics – Add the Prometheus series for KV cache utilization and queue depth to your Grafana dashboards; watch the scores shift as traffic bursts arrive.
If the latency improvement meets expectations, consider tweaking the scorer weights to prioritize throughput or to give LoRA adapters higher affinity. If you encounter 429 responses, check the pool exhaustion block in the gateway’s failure handling table and verify that your auto‑scaling policies can spin up new pods fast enough.
By installing a single add‑on and adding a few labels, you can start reclaiming idle GPU cycles that were previously wasted on round‑robin mis‑routing. The payoff is immediate: lower user‑facing latency, higher GPU utilisation, and a smaller cloud bill.


