llama.cpp quantizations of z-lab/Qwen3.6-35B-A3B-DFlash, the block-diffusion drafter for DFlash speculative decoding. Pair it with Qwen/Qwen3.6-35B (or a quant of it).
Thinking footgun: the Qwen3.6 chat template enables <think>…</think> by default. That collapses DFlash acceptance because the drafter wasn't trained on the think-wrapped distribution. Pass --chat-template-kwargs '{"enable_thinking": false}' to disable it (≈1.8× throughput uplift).
Short-context code prompts do not exercise the sliding-window attention (most queries fall inside the 2048-token window anyway), so the 3.6 drafter's architectural change doesn't produce a dramatic win on this benchmark. The SWA infrastructure is expected to matter on longer-context workloads (> 2 k generated tokens). On short code, Q8_0 on 3.6 is ≈1.3× the throughput of Q4_K_M on 3.5 because the 3.6 target pairs slightly better with the retrained drafter.
Quantization details
Source: z-lab/Qwen3.6-35B-A3B-DFlash (BF16 safetensors, 0.5 B parameters)
Converter: convert_hf_to_gguf.py from spiritbuun/buun-llama-cpp — emits qwen35.attention.sliding_window + qwen35.attention.sliding_window_pattern so the runtime builds per-layer SWA masks
Reproducing the conversion
Tokenizer heads-up: the upstream z-lab/Qwen3.6-35B-A3B-DFlash repo ships only config.json, model.safetensors, and a README — no tokenizer files. The drafter shares the target model's tokenizer. Copy the Qwen3.6 tokenizer files into the drafter directory first.
bash
1# 1. Pull the DFlash drafter weights2hf download z-lab/Qwen3.6-35B-A3B-DFlash --local-dir ./dflash-drafter-3.6
34# 2. Pull tokenizer files from the target model into the same directory5hf download Qwen/Qwen3.6-35B-A3B-DFlash \6 tokenizer.json tokenizer_config.json vocab.json merges.txt \7 special_tokens_map.json \8 --local-dir ./dflash-drafter-3.6
910# 3. Convert to GGUF (F16 first, then quantize)11python convert_hf_to_gguf.py ./dflash-drafter-3.6 \12 --outtype f16 \13 --outfile dflash-draft-3.6-f16.gguf
1415# 4. Quantize16./build/bin/llama-quantize dflash-draft-3.6-f16.gguf dflash-draft-3.6-q8_0.gguf Q8_0
17./build/bin/llama-quantize dflash-draft-3.6-f16.gguf dflash-draft-3.6-q4_k_m.gguf Q4_K_M
Required files in ./dflash-drafter-3.6/ before step 3:
DFlash is a speculative decoding method that uses a lightweight block diffusion model to draft multiple tokens in parallel. This is the drafter model, which must be paired with Qwen/Qwen3.6-35B-A3B.
DFlash Architecture
Quick Start
Installation
vLLM (We temporarily modify the installation through this PR to support interleaved SWA and ensure correct handling of target hidden states for optimal performance):
Tip: For long-context or agentic workloads, add --speculative-dflash-draft-window-size WINDOW_SIZE to enable sliding-window attention for the drafter.
Usage
python
1from openai import OpenAI
23client = OpenAI(base_url="http://localhost:30000/v1", api_key="EMPTY")45response = client.chat.completions.create(6 model="Qwen/Qwen3.6-35B-A3B",7 messages=[{"role":"user","content":"Write a quicksort in Python."}],8 max_tokens=4096,9 temperature=0.010)11print(response.choices[0].message.content)
Benchmark Results
Setup: Single NVIDIA B200, SGLang, thinking enabled, max output length 4096. We report end-to-end throughput, including prefill time. See our GitHub repository for reproduction scripts.
Throughput and Speedup
DFlash achieves up to 2.9x speedup at concurrency 1.
Tokens/sec (speedup vs. autoregressive baseline)
Block Size = 16
Task
Concurrency
AR
DFlash
Math500
1
234
682 (2.9x)
8
1266
3138 (2.5x)
16
1954
4813 (2.5x)
32
2755
6520 (2.4x)
GSM8K
1
235
556 (2.4x)
8
1236
2564 (2.1x)
16
1886
3821 (2.0x)
32
2699
5239 (1.9x)
HumanEval
1
238
603 (2.5x)
8
1255
2800 (2.2x)
16
1944
4208 (2.2x)
32
2767
5782 (2.1x)
MBPP
1
235
559 (2.4x)
8
1224
2538 (2.1x)
16
1948
3816 (2.0x)
32
2780
5378 (1.9x)
MT-Bench
1
233
442 (1.9x)
8
1238
2028 (1.6x)
16
1885
2997 (1.6x)
32
2633
4034 (1.5x)
Alpaca
1
235
393 (1.7x)
8
1221
1782 (1.5x)
16
1844
2567 (1.4x)
32
2579
3689 (1.4x)
Block Size = 8
Task
Concurrency
AR
DFlash
Math500
1
234
617 (2.6x)
8
1266
2839 (2.2x)
16
1954
4465 (2.3x)
32
2755
6614 (2.4x)
GSM8K
1
235
540 (2.3x)
8
1236
2466 (2.0x)
16
1886
3899 (2.1x)
32
2699
5713 (2.1x)
HumanEval
1
238
561 (2.4x)
8
1255
2655 (2.1x)
16
1944
4135 (2.1x)
32
2767
6059 (2.2x)
MBPP
1
235
497 (2.1x)
8
1224
2324 (1.9x)
16
1948
3636 (1.9x)
32
2780
4884 (1.8x)
MT-Bench
1
233
438 (1.9x)
8
1238
2060 (1.7x)
16
1885
3182 (1.7x)
32
2633
4720 (1.8x)
Alpaca
1
235
407 (1.7x)
8
1221
1880 (1.5x)
16
1844
2903 (1.6x)
32
2579
4115 (1.6x)
Acceptance Length
Task
B8
B16
Math500
5.56
7.35
GSM8K
5.21
6.73
HumanEval
5.09
6.44
MBPP
4.78
5.83
MT-Bench
4.20
5.14
Alpaca
3.94
4.62
Acknowledgements
Special thanks to David Wang for his outstanding engineering support on this project. We are also grateful to Modal, InnoMatrix, and Yotta Labs for providing the compute resources used to train this draft model.
Citation
If you find DFlash useful, please cite our work. To share feedback on DFlash or request new model support, please fill out this form: DFlash Feedback.
bibtex
1@article{chen2026dflash,
2 title = {{DFlash: Block Diffusion for Flash Speculative Decoding}},
3 author = {Chen, Jian and Liang, Yesheng and Liu, Zhijian},
4 journal = {arXiv preprint arXiv:2602.06036},
5 year = {2026}
6}