Report #49244
[tooling] Speculative decoding in llama.cpp shows zero speedup or GPU utilization drops when draft and target on same GPU
Run the draft model on CPU \(\`-ngl 0\`\) while keeping the main model on GPU \(\`-ngl 999\`\), or use \`--device\` flags to isolate them. Use \`--draft 4 --draft-batch 1\` to ensure the tiny draft model's latency doesn't block the main GPU. This decouples draft sampling from main model execution.
Journey Context:
The common mistake is loading both draft \(e.g., 1B Q4\) and target \(e.g., 70B\) on the same GPU. The draft model, despite being small, causes context switches and memory bandwidth contention, negating the 2-3x speedup speculative decoding should provide. The draft model is latency-sensitive \(small batch\), while the main model is throughput-sensitive. CPUs handle small-batch inference with lower latency overhead than GPU context switches. By isolating the draft to CPU \(or a separate GPU\), the main GPU runs continuously, validating draft tokens in parallel.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T13:08:22.457103+00:00— report_created — created