Keeping LLM inference online is an engineering discipline with a defined sequence: decide what uptime the workload actually requires, design redundancy around the realities of stateful GPU serving, ship model updates without user-visible downtime, detect silent degradation before users do, and rehearse failure deliberately. Teams that skip the sequence buy redundant hardware they cannot operate or promise availability numbers their architecture cannot deliver. This page walks the sequence as a method, with the artifacts each step produces.
Start With the Availability SLO, Not the Architecture
Derive the target from the cost of inference downtime, not from marketing numbers: user-facing serving inherits the product's availability requirement, while batch and internal workloads tolerate far lower targets, and the SLO must state which requests count and how downtime is measured.

An SLO that cannot be measured cannot be enforced, so the statement itself is the deliverable:
| Workload class | Typical availability posture | What counts as downtime |
| User-facing interactive serving | Inherits the product SLO (commonly 99.9%-class) | Request error rate or latency beyond defined thresholds at the serving endpoint |
| Internal tools and assistants | Lower bar (99.5%-class is common) | Business-hours unavailability, measured by synthetic probes |
| Batch and offline pipelines | No uptime SLO; deadline SLA instead | Missed completion deadlines, not endpoint availability |
The measurement definition matters as much as the number: which requests count (all traffic or excluding probes), what threshold constitutes "down" (error rate, latency percentile, or both), and over what window the number is evaluated. Write the statement down before designing anything, because every later decision — replica count, failover behavior, update policy — is justified by it.
Design Redundancy Around Stateful GPU Serving
Replicate the serving tier across at least two failure domains and make request state survivable: route around failed instances, keep the router stateless, and treat model-loaded instances as cattle that the router replaces, not pets that operators nurse.
Classic stateless-web HA advice transfers only partially, because an inference instance differs from a web pod in three ways: it holds a multi-gigabyte resident model, it carries per-request generation state for in-flight tokens, and it takes minutes — not seconds — to become ready after starting. The design consequences:
- Failure domains first. Two replicas in the same rack, power zone, or network leaf share one fate; spread serving instances across the failure domains your infrastructure actually has, and know what a domain is in your environment (node, rack, availability zone, or building).
- A stateless routing tier in front. The router holds no request state, ejects unhealthy instances on health signals, and retries idempotent requests elsewhere — this layer is where availability is actually implemented.
- Admission and queueing with bounds. When capacity is exhausted, bounded queues with explicit overflow behavior beat unbounded queues that convert overload into everyone's outage.
- Warm standby, not cold hope. Recovery by "restart the instance" costs minutes of model loading; a warm standby in a second failure domain recovers in the time routing takes to notice.
Redundancy roughly doubles serving cost. The SLO from the previous section is what justifies that spend; without it, graceful degradation (queue, shed, or defer) is the honest design.
Update Models Without User-Visible Downtime
Run blue-green or canary rollout at the serving tier with immutable, versioned model artifacts: stand up the new version alongside the old, shift traffic by policy, keep the old version as the rollback target, and never mutate a live artifact in place.
The mechanics, in order:
- Publish the new model as an immutable artifact — content-addressed, versioned, recorded in whatever registry your team uses — so "which model is serving" is always a precise question.
- Deploy the new version alongside the old at reduced traffic weight (canary) or zero weight (blue-green), and let it warm fully before it takes real requests.
- Shift traffic by policy: a canary curve over hours for user-facing serving, or an immediate switch for internal tiers — with automated rollback triggers on error rate, latency percentile, or output-quality signals.
- Keep the previous version resident until the new one passes its soak window, so rollback is a routing change, not a model-load wait.
Two live versions need headroom capacity — plan it, or updates will queue behind production load. The pattern connects to resilience guidance that recommends immutable model versioning with retained rollback artifacts as the backbone of inference disaster recovery.
Health Checks That Catch Silent Degradation
Check serving health with synthetic probes through the full path: process liveness alone misses the failure modes that matter, so probe with representative prompts and alert on latency percentiles, token-generation stalls, error classes, and queue depth against the SLO baseline.
| Signal | What it catches | Alert design |
| Synthetic end-to-end probe | Path breakage the process monitor cannot see (routing, auth, model hang) | Representative prompt at fixed interval; alert on failure or threshold breach |
| Latency percentiles (TTFT, per-token) | Slow degradation under load or after a bad release | Alert on percentile against SLO baseline, windowed |
| Token-generation stalls | Requests accepted but not generating — a classic silent hang | Alert on in-flight requests with zero token progress over a bounded age |
| Error classes | OOM, scheduler exhaustion, upstream dependency faults | Class-aware alerting; different classes page different owners |
| Queue depth and wait time | Coverload before latency SLO breaks | Leading-indicator alert with a threshold below SLO violation |
Mark probe traffic and exclude it from usage analytics so observability does not pollute the metrics it observes. Our serving-path monitoring guide covers the metric infrastructure these alerts build on; the step here is wiring them to the SLO you wrote in the first section.
Rehearse Failure Before Customers Do
Run scheduled failure drills that kill instances, partition failure domains, and force rollbacks under controlled conditions, then measure time-to-detect and time-to-recover against the SLO and fix what the drill exposes.
A drill program for an inference tier needs only a few scenarios to start:
- Instance kill: terminate a serving instance mid-load and verify detection, ejection, and request survival through the routing tier.
- Failure-domain partition: isolate one domain and confirm the remaining capacity holds the latency SLO or degrades by the designed policy, not by accident.
- Forced rollback: trigger a rollout's rollback path and measure how long "back on the previous model" actually takes.
Serving Decision Matrix: Enterprise LLM Inference Infrastructure
| Serving Infrastructure Model |
Compute & Memory Contention |
P99 Tail Latency Predictability |
Multi-GPU Tensor Parallelism Support |
Optimal Enterprise Workload Fit |
| Shared Multi-Tenant Model APIs |
Multi-tenant shared workers; opaque resource pooling |
Severe tail latency jitter during peak concurrency spikes |
Black-box; no control over model parallelism or KV cache sizing |
Low-volume prototyping or asynchronous background tasks |
| Virtualized Cloud GPU Instances |
Hypervisor vGPU slices subject to CPU/PCIe interrupts |
Moderate jitter caused by neighboring tenant network bursts |
High inter-node latency limits multi-GPU tensor scaling (TP=4/TP=8) |
General internal apps with modest throughput requirements |
| OneSource Dedicated Private GPUs |
Dedicated bare-metal hardware with 100% VRAM & compute reservation |
Deterministic microsecond P99 response times under peak load |
Dedicated RoCE v2 RDMA fabric enables low-latency TP=4/TP=8 scaling |
Mission-critical, low-latency, regulated enterprise production serving |
Each drill produces two numbers — time-to-detect and time-to-recover — and a findings list that belongs in the engineering backlog, not in a document nobody rereads. Run drills in production-like staging first, schedule around peak, and accept that drills consume capacity: that cost is the premium you pay to know the design works. Teams operating redundant serving tiers on dedicated capacity — including environments like OneSource Cloud's private AI infrastructure — apply the same drill discipline inside their own boundary.
FAQ
What uptime number should we commit to for internal LLM services?
Start from measured downtime cost: interactive product features typically inherit 99.9%-class targets, internal tools often function at 99.5% or lower, and batch pipelines need no uptime SLO at all. Committing beyond what your error budget can fund produces promises the architecture cannot keep.
Why is LLM inference harder to make highly available than a stateless web service?
Each instance carries a multi-gigabyte resident model and per-request generation state, startup takes minutes rather than seconds, and capacity is scarce — so replacement is slow and expensive. The design must route around failures instantly rather than rely on fast respawn.
What is the first availability improvement to make with a limited budget?
Add a stateless routing tier with health-based ejection and keep one warm standby in a second failure domain. That single change removes the most common total-outage mode — a single endpoint with no detection — before any full multi-region ambition.
Why deploy latency-sensitive LLM inference on OneSource private GPUs?
OneSource private GPU infrastructure delivers 100% dedicated bare-metal compute and VRAM, completely isolated from cross-tenant contention. This eliminates hypervisor scheduling jitter and shared-network packet collisions, ensuring deterministic P99 tail latency, sustained token throughput, and optimal tensor parallel scaling for production enterprise LLM serving.