Cited llama.cpp flags · draft decode not measured on the local desktop
Speculative decoding on a Radeon GPU with llama.cpp
A draft model guesses the next tokens; the target accepts or rejects them. llama.cpp documents that path on the server README. AMDai has not measured a draft pair on the local desktop, so every speed-up cell stays not measured yet on the local desktop — run the Stack Lab speculative decoding A/B. House daily driver is Qwen3.6-35B-A3B UD-Q5_K_XL on llama.cpp Vulkan, one R9700, 262144 context, f16 KV — decode in the table, no draft. Hermes’s Flash path is Strata UD-Q6_K_XL with no MTP (cited pair ~32.6 tok/s versus llama.cpp ~16 tok/s at 262K on /models/flash). Draft / speculative models stay Q4 and up. UD-Q3_K_XL is a labeled estimate for the main file (Hugging Face listing for Qwen3.6-35B-A3B-UD-Q3_K_XL.gguf (16.8 GB)). Q1/Q2 stay off, including MTP heads. vLLM and other engines stay on /backends — we do not invent a speculative vLLM 35B number.
- Speed up llama.cpp
- llama.cpp
- Vulkan vs ROCm
- Backends
- Strata (no MTP)
- Flash
- MoE
- Dual / multi-GPU
- One vs split
- Long context
- Calculator
- Stack Lab
- amdai-bench
How we test — Measured cells cite official amdai-bench/run@1 cards. Estimates stay labeled. Q3 is estimate-only. Q1/Q2 stay off.
Daily driver · 35B llama.cpp · 262K
Minimum system RAM needed
42.9 GB
Measured · 42.9 GiB raw · 256K context
local-desktop-20261012-2314-35b-udq5kxl-1gpu-256k-llamacpp-f16
RAM needed at full context
42.9 GB
Measured · 42.9 GiB raw · 256K full context
local-desktop-20261012-2314-35b-udq5kxl-1gpu-256k-llamacpp-f16
Measured peak system RAM on the local desktop: 42.9 GB (Linux GiB labeled GB). Measured, pending re-verify after RAM fix.
Breakdown
- Offloaded weights ·
- 0 GiB
- Separable embed in RAM ·
- 0 GiB
- KV in RAM at selected ·
- 0 GiB
- KV in RAM at full context ·
- 0 GiB
- Runtime / backend ·
- 0.85 GiB
- OS / desktop baseline ·
- 8.00 GiB
- Headroom ·
- 16.0 GiB
If the app is not installed, packages are not published yet. There is no public download URL. Read the Stack Lab install notes . If Stack Lab is already running on this machine, open the local app .
What a draft does
The draft is a smaller same-family GGUF that runs ahead of the target. llama.cpp proposes draft tokens, then the target checks them in one forward pass. Accepted tokens are free decode; rejected tokens fall back to the target. Acceptance is a measured rate on your box, not a number we invent. A bad draft wastes VRAM and can lose. Size both files plus KV before you launch.
House context
the house default is Qwen3.6-35B-A3B Unsloth UD-Q5_K_XL, llama.cpp Vulkan, one R9700, 262144 context, f16 KV. That launch has no -md. Hermes’s Flash runs on Strata UD-Q6_K_XL with no MTP. Do not turn on a 2-bit / Q2-class MTP head to “make Flash faster.”
Daily-driver recipe: qwen36-35b.llamacpp-vulkan.262k · Flash: /models/flash · Strata (no MTP): /backends/strata.
llama.cpp flags
Cited from the llama.cpp server README. Vulkan first; HIP after rocminfo lists the gfx — Vulkan vs ROCm.
-
-md / --model-draft / --spec-draft-model
Path to the draft GGUF. Official llama.cpp server README. Unused unless you pass a file. Draft stays Q4 and up on this site.
llama.cpp server README — --spec-draft-model, -md, --model-draft
-
--spec-draft-n-max
How many tokens the draft may propose (default 3 on the README). Official docs say --draft-max / --draft-n were removed; use --spec-draft-n-max.
llama.cpp server README — --spec-draft-n-max (replaces removed --draft-max)
-
--spec-draft-n-min
Minimum draft tokens to use (default 0). Official docs say --draft-min was removed; use --spec-draft-n-min.
llama.cpp server README — --spec-draft-n-min (replaces removed --draft-min)
-
-ngld / --n-gpu-layers-draft / --spec-draft-ngl
How many draft layers sit in VRAM (exact count, auto, or all). Same idea as -ngl, for the draft. Leaving layers on the host is RAM offload — print both shopper RAM lines.
llama.cpp server README — --spec-draft-ngl, -ngld, --n-gpu-layers-draft
-
-devd / --device-draft / --spec-draft-device
Comma-separated devices for the draft (none = do not offload; default follows --device). We have not recorded a dual-R9700 pin. Do not invent one.
llama.cpp server README — --spec-draft-device, -devd, --device-draft
# Shape only — draft decode is not measured on the local desktop. Draft stays Q4+. # Pick a real Q4+ same-family draft from the model card. Do not invent a filename. ./build-vk/bin/llama-server \ -m ~/models/Qwen3.6-35B-A3B-UD-Q5_K_XL.gguf \ -md ~/models/draft-Q4_K_M.gguf \ --spec-draft-n-max 3 \ --spec-draft-n-min 0 \ -ngl 99 \ -ngld 99 \ -c 4096 \ --cache-type-k f16 \ --cache-type-v f16 \ --host 127.0.0.1 --port 8080
Shape only. The other knobs (-ngl, threads, batch, -fa, KV, split) live on /tuning.
Measured 35B — no draft
Official Qwen3.6-35B-A3B llama.cpp Vulkan cells from existing run cards. These launches have no -md. Draft-on cells stay unmeasured. UD-Q3_K_XL is a labeled estimate. Full matrix: /benchmarks.
| Quant | Kind | 4K decode | 32K decode | Note |
|---|---|---|---|---|
| Q6_K | Measured | 103.23 tok/s | 71.19 tok/s |
Official local desktop llama.cpp Vulkan, one R9700. No draft.
local-desktop-20261012-2355-35b-q6k-1gpu-4k-llamacpp-f16local-desktop-20261012-2356-35b-q6k-1gpu-32k-llamacpp-f16 |
| UD-Q5_K_XL | Measured | 102.39 tok/s | 90.52 tok/s |
Official local desktop llama.cpp Vulkan, one R9700. No draft.
local-desktop-20261012-2311-35b-udq5kxl-1gpu-4k-llamacpp-f16local-desktop-20261012-2312-35b-udq5kxl-1gpu-32k-llamacpp-f16 |
| Q5_K_M | Measured | 109.73 tok/s | 96.21 tok/s |
Official local desktop llama.cpp Vulkan, one R9700. No draft.
local-desktop-20261012-2327-35b-q5km-1gpu-4k-llamacpp-f16local-desktop-20261012-2327-35b-q5km-1gpu-32k-llamacpp-f16 |
| Q4_K_M | Measured | 117.69 tok/s | 101.88 tok/s |
Official local desktop llama.cpp Vulkan, one R9700. No draft.
local-desktop-20261012-2341-35b-q4km-1gpu-4k-llamacpp-f16local-desktop-20261012-2342-35b-q4km-1gpu-32k-llamacpp-f16 |
| UD-Q3_K_XL | Q3 estimate | not measured | not measured | Hugging Face listing for Qwen3.6-35B-A3B-UD-Q3_K_XL.gguf (16.8 GB). Q3 is a labeled estimate — not a local desktop run, not a draft. |
VRAM fit — main + leftover for a draft
Calculator estimate for Qwen3.6-35B-A3B on llama.cpp, f16 KV. Leftover is usable VRAM minus target total (weights + KV + overhead). It is not a measured draft file. A dense same-family 27B Q4_K_M is 15.7 GB of weights on the calculator — usually larger than leftover on one 32 GB card after the house 35B. Pick a real smaller Q4+ draft from the card, then size it. UD-Q3_K_XL is a labeled estimate.
One R9700 · 32K
| Quant | Weights | Total | Usable | Leftover for a draft |
|---|---|---|---|---|
| Q6_K Estimate | 26.7 GB | 28.2 GB | 32.0 GB | 3.77 GB leftover for a Q4+ draft (estimate) |
| Q5_K_M / UD-Q5_K_XL Estimate | 24.8 GB | 26.2 GB | 32.0 GB | 5.76 GB leftover for a Q4+ draft (estimate) |
| Q4_K_M Estimate | 19.8 GB | 21.2 GB | 32.0 GB | 10.8 GB leftover for a Q4+ draft (estimate) |
| UD-Q3_K_XL Q3 estimate | 15.6 GB | 17.0 GB | 32.0 GB | 15.0 GB leftover for a Q4+ draft (estimate) |
One R9700 · 262K
KV grows. Leftover shrinks. Size the window on /long-context.
| Quant | Total | Leftover for a draft |
|---|---|---|
| Q6_K | 32.7 GB of 32.0 GB | no leftover — a draft would offload (estimate) |
| Q5_K_M / UD-Q5_K_XL | 30.7 GB of 32.0 GB | 1.32 GB leftover for a Q4+ draft (estimate) |
| Q4_K_M | 25.6 GB of 32.0 GB | 6.40 GB leftover for a Q4+ draft (estimate) |
| UD-Q3_K_XL | 21.4 GB of 32.0 GB | 10.6 GB leftover for a Q4+ draft (estimate) |
When it helps — and when it does not
- Can help
- It can help when the draft agrees often: code, boilerplate, and repetitive prose. Same-family drafts only. Both files must fit, or the draft is the thing you are willing to spill. Measure acceptance with the Stack Lab speculative decoding A/B and an amdai-bench card.
- Often does not
- It often does not help on MoE A3B-class models that already decode fast on one R9700 — the house 35B is that class. Low acceptance burns draft VRAM for no tok/s. Dual-card split of a file that already fits one card is often slower at short context (measured split tax on /compare/one-vs-two-gpu). We do not invent a “draft on GPU 1, target on GPU 2” pin. Flash stays the Strata no-MTP path, not a draft-model try.
One vs two R9700s
Two cards are 64 GB of VRAM (2 × 32 GB). Leftover below is the calculator on a split
35B — not a measured draft-on-GPU-2 pin. Official --device-draft
exists; we have not recorded one. Split tax:
one vs two GPU
·
dual / multi-GPU.
| Quant | Total | Leftover (estimate) |
|---|---|---|
| Q6_K | 28.2 GB of 32.0 GB | 3.77 GB leftover for a Q4+ draft (estimate) |
| Q5_K_M / UD-Q5_K_XL | 26.2 GB of 32.0 GB | 5.76 GB leftover for a Q4+ draft (estimate) |
| Q4_K_M | 21.2 GB of 32.0 GB | 10.8 GB leftover for a Q4+ draft (estimate) |
| UD-Q3_K_XL | 17.0 GB of 32.0 GB | 15.0 GB leftover for a Q4+ draft (estimate) |
System RAM
When -ngl or -ngld leaves layers on the host, the spill is system RAM. Shopper lines stay Minimum system RAM needed and RAM needed at full context. House 35B UD-Q5_K_XL on one 32 GB R9700 does not offload. The 16 GB example below is house 35B Q4_K_M on an RX 7800 XT at 32K selected — estimate unless a measured card overlays the kit. A draft that does not fit leftover VRAM adds more host weight.
House 35B · in-VRAM on one R9700
Daily driver · 35B llama.cpp · 262K
Minimum system RAM needed
42.9 GB
Measured · 42.9 GiB raw · 256K context
local-desktop-20261012-2314-35b-udq5kxl-1gpu-256k-llamacpp-f16
RAM needed at full context
42.9 GB
Measured · 42.9 GiB raw · 256K full context
local-desktop-20261012-2314-35b-udq5kxl-1gpu-256k-llamacpp-f16
Measured peak system RAM on the local desktop: 42.9 GB (Linux GiB labeled GB). Measured, pending re-verify after RAM fix.
Breakdown
- Offloaded weights ·
- 0 GiB
- Separable embed in RAM ·
- 0 GiB
- KV in RAM at selected ·
- 0 GiB
- KV in RAM at full context ·
- 0 GiB
- Runtime / backend ·
- 0.85 GiB
- OS / desktop baseline ·
- 8.00 GiB
- Headroom ·
- 16.0 GiB
Offload example · 16 GB + 35B Q4
Minimum system RAM needed and RAM needed at full context. Estimate. A draft that misses leftover VRAM adds more host weight.
Minimum system RAM needed
32 GB kit
Estimate · 29.2 GiB raw · 32K context
RAM needed at full context
48 GB kit
Estimate · 33.6 GiB raw · 256K full context
Estimate. Offloaded weights + KV in RAM + runtime + OS/desktop + headroom, rounded up to a 32 GB DIMM kit.
Breakdown
- Offloaded weights ·
- 3.76 GiB
- Separable embed in RAM ·
- 0 GiB
- KV in RAM at selected ·
- 0.69 GiB
- KV in RAM at full context ·
- 5.06 GiB
- Runtime / backend ·
- 0.71 GiB
- OS / desktop baseline ·
- 8.00 GiB
- Headroom ·
- 16.0 GiB
FAQ
-
Did AMDai measure a draft speed-up on the R9700?
No. Draft decode and acceptance stay not measured yet on the local desktop — run the Stack Lab speculative decoding A/B. Baseline 35B decode (no draft) is the official local desktop llama.cpp Vulkan sweep in the table. Open the Stack Lab planner, then record an amdai-bench card.
-
Can the draft model be Q3?
Draft / speculative models stay Q4 and up. UD-Q3_K_XL may appear as a labeled estimate for the main 35B file (Hugging Face listing for Qwen3.6-35B-A3B-UD-Q3_K_XL.gguf (16.8 GB)). A Q3 draft is not a house pick. Q1/Q2 drafts stay off, including MTP heads.
-
Will a draft speed up the house 35B-A3B?
Maybe, maybe not. That file already decodes fast on one R9700 because only a 3B-class slice is active. A draft still costs VRAM and KV. We will not invent an accept-rate. Measure it on your box.
Sources
Also: Speed up llama.cpp · Glossary · FAQ.