cd /news/large-language-models/the-best-self-hosted-llms-in-2026-an… · home topics large-language-models article
[ARTICLE · art-113731] src=dev.to ↗ pub= topic=large-language-models verified=true sentiment=· neutral

The Best Self-Hosted LLMs in 2026 — and How I Deployed Them

A developer detailed how they deployed self-hosted open-weight LLMs for a fintech client whose compliance team banned external AI APIs, running a 70B-class model on two GPU boxes for document Q&A, support triage, and code review. The guide categorizes models by size and hardware needs, recommends serving stacks including Ollama, llama.cpp, vLLM, and TGI, and advises on the cost and practical trade-offs of self-hosting.

read8 min views2 publishedAug 28, 2026

A practical field guide to running open-weight LLMs on your own hardware — which models, which serving stacks, and the cost math nobody puts on a blog post.

A fintech client called me in January with a problem that is getting more common by the month: their compliance team had banned every external AI API. No data leaves the building, they said. The analyst who wanted to chat with their internal documents would just have to wait. I told them they did not have to wait — they could run the model on hardware they already owned.

Three weeks later we had a 70B-class model serving the entire company on two GPU boxes, handling their document Q&A, their support triage, and a chunk of their internal code review. The cost per million tokens was a fraction of what the hosted API would have billed, the data never left the office, and the compliance team slept better. This article is that deployment, generalized: how I think about open-weight models, which ones I actually reach for, how I serve them, what the hardware math looks like, and the honest list of things that go wrong.

Let me state the case plainly, because there are good reasons and bad reasons to self-host, and you should know which one you have.

The good reasons:

The bad reasons:

Decide which column you are in before you spend a rupee on silicon.

The open-weight ecosystem moves fast, but the tiers have been stable enough to reason about. Here is how I categorize what is available today, and the hardware each tier realistically needs.

Tier Representative models What it is good at VRAM you need
Small (1–4B) Phi-4, Llama 3.2 3B, Qwen 2.5 3B Classification, extraction, routing, single-purpose tasks 4–8 GB
Mid (7–14B) Llama 3.1/3.3 8B, Qwen 2.5 14B, Mistral 7B General chat, summarization, light reasoning on one GPU 10–24 GB
Large (30–40B) Qwen 2.5 32B, Llama 3.1 70B (quantized) Strong reasoning, coding, agent loops on a single big GPU or two 24–48 GB
Frontier open (70B+) Llama 3.3 70B, DeepSeek R1 distill variants, Qwen 3 flagship Best open quality; needs multi-GPU or heavy quantization 48 GB+

The honest guidance: most production workloads do not need the frontier tier. A routing model that decides which sub-agent gets a task, an extraction model that reads invoices, a summarizer for internal reports — those are 3B to 8B jobs that run on a single GPU and answer in a few hundred milliseconds. Save the big models for the tasks where reasoning quality actually changes the business outcome.

The model file is only half the story. The serving layer decides your throughput, your latency, and how much of your weekend you spend fighting it. My recommendations, in order:

Ollama — the start-here option. A single binary, a pull

command, and an OpenAI-compatible endpoint out of the box. Perfect for one machine, one developer, or a small team that just needs a local model. It is not a serious production serving layer at scale — it will get you to the demo, then you migrate.

llama.cpp — the edge and CPU option. Runs quantized GGUF models on CPU, on Macs, on laptops, and even on Raspberry Pi-class hardware. When a client needs a model in the field with no GPU, llama.cpp is the tool. Expect modest tokens per second — fine for interactive use, wrong for high-throughput serving.

vLLM — the production choice. A continuous-batching serving engine that is OpenAI-API-compatible and designed to maximize throughput on GPUs. This is what I reach for the moment an app goes behind an endpoint that real users hit. PagedAttention keeps the GPU busy, and the API surface means your existing OpenAI client code does not change.

Text Generation Inference (TGI) — Hugging Face's serving stack. Also excellent, also OpenAI-compatible, a reasonable alternative to vLLM. I choose between them based on which has better support for the specific model and quantization I am running that week; they are close enough that your choice of one over the other rarely determines success.

TensorRT-LLM / DeepSpeed — for the teams with the engineering time to squeeze the last bit of performance and the models that benefit from it. If you do not have a full-time inference engineer, you do not need these.

Let me give you the numbers I actually use, because every tutorial says "you need a good GPU" and then stops. The math is simple: a model needs roughly its parameter count multiplied by the bytes per weight, plus the KV cache for concurrency.

So a single 24 GB RTX 4090 comfortably serves a 14B model in FP16 or a 70B model in 4-bit. Two 4090s handle a 70B with room for a real KV cache. One 48 GB workstation card or an A100 80 GB gives you frontier-tier headroom. A Mac with 64–128 GB of unified memory runs 70B-class GGUF models through llama.cpp with surprising grace — slower than a GPU, but silent and quiet in an office in a way two GPUs blasting in a rack never are.

The rule of thumb I give clients: the KV cache is the part people forget. Two users asking long questions can double your memory usage. Size your server for your concurrency, not for one benchmark prompt. I have seen a perfectly tuned single-user demo fall over at five concurrent users because the cache had nowhere to go.

Here is the deployment pattern I have shipped most often. On the GPU server, install vLLM and pull the model:

pip install vllm

vllm serve Qwen/Qwen2.5-32B-Instruct-AWQ \
  --host 0.0.0.0 --port 8000 \
  --max-model-len 32768 \
  --quantization awq \
  --gpu-memory-utilization 0.92

A few choices worth explaining:

--gpu-memory-utilization 0.92

.--max-model-len 32768

.That command gives you an OpenAI-compatible endpoint at http://localhost:8000/v1

. Your application code does not change:

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed",  # vLLM is unauthenticated by default
)

resp = client.chat.completions.create(
    model="Qwen/Qwen2.5-32B-Instruct-AWQ",
    messages=[
        {"role": "system", "content": "You summarize internal support tickets."},
        {"role": "user", "content": "Summarize this ticket: ..."},
    ],
    temperature=0.2,
)
print(resp.choices[0].message.content)

The api_key

line is the sneaky detail — your existing code that hardcodes OPENAI_API_KEY

keeps working against a local server. That compatibility is exactly why vLLM is my default: migration from a hosted API becomes a one-line base_url

change.

Self-hosting is not "free AI." It is a new production system with its own failure modes. The list, in order of how much they have cost me:

The demo dies under concurrency. Single-user latency looks great; five users queue. The cause is almost always KV-cache memory or the serving engine not batching. Fix: set --max-model-len

to what you need, add a second GPU if the cache is the constraint, and load-test with your real prompt lengths before day one.

Quantization quality is assumed, not measured. You save 75% of VRAM with Q4 and never check whether the model still does your task. Fix: build a 50-question eval set, run it on FP16 and Q4, and compare. I have shipped models where the answer was identical on 95% of questions — and I have found tasks (exact number extraction is a classic) where quantization quietly breaks them.

Model changes are not versioned. Someone runs ollama pull latest

and the "same model" suddenly behaves differently in production. Fix: pin exact model and quantization versions, store them in your config, and treat model upgrades like any other breaking deploy.

The GPU is idle at night and hot at noon. If your traffic is spiky, you are paying for idle silicon and burning electricity. Fix: size for your 95th percentile, put a load-balancing layer in front, and if your peaks are rare, honestly compare against a hosted option for the overflow.

Nobody owns the stack. A self-hosted model is a server. It needs patching, backups, monitoring, and a person on call. The team that says "we self-host to save money" and has no one who understands the box usually ends up paying more in emergency engineering than they saved in API bills.

Embedding models get forgotten. Your LLM is self-hosted, but if your RAG pipeline still embeds with an external API, you have not actually achieved data sovereignty. Self-host your embedding model too — the same vLLM server can serve it.

The honest boundary, stated so you can check yourself:

Before you call a self-hosted deployment done:

The compliance-banned fintech client now runs a 32B Qwen model on one 24 GB GPU, serving the whole company, with the data never leaving the building. Their monthly bill for the box is a fixed number they can budget for; the API they replaced would have been metered and unpredictable. That is the real value of self-hosting — not just cheaper tokens, but ownership.

Start where I start: pick the smallest model that does the job, serve it with Ollama to prove the workflow, move to vLLM when real users show up, and write your own cost math before you buy a single GPU. The models will keep improving; the pattern will not.

*Gulshan Yad

── more in #large-language-models 4 stories · sorted by recency
── more on @ollama 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/the-best-self-hosted…] indexed:0 read:8min 2026-08-28 ·