← All posts

A tiny draft model made Q6_K about 35% faster

Speculative decoding with Qwen2.5-0.5B as the draft took Q6_K from 14.13 to 19.09 tok/s on my RTX 3080. Quality held. N-gram guessing did nothing, so it's dropped.

Round E04. Same setup as always: Qwen2.5-14B on one RTX 3080, running in llama.cpp.

First I wanted a cleaner quality check on Q6_K against full-size F16.

TestQ6_KF16
MMLU (500 questions)0.7720.770
GSM8K (32 problems)0.68750.6875
Speed14.13 tok/s1.98 tok/s

So Q6_K scores the same as F16 here and runs about 7× faster on this card. Good baseline.

Then I tried speculative decoding. To be clear, this isn't mine. It's a feature already built into llama.cpp. A small model (Qwen2.5-0.5B at Q8_0) guesses the next few tokens, and the big model checks them all in one pass. When the guesses are right you get several tokens for the price of one.

SetupSpeedGSM8K (32)
Q6_K alone14.13 tok/s0.6875
Q6_K + 0.5B draft19.09 tok/s0.71875

About 35% faster. The GSM8K bump is one problem out of 32, so I'm calling that the same, not better.

Why I care: more tokens per second from the same GPU means lower cost per token. This was measured on a regular gaming PC, so it's a real option for cheap serving today, no new hardware.

I also tried n-gram self-speculation, where it guesses from text already in the context instead of using a draft model. 13.72 tok/s, with only about 0 to 3% of guesses accepted. No gain, so it's dropped.

Questions or ideas? me@andrewroseit.com or @AndrewRoseIT.