Submit projectSubmit

THE SOTA COMPARISON

vLLM vs SGLang vs LMDeploy for self-hosted LLM serving

Compare licences, current releases, server commands, hardware paths, quantization and serving features for self-hosted LLM inference, checked 2026-10-30.

By SOTA · Updated 2026-11-07 · Researched with AI assistance; facts checked against the linked sources · Not a hands-on benchmark · How we work

The short answer

All three projects offer Apache-2.0 code and an OpenAI-compatible server. vLLM documents multiple parallelism strategies and hardware plugins; SGLang documents RadixAttention and prefill/decode disaggregation; LMDeploy combines TurboMind and PyTorch engines with quantization tools. Choose by the exact model, accelerator and feature combination you can validate. SOTA’s assessment is based on official documentation; we have not run a performance benchmark.

Decision points from the linked documentation
DecisionvLLMSGLangLMDeploy
Software licenceApache-2.0Apache-2.0Apache-2.0
Latest PyPI release checked November 7, 20260.33.0 — November 2, 20260.5.23 — 2026-10-300.18.0 — 2026-09-28
OpenAI-compatible server startupvllm serve MODEL_PATH; default port 8000sglang serve MODEL_PATH --port 30000lmdeploy serve api_server MODEL_PATH --server-port 23333
Documented hardware paths; check platform-specific setupNVIDIA CUDA, AMD ROCm, Intel XPU and CPUs; Apple Silicon via vLLM-Metal; TPU and Ascend via hardware pluginsNVIDIA, AMD, Intel GPU/CPU, Apple Silicon, Ascend and Moore Threads; TPU via SGLang-TorchTPU or SGL-JAXNVIDIA CUDA; AMD ROCm source installation; Ascend, Cambricon and MetaX/MACA build targets
Installation and Pythonuv pip install vllm; PyPI requires Python >=3.11,<3.15uv pip install --prerelease=allow sglang; Python >=3.11; current NVIDIA installation guide requires CUDA 13pip install lmdeploy; Python 3.10–3.13 recommended; default PyPI wheels target CUDA 12.8 from v0.13.0
Quantization examples; hardware restrictions applyAWQ, GPTQ, FP8, INT8, INT4, GGUF, NVIDIA Model Optimizer and TorchAOFP8, MXFP4, AWQ, GPTQ via gptq_marlin on NVIDIA, GGUF and compressed-tensorsTurboMind AWQ/GPTQ 4-bit inference; SmoothQuant INT8/FP8; INT4/INT8 KV cache
Caching and speculative decodingPrefix caching and speculative decodingRadixAttention prefix caching; EAGLE-2/EAGLE-3 and other speculative methodsAutomatic prefix caching; experimental speculative decoding, with PyTorch EAGLE3 and DeepSeek MTP examples
Structured output and adaptersStructured outputs using xgrammar or guidance; multi-LoRAJSON schema, regex or EBNF constraints; multiple LoRA adapters within a batchStructured output on TurboMind and PyTorch; multiple LoRA adapters on PyTorch only
Parallelism and disaggregationTensor, pipeline, data, expert and context parallelism; disaggregated prefill/decodeTensor/data parallelism; separate prefill and decode workers with Mooncake or NIXL transferTensor parallelism; PyTorch multi-node deployment through Ray; DeepSeek prefill/decode disaggregation via DLSlime/Mooncake integration
Multimodal coverageText, image, video and audio modalities depending on modelVision-language models including Qwen-VL, Llama 3.2 Vision and LLaVAVision-language models including InternVL, Qwen-VL and LLaVA; engine-specific model/type tables

Comparison scope and release snapshot

This comparison covers self-hosted inference and serving. All three projects publish Apache-2.0 code and document an OpenAI-compatible server. Treat API compatibility as a starting point: verify the endpoints, streaming responses and request fields your application actually uses.

PyPI metadata checked November 7, 2026 lists vLLM 0.33.0, released November 2; SGLang 0.5.23, released October 30; and LMDeploy 0.18.0, released September 28. The feature comparison uses current official documentation, without testing every feature in those packages. Pin a package version or container digest and use matching documentation before deployment.

Hardware and quantization entries are examples of documented paths, not a promise that every listed feature works on every device. Both vLLM and SGLang publish quantization compatibility tables; LMDeploy publishes separate model and data-type tables for its engines. Start with the intersection of your model architecture, accelerator, precision and required features.

Check the complete serving configuration

Replace MODEL_PATH in the table commands with a supported Hugging Face model ID or local model directory. vLLM’s quickstart uses localhost:8000/v1, SGLang’s quickstart sends requests to localhost:30000/v1/chat/completions, and LMDeploy’s server guide uses port 23333. These are starting commands; use the model and hardware guide for additional arguments.

LMDeploy’s LoRA guide limits adapters to its PyTorch backend, while its structured-output guide supports both PyTorch and TurboMind. Its speculative-decoding guide labels the feature experimental and shows PyTorch examples. Its NVIDIA installation path also needs careful version selection: the README says default PyPI wheels use CUDA 12.8 from v0.13.0, whereas the current SGLang NVIDIA installation guide requires CUDA 13. Record the actual runtime and driver combination used in your evaluation.

How to choose — SOTA’s assessment

SOTA’s assessment is based on the official documentation, with no hands-on tests or benchmark ranking. Shortlist vLLM when you need to evaluate several distributed-inference strategies or a hardware-plugin path: its documented options include tensor, pipeline, data, expert and context parallelism. Confirm the chosen plugin’s model and feature coverage before investing in deployment.

Shortlist SGLang when shared-prefix workloads and explicit prefill/decode separation are central to your design: its docs cover RadixAttention prefix caching and disaggregation with Mooncake or NIXL. Use those as reasons to test your own request mix, without assuming a latency or throughput advantage.

Shortlist LMDeploy when you want quantization tools alongside serving and can make an explicit choice between TurboMind and PyTorch. Its docs cover AWQ/GPTQ inference, SmoothQuant and KV-cache quantization, with backend-specific model support. Prefer whichever engine passes your model, correctness and operational checks on the target hardware.

A reproducible evaluation plan

This is SOTA’s proposed test protocol; we have not run this benchmark. Select one model supported by all three engines, pin the same weight revision, tokenizer and chat template, and begin with the same unquantized precision. Use the same physical host, accelerator count, memory budget, driver, power settings and client placement for each run. Pin engine versions or container digests and save every launch command, dependency version and configuration flag.

Create a fixed JSONL prompt corpus, publish its checksum and use the same prompt order and seed for each engine. Include separate groups with 128, 1,024 and 4,096 input tokens, using the pinned tokenizer, and request at most 128 output tokens with identical sampling and stop settings. Record actual output lengths and early stops. Test concurrency 1, 8 and 32 using the same client harness; after 30 warm-up requests, run each case for five minutes and repeat it three times, rotating engine order.

Measure successful requests per second and output tokens per second separately. With streaming enabled, measure time to first token (TTFT) from client request submission to the first non-empty generated token; report p50 and p95 alongside end-to-end latency, errors and timeouts. Sample total accelerator memory throughout each run and report idle allocation and peak usage, including KV-cache and draft-model allocations. Preserve raw request timings, token counts, memory samples and logs so another team can reproduce the calculation.

Run distinct cold-cache and warm shared-prefix cases, recording cache settings and reset procedures. Establish a baseline with speculative decoding disabled, then evaluate supported optimizations one at a time. Test a common quantized checkpoint separately if all three support it on the selected hardware; include output-quality checks. Validate streaming, structured-output schemas, LoRA routing and multimodal requests as separate acceptance cases when your application needs them. Publish results only for the combinations actually tested.

What changes the decision

Revisit the choice when the model architecture, accelerator generation, quantization method, shared-prefix rate, prompt/output length mix or concurrency target changes. Re-run the same evaluation after an engine upgrade, a backend switch or a move from one node to several. Set acceptance thresholds for TTFT, throughput, memory, correctness and recovery behavior before comparing results.

A required feature combination should decide the shortlist before a speed comparison. For example, LMDeploy’s documented LoRA path requires PyTorch; vLLM’s hardware plugins need their own compatibility checks, and SGLang’s quantization table distinguishes NVIDIA, AMD and Ascend support. Treat missing documentation or a failed acceptance case as a reason to narrow the configuration or evaluate another engine, rather than infer support from a project-wide feature list.

Sources & method

Official documentation was checked on 2026-11-07. Selection advice is our assessment. Interfaces and requirements may change; check the linked source for the version you intend to use.

How SOTA reviews projects · Suggest a correction · Download the evaluation checklist

Explore the projects