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.

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
Open in Stack Lab

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.

Qwen3.6-35B-A3B decode on one R9700 without a draft
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

Calculator leftover VRAM after house 35B at 32K on one R9700
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.

Calculator leftover VRAM after house 35B at 262K on one R9700
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.

Calculator leftover after house 35B split across two R9700s at 32K
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.

    Stack Lab · amdai-bench · Benchmarks

  • 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.

    Quants · Q6 / Q5 / Q4 + Q3 estimate · Speed up llama.cpp

  • 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.

    MoE on Radeon · R9700 measured page · Calculator

Sources

Also: Speed up llama.cpp · Glossary · FAQ.

Next steps

Real pages on this site. We do not invent a next click.

Last updated

esc

Type to filter. Enter opens the first match. Full-text search lives on /search.