

- A server at “full tilt” may be serving one very large prompt or many small multiplexed prompts — both can produce similar CPU utilization but very different user impact.
- Modern decoding (token generation) is frequently memory- and memory-bandwidth-bound: cache pressure and KV cache hits dominate latency more than raw CPU cycles.
- In short, the meter being watched (CPU%) is often not attached to the scarce resource that determines user experience.

From a monitoring perspective, these metrics let you reason about both demand and the true bottlenecks (e.g., cache saturation) rather than inferring them from CPU alone.
Timing: why reactive scaling is often too slow
Stateless web pods can serve traffic within seconds after startup. Model servers are different: they must load model weights and warm caches before they can generate tokens efficiently. A reactive scale-up that waits for CPU% or latency to spike typically brings new pods online only after users are already suffering.



Careful: evicting pods without preserving cached blocks forces re-reads of model context when those conversations are resumed, increasing latency for users.

- Use the standard Kubernetes Horizontal Pod Autoscaler (HPA).
- Have the router (EPP) publish queue and request metrics.
- Scrape them with Prometheus.
- Use the Prometheus Adapter to expose those metrics to the HPA.
- The HPA scales as usual — but now on honest, inference-aware signals.

- A “variant” is the same model served with a different configuration or hardware profile (different GPU types, batch sizes, or memory allocations).
- Each variant has its own cost and latency profile.
- The Variant Autoscaler watches the same truthful signals — cache utilization and queue depth — plus any budgets or latency targets you set.


- It publishes recommendations as metrics.
- The ordinary HPA consumes those metrics and executes the scaling decision.

- Kubernetes Horizontal Pod Autoscaler: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
- Prometheus: https://prometheus.io/
- Prometheus Adapter for Kubernetes metrics: https://github.com/kubernetes-sigs/prometheus-adapter
Tip: Start by replacing CPU-based HPA triggers with direct router metrics (
num_requests_waiting, num_requests_running, gpu_cache_usage_perc) and tune thresholds against your TTFT SLO. Introduce variant-level recommendations once those signals are stable.