There’s some growing excitement around MTP with llama.cpp (this PR): llama + spec: MTP Support by am17an · Pull Request #22673 · ggml-org/llama.cpp · GitHub
I decided to give it a try on my Spark, using the Q4_K_M quant of Unsloth’s MTP version: unsloth/Qwen3.6-27B-MTP-GGUF · Hugging Face
I tried 4, 5, and 6 draft tokens. The results for 5 are below-- it seemed to give the best performance across concurrencies 1-4
llama-benchy Results
┏━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Test ┃ c ┃ pp t/s ┃ tg t/s ┃ TTFT (ms) ┃ Total (ms) ┃ Tokens ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ pp2048 tg128 @ d0 │ c1 │ 719 │ 28.3 │ 2,723 │ 7,031 │ 2048+128 │
│ pp2048 tg128 @ d0 │ c2 │ 614 │ 25.9 │ 5,777 │ 14,849 │ 2048+128 │
│ pp2048 tg128 @ d0 │ c4 │ 643 │ 29.9 │ 11,376 │ 26,996 │ 2048+128 │
│ pp2048 tg128 @ d4096 │ c1 │ 660 │ 27.6 │ 8,161 │ 12,588 │ 2048+128 │
│ pp2048 tg128 @ d4096 │ c2 │ 604 │ 31.6 │ 17,405 │ 25,147 │ 2048+128 │
│ pp2048 tg128 @ d4096 │ c4 │ 569 │ 31.1 │ 36,838 │ 52,118 │ 2048+128 │
│ pp2048 tg128 @ d8192 │ c1 │ 635 │ 29.0 │ 13,838 │ 18,039 │ 2048+128 │
│ pp2048 tg128 @ d8192 │ c2 │ 578 │ 26.5 │ 30,210 │ 39,216 │ 2048+128 │
│ pp2048 tg128 @ d8192 │ c4 │ 432 │ 26.9 │ 80,560 │ 98,285 │ 2048+128 │
└────────────────────────┴───────┴────────────┴────────────┴────────────┴────────────┴────────────┘
Build config:
cmake -B build -DGGML_NATIVE=ON -DGGML_CUDA=ON -DGGML_CURL=ON -DCMAKE_CUDA_ARCHITECTURES=121a-real -DGGML_CUDA_FA=ON -DGGML_CUDA_FA_ALL_QUANTS=ON -DGGML_CUDA_FORCE_MMQ=ON -DGGML_CPU_KLEIDIAI=ON
Command:
export CUDA_SCALE_LAUNCH_QUEUES=4x
export GGML_CUDA_GRAPH_OPT=1
export GGML_CUDA_FORCE_CUBLAS_COMPUTE_16F=1
./build/bin/llama-server \
--hf-repo unsloth/Qwen3.6-27B-MTP-GGUF:Q4_K_M \
--host 0.0.0.0 \
--port 8000 \
--alias qwen3.6-27b \
--parallel 8 \
--threads 10 \
--threads-batch 10 \
--threads-http 8 \
--prio 3 \
--poll 100 \
--direct-io \
--metrics \
--ctx-size 262144 \
--batch-size 32768 \
--ubatch-size 4096 \
--cache-ram 65536 \
--kv-unified \
-ctk f16 -ctv f16 \
--cache-reuse 1024 \
--ctx-checkpoints 128 \
--no-mmap \
--mlock \
--temp 0.6 \
--top-p 0.95 \
--top-k 20 \
--min-p 0.05 \
--repeat-penalty 1.05 \
--presence-penalty 0.00 \
--flash-attn on \
--chat-template-kwargs '{"preserve_thinking": true}' \
--chat-template-file ./froggeric.jinja \
--spec-type draft-mtp \
--spec-draft-n-max 5 \
--spec-draft-p-min 0.75