Pulling an open-source model, starting a server, and getting an answer to your prompt should take less than 30 minutes. In half an hour or so, you’ve got yourself a prompt-ready machine. But, send 10k+ requests a day to the same inference server, and you won’t be so pleased with its performance.
The difference between demo and production-ready inference is wild.
Let’s see the main options out there for running (open-source) models, be it 10 requests a day or 10,000.
TL;DR Decide what “production” means for your workload first, then pick the server that covers most of your needs out of the box. One large generative model calls for a fast runtime, whereas the small models around your agent (embedding, reranking, extraction) need a multi-model server.
Want the broader roundup, including Ollama and LocalAI? See 7 Best Self-Hosted Inference Servers for Open-Source Models.
When it comes to agent workloads, here’s what you should look for:
Tip: Autoscaling usually happens outside the server, in Kubernetes and KEDA (Kubernetes Event-Driven Autoscaling). The server only needs to expose the metrics those tools read. If one model outgrows a single node, you need a cluster layer on top. The llm-d vs. Dynamo vs. SIE comparison and the Kubernetes-native inference servers ranking cover that part.
Here is how LLM runtimes compare:
|
Runtime |
OpenAI-compatible API |
Structured output |
Prefix caching |
Metrics |
Multi-LoRA |
Hardware |
Project status |
|---|---|---|---|---|---|---|---|
|
Yes |
Yes |
Yes |
Prometheus |
Yes |
NVIDIA, AMD, Intel, CPUs, plus TPU and others via plugins |
Active | |
|
Yes |
Yes |
Yes (RadixAttention) |
Prometheus |
Yes |
NVIDIA, AMD, TPU, Intel, Huawei Ascend |
Active | |
|
Yes ( |
Yes |
Yes (cache reuse) |
Yes (beta) |
Yes |
NVIDIA only |
Active | |
|
Yes |
Yes |
Yes |
Prometheus |
Yes (PyTorch engine only) |
NVIDIA, Huawei Ascend |
Active | |
|
Yes |
Yes (JSON schema, grammars) |
Yes |
Prometheus (opt-in) |
Yes |
CPU, Apple Silicon, NVIDIA, AMD |
Active | |
|
Yes |
Yes |
Yes |
Prometheus, OpenTelemetry |
Yes |
NVIDIA, AMD, Gaudi, Inferentia, TPU |
⚠️ Maintenance mode |
Each runtime has its sweet spot. Here's how to match yours.
No good reason to pick something else? Go for vLLM. Most devs start here. vLLM’s PagedAttention and continuous batching keep throughput high under load, and the official vLLM Production Stack gives you Helm charts, request routing, Prometheus and Grafana, and autoscaling based on vLLM-specific metrics.
Best for: One large generative model at high concurrency on almost any hardware
Watch out: The typical setup runs one model per instance. A fleet of small models means a fleet of separate deployments (more on that in SIE vs. vLLM).
Why does SGLang keep showing up in agent stacks? Because of RadixAttention. It reuses the computed work for prompts that start the same way. That’s particularly useful for agents that resend their system prompt and tool definitions every turn.
Best for: Agent loops, Retrieval-Augmented Generation (RAG) with repeated context, and heavy tool-calling traffic
Watch out: Its community is smaller than vLLM. For a head-to-head comparison, check out vLLM vs. SGLang vs. SIE.
Already all-in on NVIDIA? TensorRT-LLM is NVIDIA's own runtime. trtllm-serve exposes OpenAI-compatible completions, chat, and Responses endpoints.
Best for: Teams fully on NVIDIA that don’t mind some extra tuning
Watch out: It’s NVIDIA only, and per NVIDIA's docs, the metrics endpoint is still in beta.
LMDeploy often gets left out of these lists, which is a shame, especially if you are short on GPU memory. It pairs a C++ engine called TurboMind with a PyTorch engine, and one of its main strengths is quantization: 4-bit AWQ (Activation-aware Weight Quantization) and GPTQ models, plus KV (key-value) cache quantization.
Best for: Serving quantized models on fewer or smaller GPUs
Watch out: LoRA works only on the PyTorch engine, and you’ll find fewer tutorials than for vLLM or SGLang.
Not every deployment gets a GPU (or the budget for one, for that matter). llama-server runs GGUF (a quantized model file format) models on CPUs, Apple Silicon, and consumer GPUs, behind an OpenAI-compatible API.
Best for: Edge devices, on-premises CPU servers, and air-gapped machines
Watch out: It’s built for a modest number of concurrent users. Under heavy load, GPU-first runtimes tend to perform better.
Before your agent generates a single token, it might embed a query, rerank the results, or extract fields from a document. Those are small models with short requests, and giving each one its own GPU adds up fast in the accounting department. (How to Serve a Fleet of Small Open-Source Models goes deeper on this.)
You’ve got two options:
encode, score, extract, and generate), loads them on demand, and evicts the least recently used ones when GPU memory fills. SIE ships with a gateway, KEDA autoscaling with scale-to-zero, and Grafana dashboards.Citing CEO Daniel Svonava's talk at Infer() Summit, Superlinked reports that SIE's shared-queue design has lifted throughput by more than 50% on small-model workloads. In one illustrative model, GPU efficiency went from 51% to 92% 😉
Before real traffic hits, go through this checklist:
For more common mistakes, see What AI Engineers Get Wrong When Deploying Open-Source Models to Product.
So, which one should you pick? Go through the table below and compare:
|
If you need to... |
Start with |
|---|---|
|
Serve one large model at high concurrency |
vLLM |
|
Serve an agent loop with repeated prompts and heavy tool calling |
SGLang |
|
Run NVIDIA's own runtime on NVIDIA-only hardware |
TensorRT-LLM |
|
Run quantized models on smaller GPUs |
LMDeploy |
|
Run on CPUs or edge hardware |
llama.cpp server |
|
Serve one embedding model |
TEI |
|
Serve an agent's fleet of small models |
SIE |
If the number of deployments for your smaller models keeps growing, well that’s the job SIE was built for. It uses a single Docker image for your laptop and Kubernetes. See the deployment docs for instructions covering Docker + major clouds.
Keep your large-model runtime (or your hosted frontier model, as SIE vs. OpenAI argues) right where it is, and try SIE against your own model mix with the Superlinked docs.