GGUF conversion of DSpark speculative-decoding draft model for llama.cpp.
This is a DSPARK draft model, not a standalone language model.
It must be used together with a compatible Qwen3.6-35B-A3B target model.
Model
Base model: Koopah/Qwen3.6-35B-A3B-NVFP4-DSPARK
Target model: Qwen/Qwen3.6-35B-A3B
Format: GGUF
Quantization: BF16
Status
Support for DSpark-format speculators is being added to llama.cpp in
ggml-org/llama.cpp#26275.
Until merged, use a build compiled from the PR branch.
Compatibility
Component
Requirement
Target architecture
Qwen3.6 35B A3B
Recommended target
Qwen/Qwen3.6-35B-A3B or a compatible GGUF quantization
Draft format
DSpark
Runtime
llama.cpp with PR #26275 or later merged support
Standalone use
No
The target model and speculator must use compatible tokenizer, vocabulary and
architecture metadata. A mismatch can cause loading errors or incorrect output.
Qwen3.6-35B-A3B Speculative Decoding Benchmark
This repository contains benchmark results for speculative decoding on Qwen3.6-35B-A3B, comparing:
No speculative decoding
DSpark with n_max = 2
DSpark with n_max = 3
DSpark with n_max = 5
DFlash with n_max = 7
The benchmark covers code generation, structured output, reasoning, factual QA, translation, creative writing, and repetitive low-entropy output.
These results are specific to the tested model, quantization, llama.cpp branch/build, hardware configuration, and benchmark prompts.
Acceptance rate alone is not sufficient to predict throughput; draft cost, accepted depth, and the number of speculative rounds also matter.
Summary
Recommended settings For Consumer GPU
Workload
Recommended setting
Code generation and completion
DFlash max 7
JSON and structured output
DFlash max 7
Repetitive or low-entropy output
DFlash max 7
Step-by-step math and constrained reasoning
DFlash max 7
General DSpark preset
DSpark max 3
Translation and creative writing
No speculative decoding
Long free-form explanation
No speculative decoding
Main findings
DFlash max 7 is the strongest overall speculative-decoding configuration.
DSpark max 5 is slower than the no-speculation baseline over the full benchmark.
Between DSpark max 2 and max 3, max 3 is the better default for code and structured tasks.
DSpark max 2 reduces some of the slowdown on explanation, translation, and long code review, but those workloads are still generally faster without speculative decoding.
Fixed long draft lengths work very well on predictable output, but waste substantial computation on high-entropy text.
Overall comparison
Aggregate wall-clock results
Mode
Predicted tokens
Draft tokens
Accepted draft tokens
Aggregate acceptance
Wall time
Effective throughput
No MTP
1890
0
0
N/A
16.69 s
113.2 tok/s
DSpark max 2
1892
1768
990
56.00%
17.43 s
108.5 tok/s
DSpark max 3
1889
2303
1102
47.85%
17.30 s
109.2 tok/s
DSpark max 5
1885
3287
1209
36.78%
18.39 s
102.5 tok/s
DFlash max 7
1885
3243
1405
43.32%
14.08 s
133.9 tok/s
Effective throughput is calculated as:
total predicted tokens / total wall-clock time
Relative to no speculative decoding
Mode
Relative performance
No MTP
1.00x
DSpark max 2
0.96x
DSpark max 3
0.96x
DSpark max 5
0.91x
DFlash max 7
1.18x
DFlash max 7 completes the benchmark approximately:
18% faster than the no-speculation baseline
31% faster than DSpark max 5
DSpark max 2 vs max 3
Per-task throughput
Task
DSpark max 2
DSpark max 3
Better
code_python
138.0
148.8
max 3
code_cpp
133.6
150.8
max 3
explain_concept
105.3
90.0
max 2
summarize
114.8
120.9
max 3
qa_factual
122.4
126.3
max 3
translation
89.0
82.6
max 2
creative_short
85.3
90.5
max 3
stepwise_math
129.5
133.0
max 3
json_output
155.3
164.3
max 3
long_reasoning
112.6
111.8
effectively tied
repeat_pattern
168.2
195.6
max 3
code_completion
140.6
154.5
max 3
long_code_review
101.8
90.7
max 2
Aggregate comparison
Metric
max 2
max 3
Total predicted tokens
1892
1889
Total draft tokens
1768
2303
Accepted draft tokens
990
1102
Aggregate acceptance
56.00%
47.85%
Wall time
17.43 s
17.30 s
Effective throughput
108.5 tok/s
109.2 tok/s
The aggregate difference is very small:
max 3 is only about 0.6% faster overall
max 3 produces 535 more draft tokens
max 3 accepts 112 more draft tokens
This means the third draft position is close to the overall break-even point.
Recommendation
Use:
--spec-draft-n-max 3
as the default DSpark setting when the workload is mainly:
source code
code completion
JSON
structured output
repetitive output
constrained reasoning
Use max 2 only when reducing the penalty on less predictable natural-language output is more important.
However, translation, creative writing, and long free-form explanations are still usually better with speculative decoding disabled.
DSpark max 5 vs DFlash max 7
Per-task throughput
Task
No MTP
DSpark max 5
DFlash max 7
code_python
128.8
133.0
206.1
code_cpp
129.6
172.5
229.5
explain_concept
129.6
82.5
98.5
summarize
128.6
113.9
147.9
qa_factual
129.1
112.2
146.3
translation
126.3
71.1
68.8
creative_short
128.7
70.5
73.7
stepwise_math
130.9
131.4
184.3
json_output
129.5
175.7
237.4
long_reasoning
127.4
113.2
173.2
repeat_pattern
129.3
239.9
300.9
code_completion
125.3
178.8
275.9
long_code_review
126.5
82.3
96.8
Acceptance comparison
Task
DSpark max 5
DFlash max 7
code_python
45.1%
65.3%
code_cpp
64.6%
71.4%
explain_concept
17.9%
19.9%
summarize
32.6%
36.7%
qa_factual
30.7%
36.9%
translation
14.0%
11.4%
creative_short
10.9%
11.4%
stepwise_math
41.2%
53.8%
json_output
64.2%
73.7%
long_reasoning
31.4%
45.0%
repeat_pattern
92.3%
97.1%
code_completion
65.2%
94.3%
long_code_review
17.8%
20.3%
DFlash generates slightly fewer total draft tokens than DSpark max 5, while accepting substantially more:
Metric
DSpark max 5
DFlash max 7
Total draft tokens
3287
3243
Accepted draft tokens
1209
1405
Aggregate acceptance
36.78%
43.32%
Wall time
18.39 s
14.08 s
This suggests that DFlash is not winning by brute-force drafting. Its proposals are better aligned with the target model, resulting in:
deeper accepted runs
fewer speculative rounds
fewer wasted proposals
better utilization of longer draft sequences
Workload analysis
Code and structured output
DFlash max 7 is clearly the strongest configuration.
Task
DFlash speedup vs baseline
code_python
1.60x
code_cpp
1.77x
json_output
1.83x
code_completion
2.20x
repeat_pattern
2.33x
stepwise_math
1.41x
These tasks are predictable enough for long speculative runs to be accepted frequently.
In particular:
code_completion reaches 94.3% acceptance
repeat_pattern reaches 97.1% acceptance
json_output reaches 73.7% acceptance
This is the ideal operating region for speculative decoding.
Factual QA and reasoning
DFlash remains useful on several medium-entropy tasks:
Task
Baseline
DFlash max 7
Speedup
summarize
128.6
147.9
1.15x
qa_factual
129.1
146.3
1.13x
long_reasoning
127.4
173.2
1.36x
DSpark max 5 does not reach the same break-even point on these workloads.
Translation and creative writing
Both DSpark and DFlash perform poorly here.
Task
Baseline
DSpark max 5
DFlash max 7
translation
126.3
71.1
68.8
creative_short
128.7
70.5
73.7
Acceptance falls to approximately 11-14%, so most later draft positions are wasted.
For these workloads, use:
No speculative decoding
Explanation and long code review
Long explanatory text and code-review prose also remain difficult:
Task
Baseline
DFlash max 7
explain_concept
129.6
98.5
long_code_review
126.5
96.8
Although the subject may be technical, the output itself is less constrained than code completion. The next token distribution remains too broad for a fixed seven-token draft chain to be consistently useful.
Why aggregate acceptance rate is not enough
A single aggregate acceptance percentage hides positional behavior.
For example, two configurations may have similar aggregate acceptance while behaving very differently:
one may frequently accept three or four tokens per round
another may accept only the first token in many rounds
one may perform fewer total speculative rounds
another may repeatedly compute later draft positions that are rejected
The most useful additional metric would be positional acceptance:
P1, P2, P3, P4, P5, P6, P7
This would expose the acceptance-decay knee directly.
Expected behavior from these results:
DFlash likely maintains stronger acceptance at later positions on code and JSON.
DSpark likely decays earlier, especially after the second or third position.
Translation and creative writing likely collapse immediately after the first position.
Dynamic confidence truncation
A fixed n_max applies the same draft depth to every speculative round, regardless of task entropy.
A better implementation would stop draft generation dynamically when confidence becomes too low: