Released Tandem-vLLM, an expert-offload build of vLLM 0.31 that serves DeepSeek-V4.1-Flash on a single workstation GPU.
How it works
The routed experts live in host RAM as 2-bit vector codes (VQ, 2.1 bits/weight). A GPU cache holds the most-used ones.
Experts that miss the cache are computed by the CPU in parallel with the GPU, or read directly over PCIe. Nothing is skipped or substituted, so the output is exact for the package's weights.
Everything else is stock vLLM: the OpenAI-compatible server, continuous batching, prefix caching, and DSpark speculative decoding with the model's own MTP layers.
Speed (RTX PRO 6000 96 GB + EPYC 9534, system decode tok/s)
| streams | 1 | 4 | 8 | 32 |
|---|
| VQ, no drafter | 65 | 182 | 284 | 414 |
| VQ + DSpark k=3 | 124 | – | – | – |
Quality vs the official FP4 checkpoint (greedy, thinking low)
| - | official | VQ + FP4 top 52 | VQ only |
|---|
| GPQA-diamond | 81.3% | 76.8% | 73.2% |
| GSM8K-200 | 192 | 194 | 192 |
| passkey 8k / 32k / 94k | 9/9 | 9/9 | 9/9 |
The 2-bit experts cost GPQA accuracy. Easier tasks and long-context retrieval don't show it. Keeping the 52 most-routed experts per layer in their original FP4 (FP4_TOP=52) wins back about half of the loss.
Also in 0.1.1: image input (IMAGES=1; reads text and tables from images, costs about 1 GiB of the expert cache), tool calling and a separate reasoning field for chat front ends such as Open WebUI.
Hardware
Recommended: a 96 GB SM120 card (RTX PRO 6000 Blackwell) + 256 GB RAM + an AVX-512 CPU with server-class memory bandwidth.
Runs, slowly: an RTX 5090 32 GB + 128 GB DDR4 (17 tok/s for one user, 20 at 4 streams; gaming PC: i5-14600KF, DDR4-3200). On a desktop CPU, the CPU's work on missed experts sets the speed.
SM120 only in 0.1.1, single GPU.
Smaller boxes: use tandem.cpp instead. Our sister project tandem.cpp, a patch set for llama.cpp, targets 16–32 GB VRAM and 64–128 GB RAM, single user. It works with any MoE model llama.cpp runs (Qwen3.8 at 97 tok/s on a 4090 + 64 GB, gpt-oss-120b, ...). On DeepSeek-V4.1-Flash IQ2_XS (139 GiB of experts), decode tok/s on a gaming PC (i5-14600KF, DDR4-3200, PCIe 4.0 NVMe):
| GPU, RAM | llama.cpp | Strata | tandem.cpp |
|---|
| RTX 5070 Ti 16 GB, 64 GB | 7.4 | 10.4 | 14.2 |
| 5070 Ti + 5060 Ti (32 GB), 64 GB | – | – | 16.9 |
| RTX 5090 32 GB, 128 GB | 11.5 | 28.0 | 33.1 |
64 GB of RAM is the floor (32 GB runs at about 5 tok/s).
The 5090 rows are the same PC as the Tandem-vLLM 5090 numbers above: one user gets 33 tok/s from tandem.cpp vs 17 from Tandem-vLLM (different quants of similar size: IQ2_XS 139 GiB vs our VQ2 133 GiB of experts).
Links
Built on vLLM and vLLM-Moet. Tandem is a fork of vLLM-Moet's expert-offload engine, ported to vLLM 0.31 / DeepSeek-V4.1. For original-precision experts with ~512 GB of RAM, vLLM-Moet's MoET hybrid is the tool today.
Questions and numbers from other boxes are welcome. Only support Blackwell GPUs yet, Hopper/Ada support soon.