首次运行需联网安装运行时(约 5–15 分钟、数 GB),并需下载约 16GB 的 Lorbus AutoRound INT4 模型权重;必须使用该量化版本,其他权重无法用于 MTP 草稿;Qwen3.6 是思考模型,max_tokens 太小会导致 content 为 null,建议至少 1500–2000;单卡带显示器时需在启动期间关闭占用显存的程序,否则可能 OOM。
qwen3.6-windows-server
devnen更新放缓在 Windows 上原生一键跑 Qwen3.6-27B 推理,无需 WSL 或 Docker,RTX 5090 上可达 158 tok/s,适合本地离线、注重隐私的部署。
One-click Qwen3.6-27B inference on Windows. 158 tok/s on RTX 5090, 72 tok/s on RTX 3090. Native, no WSL, no Docker, no telemetry.
start.bat --auto-download --snapshot start_72tps需要 NVIDIA GPU:30/40 系用 ampere 包,50 系用 blackwell 包;单张 RTX 3090 24GB 可跑 INT4 量化,双卡可跑 160k 上下文的流水线并行。README 未说明 CPU 运行方式。
在 Windows 上一键本地部署 Qwen3.6-27B 推理服务,免 WSL 和 Docker,提供 OpenAI 兼容 API
在 Windows 上原生一键跑 Qwen3.6-27B 推理,无需 WSL 或 Docker,RTX 5090 上可达 158 tok/s,适合本地离线、注重隐私的部署。
核心能力
- 解压后双击 start.bat 即可在 127.0.0.1:5001/v1 提供服务
- 内置 Textual TUI,用方向键选择快照配置,按 e 键编辑配置
- 提供多种预设快照,按上下文长度和 tok/s 权衡,单卡 3090 最高约 72 tok/s
- 内置工具调用修复,兼容 Claude Code、Cline、Cursor 等客户端
- 完全本地运行,无遥测,仅在主动下载模型时访问 HuggingFace
容易踩的坑
- v1.3.11qwen3.6-windows-server v1.3.11, portable Windows launcher最新正式版2026-05-14 · 2026-05-14 17:10 UTC
qwen3.6-windows-server v1.3.11
Bugfix release: third pass on the LOADING-stuck dashboard (issue #12). v1.3.8 added a 60-second grace before the runtime-manifest GC could fire, v1.3.9 removed a separate silent-unlink path. Reporter still hit it on v1.3.9: their cold Ampere boot takes ~135 seconds from click to
Application startup complete, longer than the 60-second grace, so the GC fired during boot withport_up=False wrapper_up=Falseand wiped the manifest mid-boot.What changed
launcher/app/runtime.py: grace bumped from 60s to 300s. Cold Ampere boots with torch.compile + warmup + weight load run 120-180s, and a slowtasklistcall can flapwrapper_upto False for one poll. 300s covers any realistic boot window without leaving truly dead manifests around for long.- Per-poll diag log line. Every poll that sees a not-listening,
not-alive manifest now writes one line to
logs\launcher.diag.logsummarizing port_up, wrapper_up, age, and the keep / GC decision. Makes future diagnosis a one-line paste. snapshots/_common.py:clear_manifest(called from each snapshot'sfinallyblock when the wrapper python exits) now writes a diag-log line too, so we can tell from logs whether the wrapper ever exited and when.
Who is affected
- Anyone whose Ampere or Blackwell snapshot boot takes longer than 60 seconds (any cold boot does) and hit the LOADING-stuck card despite v1.3.9 / v1.3.10.
Upgrading
update.batThe launcher zip is replaced;
venv\,models\,logs\,cuda13_shim\anduser_config.jsonare preserved. The bundled wheel is unchanged from v1.3.7, so the runtime install is not rerun.Verification
After upgrading, launch any snapshot from the TUI and let it sit through the full vLLM compile / autotune window. The card should progress LOADING -> RUNNING and
logs\runtime\<port>.jsonshould remain on disk for the whole session. If the card still sticks, paste the contents oflogs\launcher.diag.login the issue.Files
qwen3.6-windows-server-portable-x64-ampere.zipqwen3.6-windows-server-portable-x64-blackwell.zipSHA256SUMS.txt
- v1.3.10qwen3.6-windows-server v1.3.10, portable Windows launcher2026-05-14 · 2026-05-14 16:35 UTC
查看更新说明
qwen3.6-windows-server v1.3.10
Bugfix release: launcher could loop for 2-3 hours on every boot when the NVIDIA CUDA 13 Toolkit was installed at its default location (
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.x). The space in the path broke FlashInfer's JIT build, sotrtllm_utils.dllnever compiled and vLLM never reachedApplication startup complete. Reported in issue #18.What changed
snapshots/_common.py:clean_cuda_env()now prefers a real system-installed CUDA 13.x toolkit at a space-free path. When the toolkit is found at the defaultC:\Program Files\...location, the launcher creates a junction atC:\cuda13<minor>(no admin required) and pointsCUDA_PATH/CUDA_HOMEthere so FlashInfer's ninja build works. Falls back to the existing bundled cu13 shim when no system toolkit is installed, the same as before.
Who is affected
- Anyone on a Blackwell GPU (5090) who installed the CUDA 13 Toolkit and
saw boot loop on
Tuning fp4_gemmfor hours. - Drivers-only users are unaffected, the bundled cu13 shim still ships and still works for them.
Boot time expectations
Cold first boot on a fresh install is 10-20 minutes on the 5090 NVFP4 snapshot. That's autotune running once per unique GEMM shape and is unavoidable on the current FlashInfer wheel. Subsequent boots can still take that long because per-shape tactic selection isn't yet cached on sm_120; that's gated on upstream FlashInfer work and not something this release can fix. Keep the server running between requests.
Upgrading
update.batvenv\,models\,logs\,cuda13_shim\anduser_config.jsonare preserved. The bundled wheel is unchanged from v1.3.7, so the runtime install is not rerun.Verification
Launch the
rtx5090_nvfp4snapshot. If you previously hit the hours-longTuning fp4_gemmloop, the log should now show normal autotune progress and reachUvicorn running on http://0.0.0.0:5001within 10-20 minutes.Files
qwen3.6-windows-server-portable-x64-ampere.zipqwen3.6-windows-server-portable-x64-blackwell.zipSHA256SUMS.txt
Credits
Issue #18 reported and diagnosed by @hiraghi.
- v1.3.9qwen3.6-windows-server v1.3.9, portable Windows launcher2026-05-14 · 2026-05-14 15:23 UTC
查看更新说明
qwen3.6-windows-server v1.3.9
Bugfix release: a follow-up to the v1.3.8 fix for the LOADING-stuck dashboard. v1.3.8 added a 60-second grace before the runtime-manifest GC could fire, but a second deletion path in the manifest reader bypassed that grace and silently unlinked the file on any read error. Issue #12 reporter on Russian Windows 11 still hit it.
What changed
launcher/app/runtime.py:_read_manifestsno longer unlinks a manifest when the read fails. Read errors (Windows file-sharing race against the snapshot'sos.replacewrite, partial JSON read, transient OSError) are skipped and retried on the next 2-second poll. Snapshots clean up their own manifest on exit, and the launcher's Unload path clears it viaclear_manifest_for_port. The reader has no business deleting a file it failed to read this poll.- Diagnostic log file at
logs\launcher.diag.log. The Textual TUI takes over the terminal soprint()from the runtime poll is invisible in scrollback. Diagnostics now append to a file: manifest-read failures land here with the exception type, and the post-grace GC line lands here too. If the dashboard sticks again, a singletype logs\launcher.diag.logreproduces the full poll history.
Who is affected
- Anyone who hit the LOADING-stuck dashboard on v1.3.8 despite the 60-second grace. The new path is hardened against the read-error unlink and the diagnostic log makes future debugging a one-line paste.
Upgrading
update.batThe launcher zip is replaced;
venv\,models\,logs\,cuda13_shim\anduser_config.jsonare preserved. The bundled wheel is unchanged from v1.3.7, so the runtime install is not rerun.Verification
After upgrading, launch any snapshot from the TUI and let it sit through the full vLLM compile / autotune window. The card should progress LOADING -> RUNNING and
logs\runtime\<port>.jsonshould remain on disk for the whole session. If the card sticks on LOADING again, paste the contents oflogs\launcher.diag.login the issue.Files
qwen3.6-windows-server-portable-x64-ampere.zipqwen3.6-windows-server-portable-x64-blackwell.zipSHA256SUMS.txt
- v1.3.8qwen3.6-windows-server v1.3.8, portable Windows launcher2026-05-13 · 2026-05-13 21:46 UTC
查看更新说明
qwen3.6-windows-server v1.3.8
Bugfix release: the launcher TUI's dashboard could get stuck on
LOADINGwhile vLLM was actually up and serving requests, because the runtime-manifest GC was too aggressive during the snapshot's boot window.What changed
launcher/app/runtime.py:detect_runningno longer GC's a manifest younger than 60 seconds, even when both_port_listeningand_pid_alivemomentarily return False. Those signals can flap during vLLM's compile window (port bound but accept loop not yet running, slowtasklistreturns under load) and a single bad poll used to delete the manifest. Once deleted, the dashboard had no way to associate the running engine with its card, so the LOADING banner stuck forever.- Diagnostic log when GC fires. After the grace period, if both
signals still say the snapshot is gone, the reader now prints
[runtime] GC manifest <path> port=<port> wrapper_pid=<pid> port_up=<bool> wrapper_up=<bool>to the launcher's stdout before unlinking. If anyone hits this again, that line tells us which signal failed. windows_tools/wipe_caches.py: prints a clear "recovery tool, not pre-launch cleanup" banner up front before the cache scan, so users do not run it before every boot and trip the 11-25 min cold FlashInfer rebuild. Related: issue #15.
Who is affected
- All users who launch snapshots via the TUI on hosts where the
vLLM boot window is long enough for the polling loop to fire before
the engine accepts connections, that is, anyone on Blackwell NVFP4
(FlashInfer fp4_gemm autotune) and anyone with a long
torch.compilefirst-boot. Reported on Russian Windows 11 with the Ampere zip on issue #12. - Direct snapshot launches (
snapshots\start_*.bat) were unaffected, the bug was in the launcher reader only. If you have been working around the problem by running the bat directly, you can go back to using the TUI after this update.
Upgrading
update.batThe launcher zip is replaced;
venv\,models\,logs\,cuda13_shim\anduser_config.jsonare preserved. The bundled wheel is unchanged from v1.3.7, so the runtime install is not rerun.Verification
After upgrading, launch any snapshot from the TUI and let it sit through the full vLLM compile / autotune window. The card should progress LOADING -> RUNNING and
logs\runtime\<port>.jsonshould remain on disk for the whole session. If the card sticks on LOADING again, the launcher stdout will now contain a[runtime] GC manifest ...line, please paste it in a fresh issue.Files
qwen3.6-windows-server-portable-x64-ampere.zip(and the unsuffixed alias for legacy in-place updates from pre-v1.2.3 installs)qwen3.6-windows-server-portable-x64-blackwell.zipSHA256SUMS.txt
- v1.3.7qwen3.6-windows-server v1.3.7 — portable Windows launcher2026-05-12 · 2026-05-12 22:04 UTC
查看更新说明
qwen3.6-windows-server v1.3.7
Blackwell-only cleanup release. The two AutoRound INT4 snapshots for the RTX 5090 are gone; NVFP4 is now the sole 5090 path. Ampere/Ada (3090/4090) are unaffected, AutoRound stays the recommended quant there.
What changed
- Removed snapshots:
rtx5090(240k ctx, MTP n=6, AutoRound INT4) andrtx5090_max(280k ctx, MTP n=3, AutoRound INT4). The matchingsnapshots/start_5090.{py,bat}andsnapshots/start_5090_max.{py,bat}files are deleted. - Reason: on Blackwell sm_120 the AutoRound (Marlin INT4) FFN GEMMs
hit the ~170W prefill ceiling documented in
docs/SM120_GDN_CEILING.md, capping
prefill at ~1.1k tok/s. The NVFP4 path routes FFN/QKV/proj through
FlashInfer's native sm_120
fp4_gemmtensor cores and runs at full TDP: ~5,300-7,460 tok/s prefill, ~92 tok/s decode. The AutoRound configs booted and ran on the 5090, but the prefill cap made them too slow to keep shipping as user-facing options. - 5090 dashboard now exposes two cards:
rtx5090_nvfp4(200k ctx, MTP n=6, default) andrtx5090_nvfp4_vision(180k ctx, experimental, image/video input). Both use the Peutlefaire NVFP4 weights. - Compatibility matrix updated:
Blackwell sm_120 + Marlin AutoRound INT4is now flaggedwarnwith a note about the prefill ceiling. Added a separateBlackwell sm_120 + NVFP4row markedok. - Docs swept: README and 16 docs under
docs/updated so every forward-looking 5090 recommendation points at NVFP4. Historical AutoRound bench numbers retained in BLACKWELL.md, HARDWARE.md, and TUNING.md as reference, labeled "removed in v1.3.7" or "historical". - Boot-time clarification added to TROUBLESHOOTING.md, BLACKWELL.md,
and the
rtx5090_nvfp4notes: the FlashInfer fp4_gemm "Tuning" progress bars appear on every boot. First-ever boot takes ~9 min (JIT-compiles kernels + autotunes tactics). Every subsequent boot finishes in ~1-2 min because the compiled kernel binaries are cached under~/.cache/flashinfer/, only the tactic selection re-runs. This is expected, not a regression.
Who is affected
- 5090 users: if you had been booting
rtx5090orrtx5090_max, those cards are gone. Usertx5090_nvfp4(or_vision) instead. You will need the Peutlefaire NVFP4 weights on disk; setVLLM_NVFP4_MODEL_DIRif they're not at the default location (models/Qwen3.6-27B-NVFP4). See docs/MODELS.md for the download path. - 3090 / 4090 users: no behaviour change. AutoRound stays the
recommended quant on Ampere/Ada. Wheel is unchanged
(
vllm-0.19.0+devnen.3). - Wheels: Ampere stays on
vllm-0.19.0+devnen.3, Blackwell stays onvllm-0.20.0+cu132.devnen.2. Inference behaviour for surviving snapshots is identical to v1.3.6.
Upgrading
update.batThe launcher zip is replaced;
venv\,models\,logs\,cuda13_shim\anduser_config.jsonare preserved. The runtime install is not rerun because the bundled wheel did not change. If you created a custom snapshot namedstart_5090.pyorstart_5090_max.py, keep your local copy: the launcher reads anystart_*.pyinsnapshots/, the deletion only removes the in-zip files.Verification
After upgrading, the Blackwell zip's dashboard should show only two 5090 cards:
rtx5090_nvfp4andrtx5090_nvfp4_vision. Launchingrtx5090_nvfp4should boot in ~1-2 min on a host that has booted NVFP4 before (kernel binaries cached), ~9 min the first time. AfterApplication startup complete,python windows_tools\bench.pyshould report ~92 tok/s steady decode at ~580W.Files
qwen3.6-windows-server-portable-x64-ampere.zip(and the unsuffixed alias for legacy in-place updates from pre-v1.2.3 installs)qwen3.6-windows-server-portable-x64-blackwell.zipSHA256SUMS.txt
- Removed snapshots:
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
qwen3.6-windows-server
One-click Qwen3.6-27B inference on Windows. Unzip, double-click, you're serving on
http://127.0.0.1:5001/v1. No WSL, no Docker, no conda, no pip, no admin. Everything runs on your machine. No telemetry. No analytics. No phone-home.
What this is
A small portable Windows app that gives you an OpenAI-compatible API
serving Qwen3.6-27B locally, with config presets that I actually
measured myself. The launcher is a Textual TUI: arrow keys, Enter
to start a snapshot, Esc to stop. Press e to add, edit, duplicate, or
delete your own snapshot configs from inside the TUI, no hand-editing
files. That's the whole UX.
It is the matching launcher for the devnen/vllm-windows
patched wheel, but you don't need to know or care about that. The wheel
ships inside the launcher zip.
What you get
On a single RTX 3090 (24 GB), running Lorbus AutoRound INT4:
Every snapshot below has the tool-calling fix baked in (PR #35687 + #40861 + qwen3.5-enhanced.jinja + preserve_thinking=false), so any one of them works with any OpenAI-compatible client, Claude Code, Cline, Cursor, Codex, OpenCode, KiloCode, LM Studio, etc. Just point it at the listed port.
| Snapshot | Decode tok/s | Prompt class | Context | Use it when |
|---|---|---|---|---|
start_72tps | ~72 | short (~200 tok) | 32 k | Short-prompt / chat baseline. MTP n=3. |
start_speed | 64.5 | long (100 KB) | 90 k | Default for long prompts. MTP n=6, see note below. |
start_127k | 53.4 | long (100 KB) | 127 k | Maximum context on a single 3090. |
start_mtp4 | 58.3 | long (100 KB) | 120 k | Mid-balance speed vs context. |
start_pp2_160k (2 GPU) | 43.5 | long (100 KB) | 160 k | Pipeline-parallel for the largest contexts. |
start_gpu0_50k | 56.9 | mixed | 9–50 k | Single-GPU + display, fallback when you can't boot-quiet. |
GPU index note.
start_72tps,start_speed,start_127k, andstart_mtp4pin to GPU 1 so GPU 0 stays free for the desktop compositor and other apps on a 2× 3090 box. On a single-GPU host the snapshot detects that vianvidia-smiand falls back to GPU 0 with a warning.start_pp2_160krequires two GPUs.
Single 3090 with display attached. You can run the full
start_speedsnapshot at 90 k context if you close heavy GPU apps (Chrome, Discord, Slack, video playback) during boot. Once vLLM has reserved its KV pool, the driver schedules everything else around what vLLM already owns, so you can reopen those apps and they'll behave normally. The danger is reopening them before boot finishes, mid-allocation OOM is what kills runs. If you can't or won't boot-quiet,start_gpu0_50kis the conservative fallback (mem_util 0.92, ~50 k ctx, same decode tok/s).
Long-prompt rows were measured on a ~100 KB / ~24 k-token Python
source-summary prompt fed to windows_tools\bench_summarize.py. From
v1.3.3 the shipped fixture is CPython 3.12's Lib/inspect.py
(~130 KB, ~25 k tokens, PSF-licensed) so anyone can reproduce these
numbers from a clean install, windows_tools/bench_prompt_sample.py
is the file. The short-prompt row was measured on a ~200-token chat
turn via windows_tools\bench.py. All numbers
coherence-validated, TPS without coherence is a
lie.
Why MTP n=6 on
start_speed? n=3 is the universal short-prompt sweet spot and ships asstart_72tps. On long, dense Python source the acceptance curve shifts later, n=6 won my coherence sweep (n=3 / 4 / 5 / 6 / 7 / 8 → 53.4 / 58.3 / 62.8 / 64.5 / 61.5 / 58.0 tok/s; full sweep indocs/TUNING.md). Always re-sweep on a representative prompt for your workload.
Honest framing: these are not r/LocalLLaMA records. Community has hit 80–82 tok/s on a 3090 with TurboQuant 3-bit KV, and 160 tok/s on a 5090. The unique angle here is native Windows, no WSL. Same recipe, no virtualization tax, one community member measured the same hardware going from 85 tok/s in WSL to 160 tok/s in native Ubuntu (reported here). This launcher closes that gap on Windows.
Community Linux / Blackwell validation
An independent Linux run on an RTX PRO 5000 Blackwell 48 GB card validated the same Qwen3.6-27B NVFP4 direction at 256K context with vLLM 0.20.2, FlashInfer 0.6.8.post1, ModelOpt NVFP4 weights, fp8_e4m3 KV cache, chunked prefill, and MTP.
Highlights from that reproduction:
| Test | Result |
|---|---|
| 47K health check | 46,855 prompt tokens, 4/4 needles, roughly 5,800 tok/s estimated prefill |
| 200K target | 197,391 prompt tokens, 4/4 needles |
| 256K stretch | 252,510 prompt tokens, 4/4 needles after raising output budget |
| NVFP4 path | FlashInferCutlassNvFp4LinearKernel + Triton/FLA GDN prefill + FlashInfer attention |
| MTP n=3 | 87.8% acceptance, 97.8 tok/s engine decode |
| MTP n=6 | 78.2% acceptance, 120.9 tok/s engine decode |
This is not a Windows launcher snapshot and it does not replace the
3090 numbers above. It is a Linux/Blackwell validation showing that the
NVFP4 + fp8 KV path can run 200K-256K practical needle tests on a single
48 GB Blackwell workstation GPU without OOM. Full report and raw data:
docs/pro5000-linux-nvfp4/.
Why this exists
Most fast Qwen3.6-27B recipes on r/LocalLLaMA assume Linux + Docker, or Linux-in-WSL. Windows users either pay the WSL tax, dual-boot, or skip inference entirely. None of those is great if your daily driver is Windows.
This launcher is the third option:
- Native Windows. Runs as a normal Windows process. No virtualization layer.
- Portable. Unzip the launcher, drop your model into a folder, double-click. That's it.
- Validated. Every config in here was measured against a coherence battery before being checked in. No copy-pasted Reddit recipes that look fast but emit
* * * *. - Local-only. No outbound calls except when you explicitly ask the launcher to download a model from HuggingFace. No telemetry of any kind, ever.
Install
TL;DR for CI / agents / scripted installs, one line, no TUI:
start.bat --auto-download --snapshot start_72tps
That installs the runtime, downloads the model if missing, and starts
serving on http://127.0.0.1:5001/v1. See
Headless / scripted install below for
all the flags.
Hand the install to a coding agent, copy/paste prompt at
docs/AGENT_INSTALL_PROMPT.md. Edit the
one INSTALL_DIR line, paste into Claude Code / Cursor / Codex CLI /
any agent with shell access, and it does the download + extract +
runtime install + model fetch + smoke test end-to-end while you do
something else.
Interactive path:
-
Download the right zip for your GPU from the latest Release:
qwen3.6-windows-server-portable-x64-ampere.zipfor 30-series / 40-series (Ampere, Ada).qwen3.6-windows-server-portable-x64-blackwell.zipfor 50-series (Blackwell).
Extract anywhere (no admin needed).
-
Double-click
start.bat. The first run does two one-time steps, then drops you in the TUI:- Runtime install (~5–15 min, several GB). The bundled vLLM
wheel + ~150 transitive deps (torch, CUDA wheels, transformers,
etc.) install into the embedded Python's
site-packages. A marker file is written so subsequent launches skip this entirely. - Model setup. Looks for
Qwen3.6-27B-int4-AutoRoundweights on your fixed drives (scans<drive>:\,_models\,models\,AI\,AI\models\,huggingface\,huggingface\hub\,models\Lorbus\). If it doesn't find them, offers to auto-download from Hugging Face (~16 GB, public, no token) or accepts a path to weights you already have. If your weights live somewhere else, pass--model-dir <path>to skip the scan.
- Runtime install (~5–15 min, several GB). The bundled vLLM
wheel + ~150 transitive deps (torch, CUDA wheels, transformers,
etc.) install into the embedded Python's
-
Pick a snapshot, press Enter, you're serving on
http://127.0.0.1:5001/v1.
The portable zip ships with an embedded Python 3.12 runtime, the
patched vLLM wheel, the launcher TUI, a portable Windows Terminal,
and a vendored get-pip.py. No conda, no system-Python install, no
registry changes, no admin prompts. The runtime install on first run
is the only network-dependent step besides the model download.
Don't have the model yet? See docs/MTP_HEAD.md,
use the Lorbus AutoRound quant, the others won't draft.
Detailed install (including the wheel-only path for users who already
have their own venv): docs/INSTALL.md.
Optional: install MSVC 2022 for the small decode boost
The launcher works on a vanilla Windows install, no MSVC required. But if you install Visual Studio 2022 Build Tools (free, no full IDE) with the "Desktop development with C++" workload, the snapshots auto-detect it and turn on vLLM's flashinfer sampler path, which JIT-compiles a faster top-k / top-p kernel on first launch.
What it costs:
- ~7 GB download, one-time install.
- Extra 30 to 60 s on the first
profile_runof each new snapshot while the kernel compiles. Subsequent boots reuse the compiled cache.
What you get:
- A small but measurable decode boost on the sampler path.
Without MSVC, the snapshots transparently fall back to the PyTorch
sampler, which never JIT-compiles anything. Boot is faster and the
server is reliable; you just leave a few percent of decode tok/s on
the table. The launcher prints a one-line [info] at startup telling
you which path it picked.
Get the Build Tools installer here (official Microsoft aka.ms
shortlink, pinned to VS 2022 / 17.x so it stays on the right product
even after VS 2026 ships):
https://aka.ms/vs/17/release/vs_buildtools.exe
ninja (the other half of the JIT toolchain) ships inside the launcher zip, you don't need to install it separately.
Test it
Once the server is up:
curl http://127.0.0.1:5001/v1/chat/completions ^
-H "Content-Type: application/json" ^
-d "{\"model\":\"any\",\"messages\":[{\"role\":\"user\",\"content\":\"Capital of France?\"}],\"max_tokens\":2000}"
Note the "model": "any", the patched wheel accepts any value. You
don't have to know what the model is called.
Why
max_tokens: 2000? Qwen3.6 is a thinking model: it spends the first chunk of its budget reasoning inside<think>...</think>and only then writes the answer tocontent. Withmax_tokens: 50the entire budget gets eaten by the thinking phase and you'll seecontent: nullplusfinish_reason: "length", the server is fine, the budget was just too small. 1500–2000 is a safe floor for short Q&A.
Where's the answer in the response? The final answer lands in
choices[0].message.content. The chain-of-thought lands in a separatechoices[0].message.reasoningfield, that's the--reasoning-parser=qwen3wheel patch doing its job, not a bug. Most chat clients showcontentand ignorereasoning; if yours doesn't, point it atcontent.
If the request hangs, tail
logs\vllm_server.<port>.logfor vLLM's own stdout, the parent launcher logs only the boot banner; the serving process tees its progress to that file.
Headless / scripted install
End-to-end automated install (no TUI, no prompts), useful for CI, remote machines, agent installers, or just keeping a repeatable recipe:
start.bat --auto-download --snapshot start_72tps
The launcher runs the first-run setup (vLLM wheel + ~150 deps), auto-downloads the Lorbus quant from Hugging Face if it's missing, applies the tokenizer patch automatically, and execs the chosen snapshot, all without opening the TUI. Other useful flags:
start.bat --model-dir D:\models\Qwen3.6-27B-int4-AutoRound --snapshot start_speed
start.bat --headless :: skip TUI, run the default snapshot (start_72tps)
start.bat --setup-only :: install runtime + model, then exit (no serving)
--headless without --snapshot now runs the default snapshot
(start_72tps) instead of exiting after setup checks. To run only
the setup checks (the old --headless behavior), pass --setup-only.
The launcher also stays in the parent terminal, instead of detaching
into a new Windows Terminal window, when it sees any of WT_SESSION,
VLLM_NO_WT, CI, GITHUB_ACTIONS, MSYSTEM, or TERM in the
environment. That covers GitHub Actions, git-bash, MSYS, agent
runners, and anything that exports TERM. So your captured stdout
won't go missing.
For benchmark numbers like the table above, use the bundled tools:
windows_tools\bench.bat :: short prompt, decode-only TPS
windows_tools\bench_summarize.bat :: ~100 KB / ~24 k-token prompt, prefill + decode + KV
windows_tools\check_coherence.bat :: 3-tier coherence validator
Hardware reality
Tuned and measured on:
- Windows 10 Enterprise 22H2
- 2× NVIDIA RTX 3090 (Ampere
sm_86), no NVLink, PCIe Gen 4 - 350 W power cap (250 W also benchmarked, see
docs/TUNING.md)
Should also work on any Ampere or Ada NVIDIA GPU running Windows 10/11,
3090, 4090, A6000, etc. Will not work on Pascal, Turing, Intel Arc,
or any AMD card. Single GPU with the display attached loses 1–3 GiB
of VRAM to the desktop compositor and another 2–5 GiB to running apps,
but you can still run the full start_speed snapshot at 90 k context
by closing heavy GPU apps (Chrome, Discord, Slack, video playback)
during boot, then reopening them after vLLM finishes booting. If you
can't boot-quiet, fall back to start_gpu0_50k. Either path is
covered in docs/WINDOWS_VRAM_HEADLESS.md.
RTX 50-series (Blackwell, 5060 / 5070 / 5080 / 5090): supported via the Blackwell zip. Download
qwen3.6-windows-server-portable-x64-blackwell.zipinstead of the default zip. It bundlesvllm-0.20.0+cu132.devnen.2against CUDA 13.2 / PyTorch cu130 withsm_120kernels. v1.3.0 ships NVFP4 as the new default (rtx5090_nvfp4, port 5001) using thePeutlefaire/Qwen3.6-27B-NVFP4weights. These route FFN GEMMs through FlashInfer's sm_120 native FP4 tensor cores, escaping the 170W prefill ceiling that AutoRound INT4 hits on consumer Blackwell. Measured on a single RTX 5090 at 575W: ~5,300 tok/s prefill @ 47k prompt (5x AutoRound), ~92 tok/s decode at 200k context. A second snapshotrtx5090_nvfp4_vision(180k ctx) ships as experimental for image and video input. As of v1.3.7, NVFP4 is the only supported 5090 path; the AutoRound INT4 5090 snapshots have been removed since they cannot escape the 170W ceiling on consumer Blackwell. NVIDIA driver 596+ required. Seedocs/BLACKWELL.mdfor the full story anddocs/SM120_GDN_CEILING.mdfor the prefill-ceiling investigation.
If you're on a 4090, expect slightly higher numbers than mine. If you're on something more exotic, nothing here is going to work without your own tuning, that's fine, please share what you find.
Scope. This launcher serves Qwen3.6-27B specifically through a fixed set of validated snapshots. It is not a general vLLM server you can point at any model. Adding configs for smaller Qwen variants is straightforward (see
docs/SNAPSHOTS.md); running unrelated models like ACE-Step, Stable Diffusion, or other diffusion / multimodal stacks is out of scope.
The local-AI ethos
Everything runs on your machine. No telemetry. No analytics. No
phone-home. No cloud inference. No model weights downloaded behind your
back. The launcher never opens an outbound connection except when you
explicitly ask it to (downloading a model from HuggingFace via your own
browser/huggingface-cli). This is in the spirit of
r/LocalLLaMA: your hardware,
your weights, your prompts, your business.
The launcher and every script are Apache-2.0. The bundled wheel inherits upstream vLLM's Apache-2.0 license. SHA256 of every release asset is published next to the release, verify before extracting.
What's under the hood
The wheel that powers this launcher is
devnen/vllm-windows: a
patched native-Windows build of vLLM,
with three Windows-specific fixes (CPU-relay for Gloo collectives, Qwen3
reasoning-parser fix mirrored from PR #35687, hardwired wildcard model
name). The full diff is at
CHANGES_VS_SYSTEMPANIC.md
in that repo. You don't have to download it separately, it's bundled
inside this launcher's portable zip.
Documentation
docs/INSTALL.md, full install + the bring-your-own-venv path.docs/UPGRADING.md, in-place updater (update.bat), preserve list, variant switching.docs/BLACKWELL.md, single landing page for RTX 50-series users.docs/MODELS.md, swapping in other quants / model sizes / Qwen variants.docs/CLAUDE_CODE.md, point Claude Code at the local server (native/v1/messages, no proxy).docs/CODEX.md, use OpenAI Codex CLI with this server (Responses API,developer-role template fix).docs/OPENCODE.md, point OpenCode at the local server (custom OpenAI-compatible provider, AGENTS.md path-handling rule).docs/QWEN_CLI.md, use Alibaba's official Qwen Code agent against this server.docs/PI.md, use the Pi coding agent with this server (custom provider extension, auto-compaction notes).docs/UNINSTALL.md, clean removal (it's portable, so just delete folders).docs/HARDWARE.md, what works, what doesn't, and why.docs/COMPARISON.md, how this stacks up against Ollama, LM Studio, llama.cpp, Docker, and WSL2.docs/COHERENCE.md, degenerate-output guide and the 3-tier validator.docs/TROUBLESHOOTING.md, every failure mode I've hit.docs/TUNING.md, the lever set, anti-levers, how to sweep your own configs.docs/MTP_HEAD.md, why Lorbus AutoRound is the only INT4 quant that works (the NVFP4 weights ship a separate MTP head and are documented indocs/BLACKWELL.mdanddocs/SM120_GDN_CEILING.md).docs/SPEC_DECODE_MATRIX.md, what spec-decode + parallelism combos work.docs/SNAPSHOTS.md, managing snapshots from inside the TUI: keyboard shortcuts, the CRUD editor, flag invariants, hand-edit fallback.docs/WINDOWS_VRAM_HEADLESS.md, free VRAM on Windows for single-GPU.docs/HALLUCINATED_FLAGS.md, flags from web search results that don't exist on this wheel.docs/CREDITS.md, vLLM team, SystemPanic, Lorbus, the community.
Contributing
Bug reports welcome, please include GPU model, driver version, Windows
build, and the relevant slice of logs\vllm_server.<port>.log. The
issue template walks you
through it.
Share your configs. Each snapshot in snapshots/ is just a
validated set of vLLM flags for one hardware/model combo, plus a card
in launcher/configs.yaml so the launcher can list it. If you've got
a config that runs coherent and faster (or with more context) than
what's in here, please send a PR. The bar is the
3-tier coherence check, TPS without coherence
won't be merged.
Configs I'd love to see:
- Other Qwen3.6-27B quants (FP8, additional NVFP4 variants, smaller AutoRound variants)
- Smaller Qwen models (14B, 8B, 4B) for 16 GB cards
- 4090 / 5090 / 5060 Ti / A6000 tunings
- New parallelism or KV-cache combos as vLLM adds them
How to add a snapshot: docs/SNAPSHOTS.md (in-TUI editor and hand-edit fallback).
This project is intentionally narrow scope: Windows + Ampere/Ada/Blackwell NVIDIA. PRs for other operating systems or GPU vendors are politely out of scope, please go upstream.
Credits
- vLLM, the engine.
- SystemPanic/vllm-windows, the upstream Windows wheel build infrastructure.
- Lorbus, the AutoRound INT4 quant of Qwen3.6-27B that makes the Ampere/Ada path fast.
- Peutlefaire, the NVFP4 quant that unlocks consumer Blackwell's full prefill throughput on the 5090.
- r/LocalLLaMA, the configs in here started from recipes posted on the subreddit, and got refined by the honest feedback in the comments.