If you already followed
Windows 11 hosts — Qwen3.8-27B
you are done with the hard part. Docker Desktop is installed. The 18 GB
model is on disk. The server answers at http://127.0.0.1:8000/v1.
This is the next image, not a new kit.
The kits were devised and end-to-end tested by Ian Hudson (aitesthive.com) on 18 August. The 19 August overlay is the same digest, same checkpoint, three extra patches, and prefix cache on for real sessions.
Cookbook:
- Windows standalone guide
- Qwen3.8 vLLM XPU recipe
- Model: SergiioB/Qwen3.8-27B-GPTQ-Int4-sym-G128-MTP-BF16
What you get
| 18 August kit | 19 August image | |
|---|---|---|
| Model files | already on disk | reuse them |
| Display-safe VRAM | 0.75 + 4.25 GiB fp8 KV, 100K | unchanged |
| Draft | BF16 MTP head as stored | same files; draft requantized to INT4 at start |
| Prefix cache | off | on (chat, tools, system prompt) |
| Linux C1 p512/g128 n=5 | 81.20 matched BF16-draft arm (83.7 on the published BF16 row) | 112.65 draft-INT4, cache off |
Do not copy 112.65 onto a Windows table. Ian’s Docker number was ~70
tok/s on the 18 August BF16-draft kit (self-report, one machine). Re-run
.\Test-CookbookDecode.ps1 after the rebuild if you want a Windows
number.
Prefix cache does not make the first unique prompt faster. It is for the turns after that. Leave it on for Open WebUI, Pi, anything with a system prompt. Turn it off only for a cold unique-prompt decode test.
Docker Desktop — the actual steps
Work in the kit folder. If you cloned the cookbook that is
windows/Qwen38-Docker-Standalone/. If you unzipped Ian’s zip, pull or
copy the updated scripts into that folder first.
Set-ExecutionPolicy -Scope Process Bypass
.\Upgrade-Qwen38-Docker.ps1
That is the whole upgrade:
- Builds
qwen38-b70-docker:2026.08.19(five hash-checked patches). - Deletes the old
qwen38-b70-docker-testcontainer. - Starts a new one with draft-INT4 on and prefix cache on.
- Leaves
.\models\Qwen3.8-27B-GPTQ-Int4alone.
Restarting the 18 August container is not an upgrade. Docker keeps the old entrypoint until you recreate.
Manual equivalent:
.\Build-Qwen38Image-Docker.ps1
.\Start-Qwen38-Docker.ps1 -Recreate
Confirm the overlay actually ran:
docker logs qwen38-b70-docker-test | findstr /C:"draft-INT4"
You want:
[start] draft-INT4 S+M1 overlay ENABLED
Cold decode test (prefix cache off, matches the Linux speed card):
.\Start-Qwen38-Docker.ps1 -Recreate -PrefixCache 0
.\Test-CookbookDecode.ps1
Then put prefix cache back on for daily use:
.\Start-Qwen38-Docker.ps1 -Recreate
Back to the 18 August draft (same model files):
.\Start-Qwen38-Docker.ps1 -Recreate -DraftInt4 0
Endpoint is still http://127.0.0.1:8000/v1, model name qwen38.
WSLC — only if that is the kit you run
WSLC stays the experimental path (~26 tok/s on 18 August). Same overlay, same recreate idea:
Set-ExecutionPolicy -Scope Process Bypass
.\Upgrade-Qwen38-WSLC.ps1
Confirm with wslc logs qwen38-b70-friendly. This overlay does not fix
the WSLC slowdown.
Fresh machine (no 18 August kit)
Install Docker Desktop with the Linux/WSL 2 engine, then:
Set-ExecutionPolicy -Scope Process Bypass
.\Setup-Qwen38-Docker.ps1
Setup now builds 2026.08.19. You still wait through the first model download (~18.2 GiB) and the tea-length load from the Windows bind mount.
What not to change
- Do not raise
GPU_MEMORY_UTILIZATIONabove 0.75 or drop the 4.25 GiB KV pin on a display-attached B70. Ian already measured the failure: auto-sized KV ate the desktop and decode fell to ~26 tok/s. - Do not publish 112.65 as a Windows result.
- Do not overwrite the Linux BF16-draft LocalMaxxing row (83.7). Draft-INT4 is a second row.
Sampling follows the checkpoint (--generation-config auto): thinking
1.0 / 0.95 / 20; non-thinking 0.7 / 0.80 / 20 with presence penalty 1.5.
That is what Qwen documents, not greedy.