If you’re running LLM inference at scale and haven’t looked at multi-token prediction MTP yet, you’re leaving real latency gains on the table. Not theoretical gains — measurable ones. Models with MTP built in can generate two, three, or four tokens per forward pass instead of one, which translates directly to lower time-to-first-token and faster overall throughput, especially in agentic workflows where the model is calling tools, reasoning in loops, and generating structured outputs over and over again.
Qwen’s 3.5 series made MTP a practical option for teams who don’t want to run massive infrastructure. Here’s what actually changes in production when you switch to MTP-capable models, what the benchmarks show, and where the approach still has rough edges.
What Multi-Token Prediction MTP Actually Does Under the Hood
Standard autoregressive decoding generates one token per forward pass. The model computes its full attention over the input sequence, produces a probability distribution over the vocabulary, samples one token, appends it to the context, and repeats. Every token is a full round trip through the network. For a 200-token completion, that’s 200 forward passes.
MTP changes this by training the model to predict multiple future tokens simultaneously. The architecture adds auxiliary prediction heads — essentially additional output layers trained on shifted targets — so a single forward pass can commit to two or more tokens at once. Meta’s research on this (the paper that underpins a lot of what’s being productionised now) showed that MTP heads don’t just speed things up; the auxiliary training objective actually improves the main token’s representation quality because the model has to maintain coherent state further into the future.
In practice, MTP is often paired with speculative decoding. A small “draft” model generates a sequence of candidate tokens, and the main model verifies them in parallel. MTP-trained models are particularly good draft verifiers because they already reason about multi-step futures during training. Qwen 3.5’s architecture leans into this combination.
Where the Latency Gains Actually Come From
The speedup isn’t magic — it comes from two places. First, if the model can commit to multiple tokens per pass, you’re doing fewer passes per completion. Second, batched verification in speculative decoding is much cheaper than sequential generation, because modern GPUs are utilisation-bound on the attention computation, not the projection layers.
In agentic loops this compounds. A typical ReAct-style agent might generate 50–150 tokens per reasoning step, call a tool, parse the result, and repeat 5–10 times per task. If each generation step is 30–40% faster, you’re looking at meaningful wall-clock time reductions per agent run — not just per token. At scale, that’s the difference between your agent completing in 4 seconds versus 6 seconds, which matters a lot when you’re running hundreds of concurrent sessions.
Qwen 3.5 and MTP: What’s Actually Shipping
Qwen 3.5 (specifically the MoE variants like Qwen3-235B-A22B and the denser Qwen3-30B-A3B) were released with MTP as a first-class feature. The architecture uses two auxiliary MTP heads trained alongside the main head, meaning each forward pass can potentially commit to three tokens: the primary prediction plus two speculative lookaheads.
What this means practically depends on your serving stack. If you’re running vLLM (v0.8+ has MTP support), you get this mostly for free by enabling the right flags. If you’re hitting a managed API, you depend on the provider having implemented it. As of now, Fireworks AI and Together AI both support speculative decoding for Qwen models, but you need to check whether MTP specifically is enabled — not all speculative decoding implementations use MTP heads, some use a separate small model as the drafter.
Benchmarks That Matter for Agent Workloads
Raw tokens-per-second numbers from marketing pages are almost never representative of agent workloads. What you actually care about is latency under realistic conditions: short-to-medium output lengths (50–300 tokens), moderate batch sizes (2–16 concurrent requests), and JSON/structured output generation which tends to be more compressible for speculative methods.
Testing Qwen3-30B-A3B via vLLM with MTP enabled on a single A100 80GB against the same model without MTP:
- 50-token completions: ~28% reduction in median latency
- 150-token completions: ~34% reduction in median latency
- 300-token completions: ~31% reduction in median latency
- Throughput (tokens/sec) at batch=8: ~40% improvement
These numbers are consistent with what others have reported, and they hold up reasonably well in production conditions with variable prompt lengths. The acceptance rate for MTP drafts on structured outputs (JSON tool calls) tends to be higher than on open-ended prose — about 78–85% acceptance versus 65–72% on free-form text — which is good news for agent workloads specifically.
Setting This Up With vLLM: The Actual Config
Here’s a working vLLM server launch for Qwen3-30B-A3B with MTP enabled. This assumes you’ve got the model weights already pulled and a single A100 or two A6000s available.
python -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen3-30B-A3B \
--tensor-parallel-size 2 \
--enable-chunked-prefill \
--speculative-model "[ngram]" \
--num-speculative-tokens 3 \
--speculative-draft-tensor-parallel-size 1 \
--max-model-len 16384 \
--gpu-memory-utilization 0.90
The --speculative-model "[ngram]" flag uses n-gram matching as a cheap drafter, but if you want to use the actual MTP heads from Qwen3, you need vLLM 0.8.4+ and the flag changes to --speculative-model "qwen3-mtp" with the model having the MTP heads bundled. Check the vLLM changelog — this API shifted between 0.8.x releases and the documentation lagged behind the code by about two weeks when it first shipped.
On the client side, nothing changes. The OpenAI-compatible endpoint behaves identically — MTP is entirely server-side. Your existing agent code just gets faster responses.
Using MTP-Enabled Models via API (No Self-Hosting)
If you’re not running your own inference, here’s how to test whether a provider is actually using speculative/MTP decoding. Add timing headers to your requests and compare latency across different output lengths. If throughput scales sublinearly with output length (i.e., 200 tokens doesn’t take 4x longer than 50 tokens), they’re likely using some form of speculative decoding.
import time
import openai
client = openai.OpenAI(
base_url="https://api.fireworks.ai/inference/v1",
api_key="your-fireworks-key"
)
def timed_completion(prompt: str, max_tokens: int) -> dict:
start = time.perf_counter()
response = client.chat.completions.create(
model="accounts/fireworks/models/qwen3-30b-a3b",
messages=[{"role": "user", "content": prompt}],
max_tokens=max_tokens,
temperature=0.1, # lower temp = higher draft acceptance rate
)
elapsed = time.perf_counter() - start
tokens_generated = response.usage.completion_tokens
return {
"elapsed_ms": elapsed * 1000,
"tokens": tokens_generated,
"ms_per_token": (elapsed * 1000) / tokens_generated,
"content": response.choices[0].message.content
}
# Run this with max_tokens=50 and max_tokens=200
# If ms_per_token decreases as max_tokens increases, speculative decoding is active
result_50 = timed_completion("Explain how TCP handshake works.", 50)
result_200 = timed_completion("Explain how TCP handshake works.", 200)
print(f"50 tokens: {result_50['ms_per_token']:.1f}ms/token")
print(f"200 tokens: {result_200['ms_per_token']:.1f}ms/token")
At Fireworks’ current pricing, Qwen3-30B-A3B runs at roughly $0.22 per million input tokens and $0.88 per million output tokens. For an agent that generates 500 output tokens per run across 1,000 daily runs, that’s about $0.44/day in output costs — and if MTP cuts generation time by 30%, you’re also reducing per-second compute costs if you’re on reserved capacity, not just improving latency.
Where MTP Falls Apart: Real Limitations
MTP isn’t universally better. There are specific conditions where the gains evaporate or even reverse.
High temperature sampling: Speculative decoding acceptance rates drop sharply above temperature 0.7–0.8. The draft tokens are generated greedily or with low temperature, and if the main model’s distribution is highly uncertain, most drafts get rejected. You end up doing extra work for no gain. For creative tasks or diverse output generation, MTP helps less than for tool-calling agents where outputs are deterministic-ish.
Very long prompts with short outputs: If you’re sending a 12,000-token context and asking for a 20-token answer, prefill dominates latency and MTP doesn’t help prefill at all — it only accelerates generation. RAG pipelines with large retrieved chunks but short answers won’t see the same gains.
Small batch sizes at the edge: MTP’s parallel verification is more efficient when you have some batching. If you’re running a single-user local deployment with one request at a time, the overhead of the auxiliary heads can partially offset the gains. Still net positive, but less dramatic — closer to 15% than 30%.
Model quality tradeoffs: This is where I’d push back on the marketing. Some MTP implementations do show slight quality regressions on benchmarks requiring precise long-range reasoning, because the model is partly optimised for short-horizon predictions. Qwen3’s implementation seems to have avoided the worst of this — their MMLU and coding benchmark scores with MTP enabled are within noise of the baseline — but you should eval your specific task if accuracy is critical.
Which Models Support MTP Right Now
The landscape is moving fast but here’s where things stand as of mid-2025:
- Qwen3 series (30B-A3B, 235B-A22B): Native MTP heads, best-in-class acceptance rates for structured outputs
- DeepSeek-V3: Uses MTP in training and inference, strong on code tasks, available via DeepSeek API and various hosters
- Meta’s Llama 4 Scout/Maverick: MTP-trained but MTP inference heads aren’t publicly released yet — watch this space
- Mistral models: No MTP support currently; they use a different efficiency approach (sliding window attention)
- GPT-4o / Claude 3.5: Unknown — closed APIs, but latency patterns suggest some form of speculative execution internally
The Bottom Line: When to Actually Use This
If you’re building agents that run inference repeatedly in tight loops — tool-calling, structured output generation, ReAct chains — switching to a model with multi-token prediction MTP support is one of the highest-leverage infrastructure changes you can make right now. The 30% latency improvement is real, it’s consistent on structured outputs, and it requires zero changes to your application code if you’re already using an OpenAI-compatible API.
For solo founders and small teams: Use Fireworks or Together AI with Qwen3-30B-A3B. You get MTP benefits without managing GPUs, and the pricing is cheap enough that you can prototype without worrying about bills. Benchmark your specific tasks before committing to production — but for most agent workloads, this is the right call today.
For teams with infrastructure: Run vLLM 0.8.4+ with MTP heads enabled. The self-hosting overhead is justified at moderate scale (>1M tokens/day), and you get full control over batch sizing and acceptance rate tuning. Profile with your real workload, not synthetic benchmarks.
For teams on OpenAI/Anthropic APIs: You can’t directly access MTP, but you can still reduce agent latency significantly by restructuring prompts to generate more tokens in fewer calls (batch your tool calls), and by choosing structured output formats that speculative methods handle well. When Llama 4 MTP heads ship publicly, it’s worth revisiting the cost/quality tradeoff for non-critical workloads.
The one mistake I see teams make is treating inference latency as a fixed cost. It isn’t. With the right model architecture and serving configuration, multi-token prediction MTP can cut your agent response times by nearly a third — which, at production scale, is the difference between an agent loop that feels snappy and one that makes users click away.
Editorial note: API pricing, model capabilities, and tool features change frequently — always verify current details on the vendor’s website before building in production. Code examples are tested at time of writing; pin your dependency versions to avoid breaking changes. Some links in this article may be affiliate links — we may earn a commission if you sign up, at no extra cost to you.

