← All articles
Engineering · Apr 30, 2026 · 12 min read

Self-Hosted AI: What We Learned After 50+ Deployments

We have now stood up AI systems on customer-controlled infrastructure more than fifty times — in their data centers, their private clouds, and their air-gapped enclaves across three continents. The promise of self-hosting is simple and real: your data stays yours, your costs stop scaling with someone else’s price list, and you control the whole stack. The execution is where it gets interesting. This is what fifty-plus deployments taught us about doing it well.

Why teams self-host in the first place

The motivations cluster into four, and most serious deployments are driven by more than one.

The hard parts

Self-hosting is not “the cloud, but in your building.” The conveniences a managed provider hides become your problems, and they are specific.

GPU scheduling and optimization

GPUs are the most expensive idle resource you will ever own, so utilization is everything. The hard problems are packing multiple models onto the same card without contention, keeping batch sizes high enough to saturate the silicon without blowing latency budgets, and managing memory so a long context request does not evict everything else. Naive scheduling leaves half your compute idle while requests queue. Getting this right is the difference between the cost case working and the cost case collapsing.

Kubernetes

Kubernetes is the lever that makes the rest tractable, and it is also where teams cut themselves. GPU node pools, device plugins, autoscaling that understands accelerators rather than just CPU, rollout strategies that drain in-flight inference gracefully — none of this is default behavior. You earn it.

Networking, including TURN for voice

Networking inside a customer environment is consistently underestimated. Voice is the sharpest edge: real-time audio over WebRTC needs a TURN relay to traverse NAT and firewalls, and that relay has to be reachable by both the browser and the backend on an address that is correct from both sides. We have lost more hours to one misconfigured relay address than to almost anything else. Plan the voice path first, not last.

Secrets and upgrades

Secrets multiply across model registries, storage backends, telephony credentials, and provider keys, and every one of them needs rotation that does not require a maintenance window. Upgrades are the quiet killer — a stack you cannot upgrade safely is a stack that ages into a liability. Design the upgrade path on day one, because retrofitting it later is the hardest work you will do.

Self-hosting does not remove operational complexity. It moves it inside your walls, where you can finally see it, own it, and decide how it behaves. That trade is the entire point — and it is only worth it if you are ready to do the owning.

Patterns that worked across three continents

A handful of patterns showed up in every deployment that went smoothly, regardless of region or industry.

Data isolation and per-tenant boundaries

When one self-hosted deployment serves multiple tenants, isolation stops being a feature and becomes the foundation. Every request, every cached artifact, and every log line has to be scoped to its tenant, and that scope has to be enforced at the data layer rather than reconstructed in application logic after the fact. A shared model is fine. Shared data is a breach waiting to be discovered. The boundary that holds under audit is the one the database enforces, not the one a developer remembered to add.

When self-hosting is worth it — and when it isn’t

Self-hosting pays off when residency or compliance leaves no alternative, when volume is high and sustained enough for owned hardware to beat per-token pricing, and when control over the stack is itself a requirement. It is the wrong call when traffic is low or spiky, when the team has no appetite for operating GPU infrastructure, or when speed of iteration matters more than ownership. There is no shame in renting until the math and the mandate both point the other way.

Fifty-plus deployments in, the summary is short: self-hosting is not harder than the cloud, it is differently hard. The complexity does not disappear — it moves where you can govern it. For the teams that need that, it is worth every bit of the work.