Back to Research

Research

State of Self-Hosted Inference: February 2026

We run our own inference infrastructure. Not because it's trendy, but because sending client data to third-party APIs creates dependencies we're not willing to accept. Here's what the self-hosted landscape looks like right now, what we run in production, and the numbers behind our decisions.

February 2026 | Dry Ground AI Research

The Case

Why we run our own models

Every API call to a cloud provider is a bet. You're betting the price won't change. You're betting the model won't get deprecated. You're betting latency stays acceptable. You're betting your data handling meets your clients' compliance requirements.

For quick prototypes, those bets are fine. For production systems that process thousands of client communications daily, they're not.

Self-hosted inference gives us four things we can't get from APIs:

Data stays on our hardware

Client emails, documents, and communications never leave our infrastructure. No third-party data processing agreements to worry about. No shared GPU pools.

Predictable performance

No rate limits. No noisy neighbors. No "the API is slow today" surprises. We control the hardware, we control the throughput.

Model choice is ours

We test, benchmark, and swap models on our own schedule. No waiting for a provider to support the model we need. No vendor lock-in on architecture decisions.

Economics that scale

Per-token API pricing gets expensive fast at volume. Dedicated hardware is a fixed cost. The more you use it, the cheaper each inference gets.

Landscape

What's available for self-hosted inference in February 2026

The story of 2025-2026 is Mixture-of-Experts (MoE). These architectures pack the knowledge of a massive model but only activate a fraction of the parameters per token. The result: big model quality at small model speeds.

Here's what we evaluated and what we're watching:

ModelArchitectureVRAM (Quantized)Self-HostableNotesOur Status
Qwen3-30B-A3BMoE (30B total, 3B active)~18 GB (Int4)YesBest all-rounder. 90%+ of flagship quality at a fraction of the compute.Our production model
Qwen3-Coder-NextMoE (80B total, 3B active)~47 GB (Int4)YesSonnet 4.5-level coding. 70.6% SWE-bench Verified. Overkill for general ops work.Watching
GLM-4.7-FlashMoETBDYesNew contender generating community buzz. Benchmarks still maturing.Watching
Gemini 3.1 ProDense (cloud only)N/ANo1M token context. 77.1% ARC-AGI-2. Cloud-only reference point.Cloud baseline

The community consensus is clear: Qwen3-30B-A3B is the default recommendation for most teams in 2026. It delivers 90%+ of flagship model quality at a fraction of the compute cost. For general-purpose business operations (classification, extraction, summarization, drafting), nothing else in the self-hosted space matches the ratio of quality to resource requirements.

Our Stack

What we run and how we got here

We didn't just pick the popular model and call it a day. We tested three configurations of the same architecture in production conditions and let the numbers decide. Here's the progression:

1

Step 1: BF16 (Full Precision)

Started here. 30B MoE at full precision. Quality was solid: 10/10 on our test suite. But VRAM consumption ate the entire GPU. Only 4 concurrent streams before we hit memory limits. Classification took 16 seconds because the base model would generate 500 tokens of reasoning before answering.

Good quality, terrible efficiency.

2

Step 2: GPTQ-Int4 Quantization

Dropped from BF16 to 4-bit integer quantization. VRAM fell from ~75 GB to ~18 GB. Throughput jumped. We went from 4 concurrent streams to 16 on the same hardware. Quality stayed almost identical: 10/11 tests passed. One edge case in meeting notes extraction broke.

75% less VRAM, 4x concurrency, near-identical quality.

3

Step 3: Instruct-2507 Variant

Swapped the base model for the instruction-tuned release (Instruct-2507). Same quantization. This fixed the one failing test AND solved our biggest production headache: classification latency dropped from 10+ seconds to 334 milliseconds. The model learned to just answer instead of thinking out loud.

11/11 quality, 60x faster classification. This is production.

The production configuration

Model
Qwen3-30B-A3B Instruct-2507
Quantization
GPTQ-Int4
Inference Engine
vLLM
Hardware
Dedicated GPU (80 GB VRAM)
VRAM Usage
~18 GB loaded
Architecture
MoE: 30B total params, 3B active per token

The model uses ~18 GB of the available 80 GB. That leaves 62 GB for KV cache, concurrent request batching, and headroom. This is why we can serve 16 concurrent streams without degradation. Most teams running dense models on the same hardware would max out at 1-2 concurrent users.

Benchmarks

Production numbers from February 23, 2026

These are not synthetic benchmarks. Every test maps to something our system actually does in production: triaging emails, extracting data from documents, drafting communications, generating code. We ran the full suite on our production hardware under normal operating conditions.

11/11

Quality Score

tests passed (100%)

28-30

Single Stream

tok/s throughput

16

Concurrent Users

simultaneous streams

402

Aggregate Throughput

tok/s at full load

334ms

Classification

email triage latency

~18 GB

VRAM Usage

on dedicated GPU

Quality: 11/11 across 7 categories

CategoryTestsResult
Structured OutputJSON extraction from contacts, meeting notes2/2 passed
ClassificationEmail triage: urgent, newsletter, action-required3/3 passed
SummarizationFinancial document summarization1/1 passed
Instruction FollowingFormat compliance, constraint adherence2/2 passed
ReasoningMulti-step problem solving1/1 passed
Code GenerationFunctional code output1/1 passed
CommunicationEmail drafting quality1/1 passed

Throughput: single stream

Medium generation (~128 tokens)

28 tok/s

Long generation (~512 tokens)

30.3 tok/s

For context: 30 tok/s is roughly 2,000 words per minute. Faster than any human reads.

Concurrency: scaling under load

The real test isn't single-user speed. It's what happens when 16 people hit the system at the same time.

Concurrent StreamsAggregate tok/sPer-User tok/sAvg Latency
127.227.23,891ms
256.228.13,582ms
4109.327.33,665ms
8205.825.73,824ms
16401.825.13,959ms

Per-user throughput drops only 8% from 1 to 16 streams. Latency stays nearly flat. This is the MoE advantage: the model is small enough that vLLM can batch efficiently without memory contention.

Classification: 334ms

This is the number that changed how our product works. Email classification (urgent / newsletter / action-required) dropped from ~16,000ms with the base model to 334ms with Instruct-2507. Same accuracy. 60x faster.

The base model would generate 300-500 tokens of chain-of-thought reasoning before giving a one-word answer. The instruction-tuned variant just answers: 2-3 tokens total. The thinking still happens internally, but the output is what you asked for.

At 334ms, classification is effectively real-time. Emails get triaged as they arrive. Actions get flagged immediately. The difference between "AI that helps" and "AI you have to wait for" lives in this gap.

Insights

What we learned

Three months of testing, three configurations, thousands of inference runs. Here's what actually matters:

Instruction tuning matters more than model size

The biggest quality jump didn't come from a bigger model. It came from switching to an instruction-tuned variant of the same architecture. The Instruct-2507 release fixed the one test the base GPTQ model failed, and it did it with no increase in VRAM or meaningful change in throughput. If you're choosing between a larger base model and a smaller instruction-tuned one, pick the tuned one.

Quantization is nearly free

Going from BF16 to GPTQ-Int4 cut VRAM by 75% and increased throughput. Quality dropped by one test out of eleven, and that test was later recovered with instruction tuning. The community debates about quantization quality loss are largely academic for business workloads. At Int4, we can't find a meaningful difference in outputs a human would notice.

Classification speed is a product feature, not a metric

Going from 16 seconds to 334 milliseconds isn't an optimization. It's a different product. At 16 seconds, you batch classification and run it periodically. At 334ms, classification happens inline with every incoming event. The system stops being "AI that processes your email" and becomes "AI that triages your inbox in real time." This single improvement changed our product architecture.

MoE is the architecture to bet on for self-hosted

30B parameters of knowledge, 3B parameters of compute. That ratio is what makes single-GPU deployment realistic. Dense models with comparable quality need multi-GPU setups, which means distributed inference coordination, higher failure surface area, and more operational complexity. Every top-performing self-hostable model released in the last six months has been MoE. This isn't a trend. It's the new baseline.

You have to test on YOUR workloads

MMLU scores and SWE-bench numbers tell you something about general capability. They tell you nothing about whether a model can extract a phone number from a meeting transcript in valid JSON. Our test suite exists because standard benchmarks don't measure the things our product actually does. If you're choosing a model for production, build your own eval suite first.

Looking Ahead

What we're watching

Our current stack works. 11/11 quality, sub-second classification, 16 concurrent streams. We're not chasing new models for novelty. But the landscape is moving fast, and we have a process for staying current.

Qwen3-Coder-Next

80B total, 3B active. Coding-focused MoE that scores 70.6% on SWE-bench Verified, putting it in Sonnet 4.5 territory. At ~47 GB quantized, it won't fit our current single-GPU setup alongside production workloads. But if we add a second GPU or a dedicated coding instance, this becomes interesting for code generation tasks.

GLM-4.7-Flash

Another MoE contender getting attention in the community. Early benchmarks look promising, but we're waiting for the dust to settle on quantized variants and real-world testing before we invest evaluation time. The model needs to prove itself on business workloads, not just academic benchmarks.

Our upgrade criteria

We don't swap models because something new came out. We swap when a new model passes all 11 quality tests, maintains sub-second classification, fits our VRAM budget, and shows measurable improvement on at least one dimension we care about. The bar is high on purpose.

Weekly automated benchmarks

We run our full 11-test quality suite automatically every week. Not because the model changes, but because everything around it does: vLLM updates, system configurations, driver versions. If quality regresses, we know about it before any client does. When a promising new model drops, we add it to the pipeline and let the numbers speak.

Methodology

How we test

Transparency matters. Here's exactly how these numbers were produced.

Quality suite

11 tests across 7 categories: structured output (JSON extraction), classification (email triage), summarization, instruction following (format and constraint compliance), multi-step reasoning, code generation, and email drafting. Each test has defined pass/fail criteria based on output correctness, format compliance, and factual accuracy. Tests are deterministic: same input, validated output structure.

Throughput measurement

Single-stream throughput measured at two generation lengths: medium (~128 output tokens) and long (~512 output tokens). We report tokens per second as measured by vLLM's internal counters, not wall-clock estimation. Each measurement is averaged across multiple runs.

Concurrency scaling

We ramp from 1 to 16 simultaneous streams, each generating medium-length output. We measure aggregate throughput (total tok/s across all streams), per-user throughput, and average latency per request. All streams start simultaneously to simulate realistic burst patterns.

Classification latency

Measured end-to-end from request submission to complete response. This captures vLLM queue time, prompt processing, and token generation. The 334ms figure is the median across all three classification tests (urgent, newsletter, action-required).

Environment

All benchmarks run on dedicated GPU infrastructure with 80 GB VRAM. Inference engine: vLLM. Tests are automated and run weekly to catch regressions. The February 23, 2026 run reported in this article is a standard weekly benchmark, not a cherry-picked result.

Bottom Line

Self-hosted inference is production-ready

A year ago, self-hosted inference meant compromises. Smaller models, worse quality, operational headaches. That's no longer true. MoE architectures and mature quantization have closed the gap. You can run a model that passes 100% of real-world business tests, serves 16 concurrent users, and classifies in under 400 milliseconds. On a single GPU.

The tradeoff isn't quality anymore. It's operational maturity. You need to know how to evaluate models on your workloads, not on leaderboards. You need automated testing pipelines. You need to understand quantization tradeoffs and MoE architectures well enough to make informed decisions.

We've been running this for our clients through CompanyClaw. The numbers in this article come from the same infrastructure that processes real operations daily. If you want the full comparison tables across all three model configurations, check the detailed benchmark page.

Benchmarks conducted February 23, 2026 on dedicated GPU infrastructure (80 GB VRAM). Business task suite includes 11 real-world scenarios across structured output, classification, summarization, instruction following, reasoning, code generation, and communication. All tests run under production conditions with vLLM. External benchmark references (SWE-bench Verified, ARC-AGI-2) sourced from public model documentation as of February 2026.

We use cookies to improve your experience. Cookie Policy · Privacy Policy