📈 GH Trending Explorer 🎲 Surprise me

← all repos

syv-ai / HyperQwen

git clone https://github.com/syv-ai/HyperQwen.git

Serve large Qwen models fast on the GPUs you actually own. Qwen3.8-27B on a single 24 GB card with vLLM: 127 tok/s single-user (381 when the answer quotes the prompt), ~1,035 tok/s at 64 concurrent, 150k-262k context. vLLM patches, requant pipeline, benchmarks.

+29
stars, 24h · #1,275
+~140
stars, 7 days · #1,539
+~600
stars, 30 days · #1,375
2.2k
★ total · +7% this week
295
forks · 6 open issues

Star history (as recorded here)

2026-10-20 · 2,132 ★ 2026-10-23 · 2,192 ★
LanguagePython
LicenseApache-2.0
Created2026-08-15 (2mo ago)
Last push2d ago
Watchers17
OwnerOrganization

GitHub topics

Links

README excerpt
HyperQwen 
 Large Qwen models, served fast on the GPUs people actually own. 
 One request against stock vLLM, replayed in real time from recorded token arrivals, then 64 at once.
 1080p60 MP4 · how it is made 
**Today:** Qwen3.8-27B on a single 24 GB
consumer GPU with vLLM — 150k token context and an OpenAI-compatible API with key
auth, in two ready-made modes. On an RTX 3090 at 250 W: 127 tok/s single-stream
in single-user mode, ~1,035 tok/s aggregate decode at 64 concurrent in batch mode,
and 381 tok/s when the answer quotes its own prompt.
**Where it is going:** more Qwen models, more classes of card. What this repo
really is, under the serving setup, is a patch series against a pinned vLLM plus
a model-preparation pipeline — requantized heads, a calibrated draft vocabulary,
speculation that drafts out of the prompt. Most of that is not specific to one
checkpoint or one card; it is just that one checkpoint and one card are what has
been measured to death. See Roadmap for
what is and is not portable yet, and
Field tests wanted if you have half an hour on a GPU we
have never touched.
## Quick start
 [code] 
First start pulls the image (9.5 GB) and requantizes the model (~20 GB, once,
into `./models`), then serves on `:18020`. One GPU runs one mode at a time.
- **Before exposing it** — compose publishes the port on `127.0.0.1` only (`BIND` in `.env`, default `127.0.0.1`), so another machine cannot reach it until you set a key and `BIND=0.0.0.0`; outside a container, no key means the server binds `127.0.0.1` only:
 `echo "VLLM_API_KEY=$(openssl rand -hex 24)" >> .env && echo BIND=0.0.0.0 >> .env`
- **Docker Desktop on WSL2** — keep `VLLM_WSL2_ENABLE_PIN_MEMORY=1` in `.env`, or
 the V2 runner aborts with `RuntimeError: UVA is not available`
- **No compose, or no Docker at all** —
 docs/docker.md ·
 docs/install.md
## Which setup do I want?
Three questions, and the answers are the whole of your `.env`.
 [code] 
Starting from the `.env` you copied in Quick start, which already ships **B**:
| | change in `.env` | start with | what you get |
|---|---|---|---|
| **A** | nothing | `--profile batch` | ~1,035 tok/s aggregate at 64 concurrent |
| **B** | nothing | `--profile single` | 127 tok/s single stream, 64k context |
| **C** | add `DFLASH_TOKENS=15` | `--profile single` | 381 tok/s while quoting, at 4 slots and 56k |
| **D** | `SPEC=mtp` and `CTX=long` | `--profile single` | 150k context, ~95-100 tok/s |
| **E** | add `CTX=huge` | `--profile single` | 240k context, 67 tok/s mixed and 164 while quoting |
Torn between B and C: B is the safe default, and C only pays off when the output
really does repeat the input — it trades request slots and context for it. D drops
back to MTP speculation on purpose, because DFlash2 past 64k is worth it only for
reproduction and loses to `SPEC=mtp CTX=long` about 2:1 on everything else; at E
the KVarN cache buys the context instead, so DFlash2 stays on. A needs no edit at
all — batch ignores `SPEC` and says so on start