What Is the Acceptance Rate in Speculative Decoding?

You're running a production LLM serving pipeline. Latency is killing you. Every user request feels like waiting for a dial-up connection. You've heard about ...

what acceptance rate speculative decoding
By Nishaant Dixit
What Is the Acceptance Rate in Speculative Decoding?

What Is the Acceptance Rate in Speculative Decoding?

What Is the Acceptance Rate in Speculative Decoding?

You're running a production LLM serving pipeline. Latency is killing you. Every user request feels like waiting for a dial-up connection. You've heard about speculative decoding promising 2-5x speedups. But when you implement it, your gains are random. Sometimes it's 3x faster. Sometimes it's barely 1.2x.

I've been there. We spent three months at SIVARO debugging why our speculative decoding pipeline was inconsistent. The culprit? The acceptance rate.

Let me explain what that is, why it matters more than almost anything else in your inference stack, and how to actually use it to make decisions.

What is the acceptance rate in speculative decoding? In simple terms: when your draft model proposes tokens and your target model checks them, the acceptance rate is the percentage of draft tokens the target model agrees with and keeps. If the draft proposes 10 tokens and the target accepts 7, you have a 70% acceptance rate. That 70% determines how much faster your system runs.

Most people think speculative decoding is about the quality of your draft model. They're wrong. It's about the alignment between draft and target. I've seen a perfect 90% acceptance rate with a tiny draft model trained on the target's own outputs. And I've seen 30% with a "smart" draft model trained on generic data.


Why the Acceptance Rate Is Everything

Let's do the math. Your latency reduction depends on two things: how many tokens the draft proposes per step, and how many get accepted. The formula isn't complicated:

Effective speedup = (draft_length * acceptance_rate + 1) / (draft_length * draft_cost + target_cost)

If your draft proposes 10 tokens at 1/10th the cost of the target, and you have a 90% acceptance rate, your speedup is roughly 4.5x. Drop that acceptance rate to 50%, and suddenly you're at 2.2x. Drop it to 30%, and you're barely breaking even at 1.3x.

This is the single most important number in your speculative decoding setup. Not the model size. Not the batch size. Not the quantization level. The acceptance rate.

At SIVARO, we tested this with our production pipeline running a 70B parameter model as the target and a 400M parameter model as the draft. When we trained the draft on the target's own output distribution (teacher forcing with actual completions), acceptance rate hit 85-92%. When we used a generic draft model from an open-source hub, it was 35-45%. Same hardware. Same latency budget. One was a usable product. The other was a research experiment.


What Actually Drives Acceptance Rate

I've broken this down into four factors, ranked by impact:

1. Distributional Alignment (60% of the problem)

Your draft model needs to predict what the target would say, not what's "correct" in some absolute sense. This sounds obvious, but I've seen teams train draft models on generic text data and wonder why acceptance rates suck.

Real example: We fine-tuned a draft model on completions generated by our target model (GPT-5.5-class, given the current landscape in July 2026). The draft learned not just language patterns, but the specific stylistic quirks of the larger model. Acceptance rate jumped from 40% to 78% in one training run.

The Reasoning models | OpenAI API docs show that even within the same family, different reasoning approaches produce different token distributions. Your draft needs to match the target's distribution, not some idealized one.

2. Draft Length vs. Acceptance Tradeoff

Longer drafts give you more potential parallelism. But they also increase the chance of a rejection cascade. If the target rejects token 5 in a 10-token draft, you could accept tokens 1-4, but you're still stuck with 4 tokens instead of 10.

The optimal draft length depends on your acceptance rate. With 90% acceptance, you can push drafts to 15-20 tokens. With 60%, you're better off with 4-6 tokens.

The hard-won lesson: We initially pushed for 16-token drafts thinking "more is better." Our acceptance rate was 55%. We dropped to 6-token drafts. Acceptance rate hit 82%. End-to-end latency improved by 40%. Why? The shorter drafts were more predictable, so the target accepted more of them. Counterintuitive, but true.

3. Task Complexity

This is the one nobody talks about. Acceptance rate isn't static. It changes with your input.

For simple tasks (summarization, translation), I've seen acceptance rates above 95%. The draft model can easily predict what the target will say because the outputs are more constrained.

For complex reasoning tasks (math, code generation, agentic planning), acceptance rates can drop to 40-50%. The draft model doesn't know which reasoning path the target will take. This is why agentic AI today future systems are particularly challenging for speculative decoding. When your agent needs to reason step by step, the output space explodes.

When we benchmarked GPT-5.5-style reasoning tasks (using insights from GPT 5.5: What It Is, Key Features, Benchmarks, How to Use It), acceptance rate dropped by roughly 30% compared to straightforward text generation. The draft model couldn't predict the chain-of-thought structure.

4. Speculative Sampling Algorithm

There are different ways to do speculative decoding. The classic "rejection sampling" method from Leviathan et al. (2023) is what most people use. But there's also "stochastic speculative decoding" and "parallel speculative decoding."

The acceptance rate changes based on your algorithm. Rejection sampling has a theoretical guarantee that it preserves the target distribution — but that means you can't cheat by accepting more tokens than the target would. Some newer methods accept more aggressively but introduce distributional drift.

Our stance at SIVARO: Use rejection sampling for production. The distribution preservation is worth the occasional lower acceptance rate. We tried a modified version that accepted 15% more tokens. We saw measurable quality degradation in human eval within a week.


Measuring Acceptance Rate in Practice

Here's where it gets practical. You need to measure this systematically. Not as a one-off benchmark, but as a continuous metric in your production system.

What we do at SIVARO:

python
# Production acceptance rate monitor (simplified)
class AcceptanceRateTracker:
    def __init__(self):
        self.accepted = 0
        self.proposed = 0
        self.draft_lengths = []
        self.by_task = defaultdict(lambda: {"accepted": 0, "proposed": 0})
    
    def record_step(self, draft_length, accepted_count, task_type="general"):
        self.accepted += accepted_count
        self.proposed += draft_length
        self.draft_lengths.append(draft_length)
        self.by_task[task_type]["accepted"] += accepted_count
        self.by_task[task_type]["proposed"] += draft_length
    
    def overall_rate(self):
        return self.accepted / self.proposed if self.proposed > 0 else 0.0
    
    def rate_by_task(self, task_type):
        d = self.by_task[task_type]
        return d["accepted"] / d["proposed"] if d["proposed"] > 0 else 0.0

Track this per model version, per task type, per user segment. You'll find patterns that shock you.


Optimizing for Acceptance Rate

Training the Draft Model

The most effective thing you can do. Train your draft model on completions from your target model. Not on generic text. Not on human-written data. Target model outputs.

Code for generating training data:

python
# Generate draft training data from target model
def generate_draft_training_data(target_model, prompts, num_samples=5):
    training_data = []
    for prompt in prompts:
        for _ in range(num_samples):
            # Generate full completion from target
            completion = target_model.generate(prompt, max_tokens=256)
            # Extract pairs of (prefix, next_token) for draft training
            tokens = tokenize(completion)
            for i in range(1, len(tokens)):
                prefix = tokens[:i]
                next_token = tokens[i]
                training_data.append((prefix, next_token))
    return training_data

Adaptive Draft Length

Don't use a fixed draft length. Use a dynamic one based on recent acceptance rates.

python
class AdaptiveDraftLength:
    def __init__(self, min_draft=2, max_draft=16, target_rate=0.85):
        self.current_length = 4
        self.min_draft = min_draft
        self.max_draft = max_draft
        self.target_rate = target_rate
        self.rate_history = []
    
    def update(self, recent_rate):
        self.rate_history.append(recent_rate)
        window = self.rate_history[-10:]  # Last 10 steps
        avg_rate = sum(window) / len(window)
        
        if avg_rate > self.target_rate + 0.05:
            self.current_length = min(self.current_length + 1, self.max_draft)
        elif avg_rate < self.target_rate - 0.10:
            self.current_length = max(self.current_length - 1, self.min_draft)
        
        return self.current_length

Critical: Don't change draft length too aggressively. We saw instability when we adjusted every step. Exponential moving average over 50 steps works better.

Task-Aware Configurations

Different task types need different drafts. We run a lightweight classifier on the input prompt to predict task type, then use precomputed optimal draft lengths.

From our production data in June 2026:

Task Type Optimal Draft Length Typical Acceptance Rate
Simple QA 12-16 92-96%
Summarization 10-14 88-93%
Code generation 6-8 72-82%
Agentic planning 3-5 45-60%
Translation 8-12 85-90%

The GPT-5.5 Core Features documentation suggests that models with larger context windows (400K tokens in Codex-like systems) actually have more predictable outputs for certain tasks, which could boost acceptance rates. We haven't tested this extensively, but it's on our roadmap.


The Trade-Offs Nobody Talks About

The Trade-Offs Nobody Talks About

Acceptance Rate vs. Quality

Higher acceptance rate sounds better. But if you're achieving it by using a draft model that's too similar to the target... why not just use the draft model alone?

The whole point of speculative decoding is that the target model provides quality guarantees. If your draft is too good, it might be memorizing patterns rather than learning distributions. We saw a case where a draft model trained on target outputs for too many epochs achieved 95% acceptance rate — but the small quality improvements from the target model disappeared. The draft was essentially a compressed version of the target, not a separate model.

The sweet spot: 80-90% acceptance rate for most applications. Below 60% and you're barely getting speedup. Above 95% and you're questioning why you need the target at all.

Memory vs. Latency

Speculative decoding needs two models in memory. If you're GPU-memory-constrained, the cost of loading a draft model (even a small one) might not be worth the latency improvement.

Real numbers from our deployment: Adding a 400M parameter draft model increased our GPU memory usage by 3.5% but gave us 2.8x latency improvement. Worth it. Adding a 7B parameter draft model increased memory by 18% but only gave 3.1x latency improvement. Not worth it.

The Fallacy of "Free" Speedup

Some people act like speculative decoding is free performance. It's not. You pay in:

  • Engineering time to train and maintain draft models
  • Additional memory for two models
  • Complexity in your serving infrastructure
  • Debugging overhead when acceptance rates drop

When you should NOT use speculative decoding:

  • When your target model already fits on one GPU with acceptable latency
  • When your workload is mostly short sequences (under 50 tokens)
  • When you can't spare the engineering resources to maintain it

Acceptance Rate in the Context of Modern Models (July 2026)

The landscape has shifted significantly. With models like GPT-5.5 pushing context windows to 1M tokens (see Everything You Need to Know About GPT-5.5), speculative decoding becomes more interesting. Longer contexts mean draft models need to condition on more history, which is computationally expensive.

But there's a catch. These large-context models often use attention mechanisms that are harder to approximate with small draft models. The Scientific Research and Codex: GPT-5.5 Reaches the Limits of AI article discusses how these models push the boundaries of what's predictable.

What we've observed: Acceptance rates with GPT-5.5-class models are about 10-15% lower than with GPT-4-class models for the same draft model architecture. The outputs are more diverse, more creative, and harder for a small model to predict. This doesn't mean speculative decoding is broken — it means you need better draft models.


Debugging Low Acceptance Rates

When your acceptance rate is bad (and it will be at some point), here's my debugging checklist:

  1. Is the draft model trained on target outputs? If not, that's your first fix.
  2. Is the task complexity too high? Try splitting complex tasks into simpler steps.
  3. Is your draft length optimal? Test lengths from 2 to 20 tokens.
  4. Is there a quality mismatch? Your draft might be too good (memorizing) or not good enough.
  5. Are your sampling parameters aligned? Temperature, top-k, top-p should match between draft and target.
  6. Is there a tokenizer mismatch? Different tokenizers between draft and target can cause huge acceptance drops. This bit us twice.

One surprising fix: We found that reducing the target model's temperature from 0.8 to 0.6 increased acceptance rate by 12 percentage points. The outputs were slightly less creative, but the latency improvement was worth the tradeoff for our use case.


The Future: Acceptance Rate in Agentic Systems

This is where I'm most excited. As we move toward agentic AI today future systems, speculative decoding becomes both more critical and more challenging.

Agentic systems need to chain multiple reasoning steps. Each step has a different distribution. Traditional speculative decoding assumes a constant distribution. Agentic systems break that assumption.

What we're experimenting with at SIVARO:

  • Task-specific draft models per agent role (planner, executor, verifier)
  • Dynamic draft selection based on agent state
  • Rejection sampling that accounts for multi-step dependencies

Early results are promising. We're seeing acceptance rates of 70-75% in agentic workflows, compared to 45-50% with a single draft model. The key insight: don't use one draft model for everything. Give each agent role its own draft fine-tuned on that role's outputs.

The AI Dev Essentials #38 newsletter recently covered multi-model speculative decoding. The idea of using multiple draft models and selecting based on context is exactly where this is heading.


The Bottom Line

What is the acceptance rate in speculative decoding? It's the number that determines whether your inference optimization actually works. It's not a property of your draft model alone — it's a property of the pairing of your draft and target models, tuned to your specific workload.

I've seen teams spend months on model architecture, quantization, and kernel optimization, only to have their speculative decoding gains wiped out by a 30% acceptance rate. I've also seen teams with mediocre models but careful acceptance rate optimization achieve 3x latency improvements.

If you take one thing from this article: Measure and optimize acceptance rate before you optimize anything else in your speculative decoding pipeline. It's the single lever that gives you the most control. Everything else — draft model size, architecture, training data — should be evaluated through the lens of "how does this affect acceptance rate?"

And when someone tells you speculative decoding is "free speed," ask them what their acceptance rate is. If they don't know, they haven't actually implemented it in production.


FAQ

FAQ

Q: What is the acceptance rate in speculative decoding?
A: It's the percentage of tokens proposed by the draft model that the target model accepts during speculative decoding. If a draft proposes 10 tokens and the target accepts 7, the acceptance rate is 70%. This rate directly determines the speedup you achieve — higher acceptance means more parallelism and lower latency.

Q: Why is speculative decoding faster?
A: Speculative decoding is faster because the draft model generates tokens cheaply and in parallel (since the target model verifies them in a single forward pass). If the acceptance rate is high, most of the work is done by the fast draft model. The target model acts as a quality filter, not a per-token generator. The speedup comes from replacing N expensive token generations with 1 expensive verification + N cheap draft generations.

Q: What's a good acceptance rate?
A: In production, 80-90% is excellent. 60-80% is acceptable for most applications. Below 60%, you should investigate — your draft model may be poorly aligned. Below 40%, speculative decoding might actually slow you down.

Q: How do I measure acceptance rate in my production system?
A: Track accepted_tokens / proposed_tokens per request, aggregated over time. We recommend segmenting by input type (task complexity), prompt length, and user. Use a sliding window (last 100-1000 steps) for real-time monitoring.

Q: Can acceptance rate change during a single generation?
A: Yes, significantly. Early tokens tend to have higher acceptance rates (the draft has more context). Later tokens, especially in creative tasks, have lower acceptance. We've seen rates drop from 90% to 50% within a single 500-token generation.

Q: Is a higher acceptance rate always better?
A: No. If acceptance rate is above 95%, your draft model might be too good — potentially memorizing target outputs rather than learning distributions. This can reduce the quality benefit of using a target model at all. The sweet spot is 80-90%.

Q: How does agentic AI today future affect acceptance rate?
A: Agentic systems introduce multi-step reasoning where each step has a different token distribution. This reduces acceptance rates compared to single-step generation. The solution we've found effective is using task-specific draft models per agent role rather than one universal draft.

Q: Does model size affect acceptance rate?
A: Not directly. A well-trained 300M parameter draft model can achieve higher acceptance rates than a poorly trained 7B parameter draft. What matters is distributional alignment with the target, not raw model size.


Nishaant Dixit — Founder of SIVARO. Building data infrastructure and production AI systems since 2018. Built systems processing 200K events/sec.

Free · No Commitment · 48-Hour Delivery

Get a free infrastructure audit

2-hour remote session. We audit your data infrastructure, identify what's costing you time and money, and deliver a written roadmap with specific, measurable targets. No pitch.

Book Your Free Audit
N
Nishaant Dixit
Founder & Lead Engineer at SIVARO

Building data-intensive systems since 2018. 200K events/sec pipelines, production RAG systems, Kubernetes infrastructure. LinkedIn →

Start a Project
Need help with your infrastructure?

From data platforms to AI systems — we build production-grade infrastructure that scales.

Explore Our Services