Qwen 3.6 27B running at 46 tok/s on an RX 9070 XT (llama.cpp + MTP Speculative Decoding is basically magic)
Qwen 3.6 27B running at 46 tok/s on an RX 9070 XT (llama.cpp + MTP Speculative Decoding is basically magic)
Just got my hands on a new AMD Radeon RX 9070 XT (16GB) and wanted to share some inference numbers. I've been messing around with llama.cpp via their official ROCm Docker image, testing out Qwen 3.6 27B (Omnimerge-v4) in IQ3_M.
Honestly, the performance you can squeeze out of a 27B model on a 16GB consumer card right now is blowing my mind.
Here’s the breakdown: The Setup
- GPU: AMD Radeon RX 9070 XT (RDNA4 / gfx1201) - 16 GB VRAM
- CPU: AMD Ryzen 9 9950X3D
- OS/Backend: Linux via Docker using ghcr.io/ggml-org/llama.cpp:server-rocm. (Props to the devs, it natively supports RDNA4 gfx1201 out of the box!)
- Model: Qwen3.6-27B-Omnimerge-v4-IQ3_M.gguf (~13 GB)
- Context: 16k
Tweaks:
- Set -np 1 since I'm just running it as a single-user chatbot in Open WebUI.
- Slapped on 8-bit KV cache (--cache-type-k q8_0 --cache-type-v q8_0) to save about 50% VRAM.
- Enabled MTP Speculative Decoding (--spec-type draft-mtp).
The Numbers (512-token test)
- Prompt Processing (TTFT): 549.27 tok/s (1220 tokens evaluated in ~2.2s). Latency: 1.82 ms/token.
- Text Gen: 46.06 tok/s (512 tokens generated in ~11.1s). Latency: 21.71 ms/token.
- MTP Stats: Draft acceptance rate was super high at 62.7% (333 drafts accepted / 531 generated). Aggregate speed (including prompt eval) hit roughly 48.97 tok/s.
Memory Footprint
- VRAM: Sitting at 14.46 GB out of 16 GB. This leaves about 1.5 GB of breathing room, which has been totally stable with zero OOM crashes so far.
- System RAM: ~4.3 GB (mostly the host-side prompt cache helping speed up subsequent turns).
RDNA4 is ready: The latest ROCm images and llama.cpp HIP libs support the 9070 XT natively. Didn't even need to mess with HSA_OVERRIDE_GFX_VERSION.
KV Cache quantization is required: Pushing the KV cache to q8_0 is the only reason a 16k context window fits on a 16GB card alongside a 27B model.
If anyone with a 16GB card is looking for the sweet spot, this has to be one of the best price-to-performance setups available right now. Let me know if you want my docker-compose.yml or run scripts...
Edit: To see how much MTP actually helps, I ran the exact same 512-token prompt test with speculative decoding toggled off:
Standard Inference (No Speculation):
- Speed: 25.88 tokens/sec (Latency: 38.64 ms/token)
- Prompt Eval: 239.46 tokens/sec
MTP Speculative Decoding (MTP):
- Speed: 46.06 tokens/sec (Latency: 21.71 ms/token)
- Prompt Eval: 549.27 tokens/sec
- Draft Acceptance Rate: 62.7%
For more info, here are my logs