AI学习吧
📍 源码七号站 源出四海 DSpark Deep Dive: How DeepSeek Squeezed an 85% Speedup Out of Inference Without Touching a Single Model Weight

DSpark Deep Dive: How DeepSeek Squeezed an 85% Speedup Out of Inference Without Touching a Single Model Weight

摘要:A comprehensive 13,000-word technical breakdown of DeepSeek's DSpark speculative decoding framework published in June 2026. Learn how semi-autoregressive drafting, confidence-scheduled verification, and online calibration combine to accelerate LLM inference by 60-85% with zero quality loss. Covers GPU memory bandwidth fundamentals, the draft model landscape (Eagle, MTP, DFlash), the Markov head architecture, hardware-aware scheduling, production deployment, and the inference economics shift.
字号 100%
行距 2.05
This article was written by Mo Xiao Yu @ Source Code Station No.7 (www.fuyuan7.com). Reprinting requires attribution.

Quick Summary

DeepSeek's DSpark, released in late June 2026, is not a new model. It is a speculative decoding framework that sits in front of DeepSeek V4 and changes how tokens get produced — and it delivers a documented 60% to 85% per-user speed improvement without retraining, without changing a single weight, and without any loss in output quality. If you deploy LLMs in production and haven't paid attention to speculative decoding yet, DSpark is the wake-up call. The paper comes from the DeepSeek team (with collaborators at Peking University — led by Xin Cheng (Peking University / DeepSeek), with Wenfeng Liang as senior author), and it builds on years of prior work in speculative decoding — Eagle, MTP, DFlash — while introducing key innovations in semi-autoregressive drafting, confidence-scheduled verification, and online calibration that make the whole system adaptive and production-ready.

The framework combines three innovations into one adaptive system: a semi-autoregressive draft architecture that blends parallel speed with sequential accuracy, a confidence-scheduled verifier that dynamically decides how many tokens to check based on real-time GPU load, and an online calibration loop that keeps the whole thing honest as workloads shift. The code is MIT-licensed, the training pipeline (DeepSpec) is fully open-sourced, and it works on models beyond DeepSeek's own — Qwen, Gemma, and others are supported. Throughput gains range from 51% to 400% depending on workload and hardware configuration.

If you just wanted the headline: DSpark makes LLMs faster at serving time, not at training time, and it does it with mathematical guarantees that the output distribution stays identical to the original model. It's the closest thing to a free lunch the inference world has seen in years.

Want the full breakdown, including all the architectural details, benchmark numbers, and a production deployment checklist? Keep reading.


The Memory Wall: Why Your GPU Spends Most of Its Life Waiting

Before we get anywhere near DSpark, we need to talk about something that sounds boring but is actually the entire reason speculative decoding exists: GPU memory bandwidth. If you understand nothing else about LLM inference optimization, understand this one fact — and I'll put it in bold because it genuinely changed how I think about GPU utilization:

A GPU can decode 10 tokens in roughly the same time it takes to decode 1 token.

That sounds like nonsense if you come from the world of CPU-bound computation, where doubling the work roughly doubles the time. But LLM inference doesn't live in that world. It lives in a world where the bottleneck isn't how fast you can multiply numbers — it's how fast you can move model weights from VRAM into the compute cores.

Let me unpack that.

Compute-Bound vs. Memory-Bound: The Two Regimes of GPU Work

Every GPU operation falls into one of two categories. Either the arithmetic itself is the slow part (compute-bound), or the data movement is the slow part (memory-bound). Training a large model with a big batch size tends to be compute-bound — you're doing so much math per byte of data that the GPU's tensor cores are saturated. But LLM inference, especially during the decode phase where you generate one token at a time, is overwhelmingly memory-bound.

Here's why. When you ask an LLM to generate the next token, the GPU has to:

  1. Load every single weight of the model from VRAM (HBM) into the streaming multiprocessors.
  2. Perform the matrix multiplications and attention computations.
  3. Output a single token.

For a model like DeepSeek V4 Pro with 1.6 trillion total parameters, even though only 49 billion are active per token (thanks to the Mixture-of-Experts architecture), that's still 49 billion parameters that need to be shuttled from memory to compute. And here's the kicker: the time spent loading those weights dwarfs the time spent doing the math.

This is why batching is so powerful for inference. If you've already loaded all the weights into the compute units for one token, loading them for a second token — or a tenth — costs almost nothing extra. The weights are already sitting in the cache. You might as well use them.

The table below lays out the rough ratio for a typical deployment:

Regime

Bottleneck

GPU Utilization

Typical Scenario

Optimization Strategy

Compute-Bound

FLOPS / Tensor Cores

80–98%

Training, large-batch prefill

Mixed precision, kernel fusion

Memory-Bound

HBM Bandwidth

20–50%

Small-batch decode, single-user inference

Batching, speculative decoding

This is the foundational insight that makes everything that follows possible. If decoding one token costs you (roughly) the same memory-transfer overhead as decoding ten, then every token you can batch together is a token you get almost for free. The question becomes: how do you batch tokens together when the LLM is supposed to generate them one at a time, each depending on the one before?

That's where speculative decoding enters the picture.

Continuous Batching: The Predecessor That Paved the Way

Before speculative decoding became the hot topic, the industry solved a related problem with continuous batching. In a serving system, requests arrive at different times, need different numbers of output tokens, and finish at unpredictable moments. Old-school static batching would group requests and wait for the slowest one to finish before moving on — wasting GPU cycles on idle slots.

Continuous batching, pioneered by serving frameworks like vLLM and now standard in production stacks, solves this by operating at the iteration level rather than the request level. When one request finishes, its slot is immediately filled by a new request. The GPU never waits.

But continuous batching only helps when you have multiple concurrent users. What about the single-user experience? If one person is chatting with the model, there's nobody else's tokens to batch with theirs. That's the gap speculative decoding fills — it manufactures batchable tokens out of thin air by guessing what the model would have said next anyway.

The Real Numbers: How Much Time Does Memory Transfer Actually Cost?

Let me ground this in concrete numbers, because abstractions about "memory bandwidth" can feel hand-wavy. Take a concrete GPU — say, an NVIDIA H200 with 141 GB of HBM3e running at roughly 4.8 TB/s of memory bandwidth. Deploy DeepSeek V4 Flash, which per published specifications (NVIDIA NGC model card, HuggingFace) has 284B total parameters with approximately 13B active per token (~13 GB in FP8). On every decode step, the GPU needs to read those 13 GB of active weights from HBM.

The math: 13 GB ÷ 4,800 GB/s ≈ 2.7 milliseconds just for weight loading. The actual matrix multiplications? Closer to 0.5 milliseconds. That's roughly a 5:1 ratio — the GPU spends over 80% of its decode time waiting for weights to arrive.

Now double the batch size to 2. The weight loading time stays roughly 2.7ms (the weights are loaded once, shared across the batch). The compute time might increase to 0.7ms. Total: 3.4ms for 2 tokens, or 1.7ms per token — nearly halving the per-token cost. This is the memory wall in action, and it's why batching is the single most important optimization in LLM serving.

This is the context you need to understand why DSpark matters. It's not just another optimization paper. It's the culmination of years of work on making LLM inference faster by attacking the memory wall from every angle at once.

Now let's look at how speculative decoding actually works — from first principles.


Speculative Decoding From First Principles

I'm going to walk through speculative decoding as if you've never heard of it before, because the mechanics matter. DSpark's innovations only make sense if you understand exactly what problem speculative decoding solves and where the existing solutions fall short.

The Autoregressive Bottleneck

Large language models generate text autoregressively. To produce token N+1, the model needs to see tokens 1 through N. This dependency chain means you cannot simply parallelize generation the way you parallelize training. Each forward pass through the model produces exactly one new token, and then you have to do it all over again.

The forward pass itself is expensive. For a 49-billion-active-parameter model running in FP8, you're looking at roughly 49 GB of weights that need to be read from HBM on every single decode step. If your GPU has 4.8 TB/s of memory bandwidth (like an H200), that's about 10 milliseconds spent just reading weights for each token. Generate 100 tokens and you've spent about 1 second doing nothing but shuttling data around.

The Speculative Decoding Solution

The core idea of speculative decoding, first formalized by Leviathan et al. in 2023 and independently by Chen et al. the same year, is beautifully simple:

  1. Draft: Use a small, fast model to guess the next K tokens.
  2. Verify: Feed all K guessed tokens into the big model in a single forward pass.
  3. Accept or Reject: Check which guesses were correct using rejection sampling, keep the correct prefix, and generate one corrected token at the first point of disagreement.

The magic is in step 3. Rejection sampling is designed so that the probability of accepting or rejecting each candidate token exactly matches the ratio between the draft model's probability and the target model's probability for that token. The mathematical guarantee: the output distribution is identical to what the large model would have produced on its own. There is zero quality degradation.

Here's the algorithm in pseudocode:

def speculative_decode(target_model, draft_model, prefix, K):
    # Step 1: Draft K tokens using the small model
    draft_tokens = []
    draft_probs = []
    current_prefix = prefix
    for _ in range(K):
        logits = draft_model.forward(current_prefix)
        token = sample(logits[-1])
        prob = softmax(logits[-1])[token]
        draft_tokens.append(token)
        draft_probs.append(prob)
        current_prefix = current_prefix + [token]

    # Step 2: Run the target model once on prefix + all draft tokens
    target_logits = target_model.forward(prefix + draft_tokens)

    # Step 3: Rejection sampling
    accepted_tokens = []
    for i in range(K):
        target_prob = softmax(target_logits[len(prefix) + i])[draft_tokens[i]]
        draft_prob = draft_probs[i]

        # Accept with probability min(1, target_prob / draft_prob)
        if random() < min(1.0, target_prob / draft_prob):
            accepted_tokens.append(draft_tokens[i])
        else:
            # Reject: sample from adjusted distribution
            adjusted_probs = max(0, target_probs - draft_probs)
            corrected_token = sample(normalize(adjusted_probs))
            accepted_tokens.append(corrected_token)
            break

    return prefix + accepted_tokens

The Economics of Guessing

The key metric that determines whether speculative decoding is worth it is the acceptance rate — what fraction of drafted tokens survive verification. If you draft 10 tokens and 8 get accepted, you've generated 8 tokens for the cost of 1 draft-model run (cheap) + 1 target-model run (expensive). Without speculative decoding, generating 8 tokens would have cost 8 target-model runs. That's roughly an 8x speedup on the target model.

But if you draft 10 tokens and only 2 get accepted, you've paid for 1 draft run + 1 target run and only gotten 2 tokens of progress. That's barely any better than just running the target model directly — and possibly worse if the draft model is slow.

The paper formalizes this with a simple formula:

Cost per token = (Draft Cost + Verification Cost) / τ

Where τ (tau) is the average number of accepted tokens per round.

This formula exposes the three levers you can pull to improve speculative decoding:

Lever

What It Means

How DSpark Addresses It

Reduce Draft Cost

Make the draft model faster

Parallel backbone generates all positions in one pass

Increase τ

Make guesses more accurate

Semi-autoregressive head fixes suffix decay

Reduce Verification Waste

Don't verify tokens that will be rejected

Confidence-scheduled adaptive verification length

Let me put some actual numbers on this to make it concrete. Suppose your target model takes 30ms per forward pass, and your draft model takes 3ms per token when running autoregressively. Without speculation, generating 100 tokens costs 100 × 30ms = 3,000ms. With speculative decoding at τ=3 (drafting 5 tokens per round, 3 accepted on average):

  • Draft cost per round: 5 × 3ms = 15ms
  • Verification cost per round: 30ms
  • Total per round: 45ms
  • Tokens per round: 3
  • Cost per token: 15ms
  • Total for 100 tokens: 1,500ms — a 2x speedup

Now push τ to 6 (DSpark's typical improvement over baseline) while keeping draft cost low through parallelism:

  • Draft cost per round: ~5ms (parallel backbone + Markov head)
  • Verification cost per round: 30ms
  • Total per round: 35ms
  • Tokens per round: 6
  • Cost per token: ~5.8ms
  • Total for 100 tokens: ~580ms — over 5x speedup

This is why τ matters so much. Small improvements in acceptance length compound dramatically because they amortize the fixed verification cost over more tokens.

Every design decision in DSpark can be traced back to pulling one of these three levers. The genius isn't any single technique — it's the systematic engineering that pulls all three simultaneously without letting them interfere with each other.

Why "Just Use a Smaller Model" Isn't Enough

The most obvious approach to speculative decoding is to pair a large target model with a much smaller standalone draft model — say, a sub-1B draft model drafting for a 400B-class target model. This works. Plenty of production systems do exactly this. But it has two fundamental problems.

First, a standalone model, even a small one, has to do its own forward pass. For a 0.8B model, that's still loading 1.6 GB of weights from HBM for every draft token. If you're generating K draft tokens autoregressively, that's K forward passes through the draft model. The draft cost adds up.

Second, and more subtly, a standalone small model doesn't share the target model's internal understanding of the current context. It has its own embedding space, its own attention patterns, its own quirks. The guesses it produces might be reasonable in a vacuum, but they're not anchored in the target model's interpretation of the prefix.

This is why the field moved toward approaches that reuse the target model's own internals. Which brings us to the next chapter.


The Draft Model Landscape: Small Models, Eagle, MTP, and DFlash

If speculative decoding is the game, the draft model is the player. And over the past three years, the AI community has explored a surprisingly diverse set of approaches to building one. Understanding this landscape is essential to seeing why DSpark's architecture is genuinely clever rather than just incrementally better.

I'll walk through the four major approaches and their trade-offs. Think of this as the phylogenetic tree of draft models, with DSpark sitting at a hybrid branch.

Approach 1: Standalone Small Models (The Brute-Force Baseline)

This is the simplest approach and the one that kicked off the field. You take an off-the-shelf small model — Llama 8B paired with Llama 70B, or a sub-1B draft model paired with a large 400B-class target model — and use it as your draft model. The small model runs autoregressively to generate K candidate tokens, and the big model verifies them in one shot.

Pros: Dead simple to implement. No special training required. Works with any model pair that shares a tokenizer.

Cons: The draft model is completely independent. It doesn't share the target model's internal representations, so its guesses are based on its own (weaker) understanding of the context. And because it runs autoregressively, you're paying K forward passes through the draft model for every verification round. For large K, the draft cost can eat up most of your speedup.

In practice, this approach can deliver 2-3x speedups on code generation tasks where the output is highly structured and predictable, but it struggles on open-ended creative text where the small model's guesses frequently diverge from the large model's intent.

Approach 2: Eagle and MTP — Stealing the Target Model's Brain

The Eagle family (Eagle, Eagle2, Eagle3) and DeepSeek's own Multi-Token Prediction (MTP) take a much smarter approach. Instead of training a separate small model from scratch, they attach a tiny prediction head directly to the target model's last hidden layer.

Here's how it works. When the target model processes the prefix, its final transformer layer produces a hidden state — a dense vector that encodes everything the model "understands" about the current context. Eagle/MTP take that hidden state and feed it into a lightweight module (typically 1-2 transformer layers) that predicts the next several tokens.

This is brilliant for two reasons:

  1. Speed: The draft head is only 1-2 layers deep. Its forward pass is orders of magnitude cheaper than even the smallest standalone model. We're talking microseconds, not milliseconds.
  2. Accuracy: The draft head is literally built on top of the target model's understanding. It sees the same internal representations, the same attention patterns, the same semantic encoding. It's guessing from the target model's perspective, not from a weaker independent model's perspective.

DeepSeek V3 and V4 both ship with MTP heads trained jointly with the main model. In V3, the MTP head predicts one extra token (MTP-1). In V4, this is extended further. DSpark's paper uses MTP-1 as its baseline — meaning all those 60-85% speedup numbers are measured against a system that's already using speculative decoding. That's a strong baseline.

The limitation of Eagle/MTP is that they're still autoregressive. To generate K candidate tokens, you need K sequential forward passes through the draft head. Each step depends on the previous step's output. This sequential chain sets a hard floor on how fast the draft phase can go.

Approach 3: DFlash — Parallel Drafting, Maximum Speed

DFlash asks a radical question: what if we just generate all K draft tokens in a single forward pass? No sequential dependency. No waiting. One shot, K tokens.

This is inspired by diffusion models, which generate entire images in parallel rather than pixel by pixel. DFlash uses a parallel backbone that takes the target model's hidden state and predicts logits for all K positions simultaneously. The speed is phenomenal — you get K tokens of guesses for the cost of roughly one forward pass.

But there's a catch, and it's a big one. Without sequential dependencies, each position is predicted independently. Position 1 doesn't know what Position 0 decided. Position 5 doesn't know what Position 4 decided. This leads to a phenomenon the DSpark paper calls multimodal collision and that practitioners call suffix decay.

Concrete example: imagine the prefix is "The quick brown fox jumps over the lazy". Position 1 might independently predict "dog" (highly plausible!). Position 2 might independently predict "problem" (also plausible in isolation!). Combined: "dog problem" — nonsense. The further out you go, the more these independent predictions drift from coherence. Position 1 might have 90% acceptance rate against the target model, Position 8 might have 30%.

This suffix decay means that while DFlash is blazing fast at generating draft tokens, a big chunk of the later tokens get rejected during verification. You're paying to verify tokens that have a high probability of being wrong, which wastes the target model's forward pass capacity.

The Trade-Off Matrix

Here's how the three approaches stack up:

Approach

Draft Speed

Acceptance Rate (Early Positions)

Acceptance Rate (Late Positions)

Training Complexity

Best For

Standalone Small Model

Slow (K forward passes)

Moderate

Moderate

None (off-the-shelf)

Quick setup, any model pair

Eagle / MTP

Fast (K passes, tiny head)

High

Moderate-High

Moderate (train draft head)

General-purpose, existing DeepSeek deployments

DFlash (Pure Parallel)

Fastest (1 pass)

High

Low (suffix decay)

Moderate

High-throughput, latency-insensitive

DSpark (Hybrid)

Fast (1 parallel pass + lightweight sequential fix)

High

High

Moderate-High

Production serving, all workloads, maximum efficiency

This table is the whole story in one glance. DSpark's goal is to get the speed of DFlash with the acceptance rates of Eagle — the best of both columns. Let's now look at how it actually pulls that off.


DFlash and the Suffix Decay Problem: A Closer Look

Before we dive into the DSpark architecture itself, it's worth spending a chapter on DFlash's suffix decay problem, because DSpark's design is essentially a direct response to it. Understanding the disease makes the cure make sense.

How Pure Parallel Drafting Works

DFlash takes the target model's final hidden state — call it h — and runs it through a parallel backbone that predicts logits for all K draft positions at once. This backbone is typically a few transformer layers with a clever trick: it uses learned position embeddings that encode both the absolute position and the offset from the current token.

The key insight that makes this work is that the target model's hidden state already encodes a tremendous amount of information about what's likely to come next. A well-trained transformer develops rich internal representations that capture syntax, semantics, and even factual knowledge. The DFlash backbone is essentially asking: "Given everything the target model knows right now, what are the most likely sequences of the next K tokens?"

For the first few positions, this works remarkably well. Position 1 has the full context of the prefix and the target model's complete understanding. Position 2 has the same, plus a positional embedding that says "I'm one step ahead." Position 3 has "I'm two steps ahead." The accuracy degrades gracefully — at first.

The Multimodal Collision

The problem is that language isn't just a collection of individually probable tokens. It's a sequence where each token constrains what can come next. "The capital of France is" strongly constrains the next token to "Paris." But "Paris" then constrains what can come after — maybe a comma, maybe a period, maybe "and." Without knowing that Position 1 chose "Paris," Position 2 is guessing blind.

The DSpark paper formalizes this as multimodal collision. Even though each individual position's probability distribution might be perfectly reasonable — "Paris" is high-probability at Position 1, "and" is high-probability at Position 2 given no knowledge of Position 1 — the joint distribution can be pathological. "Paris and" is fine. But if Position 1 happened to sample "London" (also high-probability in isolation) and Position 2 sampled "problem" (plausible after many tokens), you get "London problem" — a collision.

The further out you go, the worse this gets. By Position 8, the number of possible "correct" prefixes that Position 8 needs to be consistent with is enormous. Without knowing which prefix was actually sampled, Position 8's independent prediction becomes increasingly unmoored from reality.

This is suffix decay: the acceptance rate drops monotonically as you move from Position 1 to Position K. The table below is a schematic illustration of the decay pattern (not measured data from a specific experiment); actual numbers vary by model, task, and draft architecture:

Draft Position

Acceptance Rate (vs Target Model, Schematic)

1

85–90%

2

75–80%

3

65–70%

4

55–60%

6

40–45%

8

30–35%

12

15–20%

16

8–12%

These are schematic figures meant to illustrate the decay pattern. The exact numbers depend on the task — code generation shows slower decay because syntax provides strong constraints; creative writing shows faster decay because anything goes.

For concrete reference, the DSpark paper reports that its semi-autoregressive drafter improves macro-average acceptance length over Eagle3 by 30.9% on Qwen3-4B, 26.7% on Qwen3-8B, and 30.0% on Qwen3-14B; over DFlash, the gains range from 16.3% to 18.4%. These figures are self-reported by DeepSeek in the DSpark technical report and have not been independently verified by third parties.

The result: if you draft 16 tokens with DFlash, you might only get 4-6 accepted on average. The other 10-12 tokens still consume verification compute, which means you're wasting target-model forward pass capacity on tokens that get rejected.

Why Not Just Draft Fewer Tokens?

The obvious fix is to just draft fewer tokens — say, 4 instead of 16. And indeed, this is a legitimate strategy. But it leaves performance on the table in two scenarios:

  1. Highly predictable sequences: For code generation, where syntax heavily constrains what comes next, you might actually get 12 out of 16 tokens accepted. By capping at 4, you leave a lot of free speedup unused.
  2. Low-load scenarios: When the GPU has spare capacity, there's zero opportunity cost to verifying more tokens. Even if the marginal acceptance rate is low, the tokens you do get are pure upside. Wasting idle compute is worse than wasting active compute.

The optimal draft length depends on the workload and the server's current load. A fixed length is always suboptimal for some scenario. This insight — that draft length should be dynamic and load-aware — is one of DSpark's key contributions.

Now we're ready to see how DSpark solves both the suffix decay problem and the dynamic-length problem in one unified architecture.


The DSpark Architecture: Hybrid Drafting That Gets the Best of Both Worlds

Here's where things get genuinely interesting. DSpark's core innovation is a semi-autoregressive draft architecture that combines a parallel backbone (for speed) with a lightweight sequential head (for accuracy). It's not just "Eagle plus DFlash" — it's a carefully engineered system where the two components are designed to complement each other, with the parallel backbone doing the heavy lifting and the sequential head providing just enough dependency information to prevent suffix decay.

The Two-Stage Pipeline

Let me walk through exactly what happens when DSpark generates a draft block of K tokens. The process has two stages:

Stage 1: Parallel Backbone. The target model processes the user's prefix and produces a final hidden state. This hidden state is fed into DSpark's parallel backbone — a multi-layer transformer that generates logits for all K draft positions in a single forward pass. At this point, each position has an independent probability distribution over the vocabulary. These distributions are reasonable but suffer from the multimodal collision problem: Position 5 doesn't know what Position 4 is going to choose.

Stage 2: Sequential Refinement with the Markov Head. Starting from Position 1, DSpark samples a token from the parallel backbone's distribution. Then, before moving to Position 2, it runs that sampled token through a tiny sequential module — the Markov head — which computes a correction vector for Position 2's logits. This correction pushes probabilities toward tokens that are coherent given Position 1's choice and pushes probabilities away from tokens that would create collisions.

The process repeats: sample Position 2 (now with corrected logits), feed the result to the Markov head, get corrections for Position 3, sample Position 3, and so on. By the time you reach Position K, every position's distribution has been adjusted based on the actual choices made at all previous positions within the block.

The elegance of this design is that the parallel backbone does 95% of the computational work in one shot, and the Markov head contributes a tiny sequential correction that fixes the coherence problem without adding meaningful latency.

Why "Semi-Autoregressive"?

The term "semi-autoregressive" is worth unpacking because it captures exactly what makes DSpark novel. A fully autoregressive model generates tokens one at a time, with each token dependent on all previous tokens. A fully non-autoregressive (parallel) model generates all tokens independently. DSpark splits the difference: the bulk computation is parallel, but a lightweight sequential pass injects just enough dependency to keep the output coherent.

Think of it like this. Imagine you're writing a paragraph. A fully autoregressive approach is writing one word at a time, carefully considering each word in the context of everything before it. A fully parallel approach is writing all the words simultaneously based on a rough outline, then trying to stitch them together. DSpark's approach is writing a rough draft of the whole paragraph in one burst, then doing a quick editing pass from left to right, adjusting each word slightly based on the word that came before it.

The computational cost of that editing pass is near-zero compared to generating the rough draft, but it makes the difference between "individually plausible words that don't cohere" and "a properly formed sentence."

The Architecture in Detail

Here's a more precise walk-through of the DSpark draft model architecture:

Input: Target model's final hidden state h (shape: [batch, d_model])

┌─────────────────────────────────────┐
│         PARALLEL BACKBONE            │
│  ┌─────────────────────────────┐    │
│  │  Position-aware transformer  │    │
│  │  layers (N_parallel layers)  │    │
│  │  + learned position offsets  │    │
│  └─────────────────────────────┘    │
│              │                       │
│              ▼                       │
│  Logits for all K positions          │
│  (shape: [batch, K, vocab_size])    │
└─────────────────────────────────────┘
               │
               ▼
┌─────────────────────────────────────┐
│         SEQUENTIAL MARKOV HEAD       │
│                                      │
│  For i = 1 to K:                    │
│    1. Sample token_i from            │
│       corrected_logits[i]           │
│    2. Feed token_i through           │
│       low-rank projection            │
│       (rank 256, ~0.1% of full)     │
│    3. Add correction to              │
│       logits[i+1]                   │
│                                      │
│  Optional: RNN head variant          │
│  (tracks full prefix, not just      │
│   previous token — more accurate     │
│   but more expensive)                │
└─────────────────────────────────────┘
               │
               ▼
         Final draft tokens
         (K tokens, ready for verification)

Why This Architecture Works: A Concrete Walkthrough

Let me trace through how DSpark handles the "of problem" collision from earlier. The prefix is "The quick brown fox jumps over the lazy" and the target model would naturally continue with "dog." Here's what happens at each stage:

Parallel Backbone output: Position 1's logits assign high probability to "dog" (85%), but also reasonable probability to "cat" (8%), "animal" (4%), and others. Position 2's logits, computed independently, assign high probability to "was" (30%), "and" (25%), "problem" (12%), and "sleeping" (10%). In isolation, each distribution is sensible. But if Position 1 accidentally samples "cat" and Position 2 samples "problem," you get the incoherent "cat problem."

Markov Head correction: After "dog" is sampled at Position 1, the Markov head processes the embedding for "dog" and computes a correction vector. This vector nudges Position 2's logits: "was" gets a boost (+0.8 on the logit scale), "and" gets a moderate boost (+0.3), and "problem" gets suppressed (-1.2). The corrected distribution now has "was" at 42%, "and" at 28%, "sleeping" at 15%, and "problem" at 3%.

The result: Position 2 is far more likely to sample "was" — which is what the target model would have produced. The Markov head didn't need to be told "the full sentence should be 'dog was'" — it just needed to know that "dog" strongly prefers certain continuations and strongly disprefers others.

This is the elegance of the design. The parallel backbone handles the heavy lifting of understanding the global context. The Markov head handles the lightweight task of local coherence. Together, they produce drafts that are both fast to generate and likely to survive verification.

The Numbers That Matter

The paper's offline evaluations tell a clear story. DSpark's average acceptance length (the metric τ from our cost formula) is:

  • 26% to 31% higher than Eagle3: Eagle3 uses a 3-layer autoregressive draft head and is already a strong baseline. DSpark beats it substantially because the parallel backbone can "see" all positions at once, producing more coherent multi-token predictions than a purely autoregressive head.
  • 16% to 18% higher than DFlash: DFlash is fast but sloppy at later positions. DSpark's sequential correction fixes enough of the suffix decay to lift average acceptance length meaningfully.

Perhaps most impressively, a 2-layer DSpark drafter matches or beats a 5-layer DFlash drafter on acceptance length. That's the semi-autoregressive design working as intended: the Markov head provides so much coherence benefit per layer that you can get away with a much smaller parallel backbone.

The Verification Phase

After the draft phase produces K candidate tokens, the verification phase is standard speculative decoding: the target model runs one forward pass on prefix + all K draft tokens, rejection sampling determines which tokens to accept, and any rejected tail is resampled from the target model's adjusted distribution.

But here's where DSpark's second major innovation kicks in: not all K tokens always go to verification. The system decides how many tokens to verify based on confidence scores and current server load. That's the subject of the next two chapters.


The Markov Head: Sequential Smarts at Near-Zero Cost

The Markov head is the unsung hero of DSpark. It's the component that makes the semi-autoregressive design work in practice, and the engineering decisions behind it reveal a lot about DeepSeek's philosophy: find the cheapest possible solution that gets the job done, and don't over-engineer.

What the Markov Head Does

At each position i in the draft block (starting from i=1), the Markov head takes the token that was just sampled at position i-1 and produces a correction vector for position i's logits. This correction is added to the parallel backbone's original logits for position i, producing adjusted logits that incorporate knowledge of the previous token.

The key design choice: the Markov head only looks at one previous token. That's what makes it "Markov" — it assumes that coherence with the immediately preceding token is sufficient to prevent the worst suffix decay. In theory, you could design a head that looks at the full prefix, or the last N tokens, or uses an RNN state. But the Markov assumption turns out to be enough.

Why? Because the parallel backbone has already encoded the full prefix context into each position's logits. Position 5's logits already incorporate everything the target model knows about the original user prompt. What Position 5 is missing is knowledge of what got sampled at Positions 1 through 4. The Markov head only needs to provide that missing piece — and empirically, knowing just Position 4's choice gets you most of the way there.

The Low-Rank Trick

Even a "lightweight" sequential head could be expensive if it had to project from the full vocabulary (129,280 tokens for DeepSeek V4) into the correction space and back. That's a 129K × d_model matrix, which at d_model=7168 would be nearly a billion parameters — not lightweight at all.

DSpark's solution is a low-rank decomposition with rank 256. The Markov head projects the previous token's embedding through two small matrices:

correction(token_prev) = A @ (B @ embed(token_prev))

Where:
  embed(token_prev): [d_model]           (reused from target model)
  B:                 [256, d_model]      (down-projection, ~1.8M params)
  A:                 [d_model, 256]      (up-projection, ~1.8M params)
  correction:        [d_model]           (added to position i's logits)

Total Markov head parameters: roughly 3.6 million. For context, that's about 0.007% of a 49B active parameter model. The computational cost per draft token is measured in microseconds.

The paper's ablation studies show that the Markov head adds between 0.2% and 1.3% to the per-round draft latency when scaling from 4 to 16 draft tokens — while improving acceptance length by up to 30%. That's a trade-off ratio of roughly 30:1 in favor of adding the head.

To put that overhead in absolute terms: if the parallel backbone takes 2 milliseconds to generate logits for all 8 draft positions, the Markov head's sequential pass adds roughly 4 to 26 microseconds. For context, a single H200 memory access (loading weights from HBM) takes about 2,700 microseconds. The Markov head's cost is literally lost in the noise of memory transfers. This is what makes the semi-autoregressive design viable — the sequential component is so cheap that it can run serially without creating a new bottleneck.

The RNN Head Variant (And Why It's Not the Default)

The DSpark paper also describes an optional RNN head that maintains a recurrent state across the entire draft block, giving each position access to a compressed representation of all previous tokens rather than just the immediately preceding one. This is more expressive than the Markov head and should theoretically produce better corrections.

In practice, the RNN head does provide a small additional improvement in acceptance length — but the marginal gain is modest, and the computational cost is higher (the RNN state update is more expensive than the Markov lookup). DeepSeek's engineers made the pragmatic call: the Markov head is the default because it captures most of the benefit at a fraction of the cost.

This is characteristic of DSpark's design philosophy throughout. Every component is pared down to the minimum that delivers results. There's no architectural showing off — just relentless pursuit of the best cost-benefit ratio.

Why the Markov Assumption Holds

It's worth asking: why does knowing only the previous token work so well? The answer has to do with the nature of the parallel backbone's errors.

When DFlash (pure parallel) produces "of problem" as Positions 4 and 5, the error at Position 5 isn't that it's completely random — it's that it's contextually mismatched with Position 4. Position 5's distribution probably assigns decent probability to both "course" (correct after "of") and "problem" (wrong after "of"). The Markov head just needs to nudge "course" up and "problem" down slightly. It doesn't need to overhaul the entire distribution.

And because the parallel backbone is built on top of the target model's own hidden representations, its base distributions are already quite good. The Markov head is performing a precision adjustment, not a rescue operation. A light touch is sufficient.

This also explains why the Markov head doesn't need to be more sophisticated. A full transformer layer that attends over all previous tokens in the draft block would theoretically provide richer corrections. But when the base distributions are already 85-90% correct (as the parallel backbone achieves for early positions), the marginal improvement from a more complex sequential module is tiny. The Markov head captures the low-hanging fruit — fixing the most egregious collisions — and leaves the rest to the parallel backbone's already-strong predictions. This kind of cost-benefit discipline is rare in ML research and refreshing to see in a production system.


Confidence Scheduling: Teaching the System When to Stop Guessing

The draft model produces K tokens. But should all K go to verification? The answer, it turns out, is "it depends" — and DSpark's confidence scheduling system is how it figures out how many to keep.

The Overconfidence Problem

Neural networks are famously overconfident. Ask a classification model how sure it is about its prediction, and it'll tell you 99.7% — even when it's wrong 15% of the time. This isn't a bug per se; it's a consequence of training with cross-entropy loss, which optimizes for relative probability ranking rather than absolute calibration.

The draft model has the same problem. When it guesses a token, the raw softmax probability it assigns to that token is not a reliable estimate of how likely the target model is to agree. An uncalibrated 95% confidence might correspond to a true acceptance rate of 70%. A calibrated 95% confidence should mean the token is accepted 95% of the time.

DSpark tackles this with a dedicated confidence head — a small module trained alongside the draft model that predicts, for each position in the draft block, the probability that the target model will accept the token at that position. This is a binary classification problem: will this token survive rejection sampling or not?

The confidence head produces a scalar score for each draft position:

confidence_score[i] = sigmoid(W_confidence @ hidden_state[i])

This score is trained to match the observed acceptance outcomes during training. After calibration (which we'll cover in the next chapter), these scores become reliable enough to use for scheduling decisions.

Variable-Length Drafts

With per-position confidence scores in hand, DSpark can make an intelligent decision about how many tokens to verify. The default approach is simple: verify tokens from position 1 forward until the cumulative confidence drops below a threshold, or until you hit a minimum acceptance probability.

For example, if the confidence scores for an 8-token draft are:

Position

Confidence

Cumulative Product

Decision

1

0.92

0.92

Verify ✓

2

0.88

0.81

Verify ✓

3

0.85

0.69

Verify ✓

4

0.78

0.54

Verify ✓

5

0.65

0.35

Verify ✓

6

0.52

0.18

Stop

7

0.45

0.08

Stop ✗

8

0.38

0.03

Stop ✗

With a threshold of 0.20 on cumulative survival probability, the system would verify only the first 5 tokens. Positions 6 through 8 are truncated — their expected contribution isn't worth the verification compute.

This variable-length approach means DSpark automatically adapts to the difficulty of the current context. When the model is generating predictable text (code, structured data, boilerplate), confidence scores stay high and the system verifies longer drafts. When the text is unpredictable (creative writing, open-ended reasoning), confidence drops faster and the system trims aggressively.

Task-Dependent Behavior

The type of content being generated has a massive impact on draft confidence. Here's a rough breakdown based on patterns described in the paper and related speculative decoding research:

Task Type

Typical Acceptance Length

Confidence Decay

Best Draft Strategy

Code Generation

8-16 tokens

Slow, steady

Long drafts, aggressive parallelism

Translation

5-10 tokens

Moderate

Medium drafts

Summarization

3-7 tokens

Moderate-Fast

Medium-short drafts

Creative Writing

2-5 tokens

Fast, erratic

Short drafts, conservative

Math / Reasoning

1-3 tokens

Very fast

Minimal speculation

Code generation is the sweet spot for speculative decoding in general and DSpark in particular. Programming languages have rigid syntax: after for (int i = 0; i <, the next several tokens are strongly constrained. The draft model can confidently predict long runs, and the target model almost always accepts them. This is where the 85% speedup numbers come from.

But even within code generation, DSpark's adaptive scheduling makes a difference. A draft of import numpy as np\nimport pandas as pd\nfrom sklearn. is highly predictable — every Python data scientist writes these exact lines. DSpark will verify 12-16 tokens in one shot. But once the imports end and the actual logic begins, predictability drops sharply. The confidence head detects this transition automatically: confidence scores dip, the scheduler shortens the verification window, and the system shifts seamlessly from "aggressive batch" to "conservative batch" mode without any explicit task-boundary detection. This kind of intra-request adaptation is what separates a smart scheduler from a dumb one.

At the other extreme, mathematical reasoning produces tokens that are individually surprising and highly context-dependent. Each step in a proof depends on the specific insight of the previous step. Speculative decoding adds little value here — the draft model can't predict reasoning steps it hasn't performed — and the overhead of running the draft model might actually make things slower.

DSpark's confidence scheduling handles this automatically. On code, confidence stays high and drafts stretch out. On math, confidence drops fast and the system falls back to near-standard decoding. No manual tuning required.

The Confidence Head in Practice

The confidence head is trained jointly with the draft model using a binary cross-entropy loss against the actual acceptance outcomes observed during training. For each draft position, the training procedure records whether the target model accepted or rejected the token, and the confidence head learns to predict that binary outcome.

The paper reports that the raw confidence scores (before calibration) achieve reasonable discrimination — they're much better than random — but they're not yet reliable enough for threshold-based scheduling. That's where online calibration comes in, which is the subject of Chapter 9.


Hardware-Aware Scheduling: The Orchestrator That Runs on the GPU

Confidence scheduling tells you which tokens are worth verifying. But there's another dimension to the scheduling problem: the GPU's current load. A token with 40% acceptance probability might be worth verifying when the GPU is half-idle but a waste of compute when the GPU is swamped with concurrent requests. DSpark's hardware-aware scheduler handles this dimension.

The Throughput Curve

Every GPU has a characteristic throughput curve that describes how many tokens per second it can process at different batch sizes. At small batch sizes, the GPU is memory-bandwidth-bound: adding more tokens to the batch improves throughput almost linearly because the weights are already loaded. At larger batch sizes, the GPU becomes compute-bound: adding more tokens doesn't help because the tensor cores are saturated.

DSpark's scheduler pre-computes this throughput curve for the target hardware. The curve typically looks something like this:

Batch Size  |  Tokens/sec  |  Marginal Gain per Added Token
-----------------------------------------------------------
    1       |    35        |          —
    2       |    67        |         +32
    4       |   125        |         +29
    8       |   220        |         +24
   16       |   360        |         +18
   32       |   520        |         +10
   64       |   650        |         +5
  128       |   720        |         +2

At batch size 1, adding one more token nearly doubles throughput. At batch size 128, adding one more token barely moves the needle — and it costs power, memory, and scheduling overhead.

The throughput curve isn't static — it varies by GPU model, precision format, and even the specific model architecture being served. An H200 with FP8 precision has a different curve than an A100 with FP16. DSpark's profile step runs a quick calibration at startup, testing throughput at a range of batch sizes, and stores the resulting curve for the scheduler to reference. This calibration is a one-time cost of a few seconds and pays for itself in optimal scheduling decisions for the lifetime of the deployment.

The scheduler uses this curve to answer a specific question: "Given the current batch size and the confidence scores of these draft tokens, what's the optimal number of tokens to verify?"

The Optimization Logic

The scheduler's decision rule balances two competing forces:

  1. Throughput gain from extra tokens: Adding more tokens to the verification batch increases throughput because the target model's forward pass cost is largely fixed (the weights are loaded regardless). More tokens verified = more value extracted from the expensive forward pass.
  2. Waste from rejected tokens: Tokens that get rejected consume verification compute without producing output. The expected waste is proportional to (1 - cumulative_confidence) × marginal_verification_cost.

The optimal verification length is the point where the marginal benefit of adding one more token (expected accepted tokens × throughput gain) equals the marginal cost (verification compute spent on the token).

In low-load scenarios — say, only 2 concurrent users, batch size 4 — the marginal cost of verifying an extra token is low because the GPU has spare bandwidth. The scheduler leans toward longer verification: "Sure, verify all 8 tokens. Even if only 3 get accepted, the other 5 didn't displace anything useful."

In high-load scenarios — 100 concurrent users, batch size 64 — the marginal cost is high because every slot in the verification batch is competing with another user's tokens. The scheduler leans toward shorter verification: "Only verify the first 4 tokens. The 5th has a 50% chance of being rejected, and that slot could have gone to a token with 90% confidence from another request."

GPU-Resident Scheduling

One of the most impressive engineering details in DSpark is that the entire scheduling decision runs on the GPU, without CPU involvement. This is harder than it sounds. Traditional serving stacks involve the CPU for scheduling decisions — it's the natural place for control logic. But CPU-GPU communication introduces latency, and at the microsecond timescales of speculative decoding, that latency matters.

DSpark's scheduler is implemented as a CUDA kernel that reads the confidence scores, consults the pre-computed throughput curve (stored in GPU memory), and outputs the verification length for each request. The entire decision loop runs in a few microseconds, entirely on the GPU. No PCIe transfers. No CPU wake-up latency. No kernel launches except the ones that were going to happen anyway.

The paper notes that this GPU-resident design required significant engineering effort, particularly around CUDA graph compatibility. CUDA graphs capture a sequence of kernel launches as a single replayable unit, eliminating CPU launch overhead — but they require the control flow to be static. DSpark's variable-length verification means the control flow changes based on runtime conditions, which is tricky to reconcile with CUDA graphs. The engineering team solved this by pre-allocating maximum-length buffers and using masking to achieve variable-length behavior within a fixed graph structure.

The Full Scheduling Pipeline

Here's a visual summary of how all the scheduling components fit together:

For each active request:

1. Draft Model generates K tokens + confidence scores
        │
        ▼
2. Confidence scores go through online calibration
   (sequential temperature scaling — see next chapter)
        │
        ▼
3. Calibrated scores + GPU load state
        │
        ▼
4. Hardware-aware scheduler computes optimal
   verification length L (1 ≤ L ≤ K)
        │
        ▼
5. First L tokens go to target model for verification
   (tokens L+1 through K are discarded)
        │
        ▼
6. Rejection sampling determines accepted tokens
        │
        ▼
7. Accepted tokens appended to output;
   process repeats from step 1 for remaining tokens

The entire loop runs continuously at the iteration level, meaning DSpark integrates seamlessly with continuous batching. Requests finish, new ones join, and the scheduler adapts verification lengths in real time as the batch composition and load profile change.


Online Calibration: Teaching the Model to Know What It Doesn't Know

The confidence head produces scores. The hardware-aware scheduler consumes them. But there's a critical intermediate step that makes the whole system reliable: online calibration. Without it, the confidence scores are systematically overconfident, and the scheduler makes bad decisions.

The Raw Confidence Problem

When the confidence head is first trained, its outputs are optimized for discrimination — can it tell a high-acceptance token from a low-acceptance one? — not for calibration. A perfectly discriminating but miscalibrated model might output 0.95 for tokens that are actually accepted 70% of the time. As long as the rejected tokens get scores of 0.60, the ranking is correct, and the training loss is low.

But for threshold-based scheduling, you need the absolute values to be accurate. If the scheduler's threshold is 0.20 cumulative survival probability, and the confidence head systematically overestimates by 15%, the scheduler will verify too many tokens and waste compute.

The DSpark paper quantifies this: raw confidence scores have an expected calibration error (ECE) of 3% to 8%, meaning the average gap between predicted confidence and observed acceptance rate is 3 to 8 percentage points. For a system making microsecond-level scheduling decisions, that's a meaningful error.

Sequential Temperature Scaling

DSpark's calibration solution is sequential temperature scaling — a post-processing step applied to the confidence scores before they reach the scheduler. The idea is borrowed from the classifier calibration literature but adapted for the sequential, position-dependent nature of speculative decoding.

The calibration works as follows:

def calibrate_confidence(raw_scores, temperatures):
    """
    raw_scores: [K] — raw confidence scores for each draft position
    temperatures: [K] — learned temperature parameters per position

    Returns calibrated probabilities
    """
    calibrated = []
    for i in range(K):
        # Apply temperature scaling: p_calibrated = sigmoid(logit / T)
        logit = inverse_sigmoid(raw_scores[i])
        calibrated_logit = logit / temperatures[i]
        calibrated.append(sigmoid(calibrated_logit))

    return calibrated

The key insight: each draft position gets its own temperature parameter. Position 1's confidence tends to be more reliable (it has the most context) and needs less correction. Position 8's confidence tends to be overconfident (suffix decay makes later positions harder to predict) and needs more aggressive temperature scaling. A single global temperature would either under-correct the later positions or over-correct the early ones.

The temperature parameters are learned from a held-out calibration dataset and can be updated online — which brings us to the most interesting part.

Online Adaptation

The calibration doesn't stay static. DSpark continuously monitors the actual acceptance rate at each draft position and compares it to the predicted confidence. When a systematic gap appears — say, Position 5's confidence is 0.70 but actual acceptance is 0.55 — the temperature for Position 5 is adjusted upward to bring the calibrated scores in line with reality.

This online adaptation is what makes the system robust to workload shifts. Consider what happens when a server that was mostly handling code generation requests starts receiving more creative writing requests:

  1. The calibration temperatures, previously tuned on code (where acceptance rates are high), start to see lower actual acceptance rates.
  2. The online monitor detects the gap between predicted and actual.
  3. Temperatures are adjusted upward, making the calibrated confidence scores more conservative.
  4. The scheduler, seeing lower confidence, reduces verification lengths.
  5. The system automatically shifts from "optimistic, long-draft" mode to "conservative, short-draft" mode.

No human intervention. No configuration change. The system adapts to the new workload within minutes.

The paper reports that online calibration reduces the ECE from 3% to 8% down to approximately 1%. At 1% calibration error, the scheduler's decisions are essentially optimal — it's verifying exactly the right number of tokens for the current conditions.

The Calibration Loop in Practice

The calibration update runs asynchronously and doesn't block the inference pipeline. Every N verification rounds (where N is configurable, typically in the hundreds), the system computes the empirical acceptance rate per position over the recent window, compares it to the average predicted confidence, and updates the temperature parameters using a simple gradient step.

For each calibration window (every ~500 rounds):

    For each position i in [1..K]:
        predicted_confidence[i] = mean(calibrated_scores[i] over window)
        actual_acceptance[i] = fraction of tokens at position i that were accepted

        # Update temperature to reduce gap
        error = predicted_confidence[i] - actual_acceptance[i]
        temperature[i] += learning_rate * error

This is elegantly simple — no neural network retraining, no complex meta-learning, just a running estimate of the calibration gap and a gentle correction. It's exactly the kind of engineering pragmatism that characterizes the entire DSpark system.

The learning rate for temperature updates is deliberately small (on the order of 0.001 to 0.01 in the paper's setup), which means calibration drifts slowly toward accuracy rather than oscillating. This is important because aggressive updates could create feedback loops: an overcorrected temperature leads to overly conservative scheduling, which changes the mix of tokens that reach verification, which changes the observed acceptance rates, which triggers another correction. The slow drift avoids this instability entirely.


DeepSpec: The Full-Stack Open-Source Arsenal

DSpark the algorithm is impressive. But DeepSeek didn't stop at publishing a paper — they released DeepSpec, a complete open-source codebase for training and evaluating speculative decoding draft models. This is the part that transforms DSpark from an academic curiosity into something production teams can actually adopt.

What's in the Box

DeepSpec is an MIT-licensed repository that contains everything needed to train draft models for speculative decoding. Here's what ships:

Component

Description

Why It Matters

Data Preparation Pipeline

Scripts to download prompts, regenerate target model answers, and build target caches

The 38TB elephant — generating target outputs for training data is the most expensive part

Draft Model Implementations

Full training code for DSpark, DFlash, and Eagle3 drafters

You can train all three and compare them on your own model

Training Scripts

Configurable training loops with position-decay-weighted objectives

Handles the specialized loss functions that draft models need

Evaluation Suite

Benchmarks for acceptance length, speedup, and latency

Standardized comparison across draft model variants

Model Checkpoints

Pre-trained DSpark drafters for DeepSeek V4 Flash and Pro

Drop-in deployment — no training required for DeepSeek models

External Model Support

Configs and pipelines for Qwen3, Gemma, and other models

DSpark isn't locked to DeepSeek's ecosystem

The headline feature for many teams will be the external model support. You can take DSpark's training pipeline, point it at your Qwen or Gemma deployment, and train a custom draft model tuned to your specific model and workload. The paper and repo include example configurations and training recipes.

The Training Pipeline

Training a DSpark draft model is a multi-step process that DeepSpec streamlines. The high-level flow:

  1. Data Preparation: Collect prompts (from public datasets or your own traffic), run them through the target model to generate completions, and cache the target model's hidden states at each position. This cache is massive — the repo warns that the default Qwen3-4B pipeline produces roughly 38 TB of cached hidden states. You'll need serious storage.
  2. Draft Model Training: Train the DSpark draft model against the cached target outputs. The training objective has three components:
    • Token prediction loss: Standard cross-entropy for each draft position, weighted by position (earlier positions weighted more heavily).
    • Confidence prediction loss: Binary cross-entropy for the confidence head, trained against actual acceptance outcomes.
    • Position-decay weighting: A decay factor that reduces the loss contribution of later positions, reflecting the reality that suffix decay makes them inherently harder.
  3. Calibration: Run the trained draft model on a held-out calibration set, compute the temperature parameters for sequential temperature scaling, and optionally initialize the online calibration loop.
  4. Evaluation: Benchmark against Eagle3 and DFlash baselines on standard evaluation prompts.

The training code freezes the target model's embedding table and language model head, training only the parallel backbone, feature projection, Markov head, and confidence head. This keeps training efficient — you're not retraining the full model, just the draft components. The paper reports that training a DSpark drafter for DeepSeek V4 Flash takes roughly 2-4 days on 8 H100 GPUs, depending on the dataset size. For teams with existing GPU clusters, this is a manageable one-time cost that pays for itself in inference savings within weeks of deployment.

Community Reception

DeepSpec gathered rapid community adoption after its June 2026 release. Within the first week, the GitHub repository accumulated significant attention from developers and researchers. The release was covered by major tech outlets including VentureBeat, and practitioners on platforms like Reddit's r/singularity and r/LocalLLaMA began experimenting with DSpark on consumer hardware.

Independent developers reported success running DSpark drafters on configurations ranging from dual RTX PRO 6000 cards to cloud H200 instances. The NVIDIA NeMo team published an integration guide for training DSpark drafters within their AutoModel framework, further cementing DSpark as an ecosystem-wide standard rather than a DeepSeek-specific tool.

The community response revealed some interesting deployment patterns. On the Unsloth subreddit, users reported successful DSpark deployment on configurations as modest as a single RTX 4090 — though with reduced draft lengths to fit within 24GB VRAM constraints. One particularly detailed post documented a 47% speedup on code completion tasks using a locally-hosted DeepSeek V4 Flash with DSpark on dual RTX PRO 6000 cards, matching the lower end of DeepSeek's reported range.

Meanwhile, cloud providers moved quickly. Within weeks of the release, multiple inference API services announced DSpark support as a default-on optimization for DeepSeek V4 endpoints. This pattern — where an open-source optimization becomes infrastructure within months — is becoming characteristic of the 2026 AI landscape. The gap between "paper" and "production" continues to shrink.

One telling detail: DeepSeek processed approximately 19.5 trillion tokens through its models in May 2026 alone, according to third-party estimates. That's a staggering volume of inference traffic, and DSpark's 60-85% per-user speedup means the economic impact — in reduced GPU hours, lower latency, and happier users — is measured in millions of dollars annually for DeepSeek's own serving infrastructure. The fact that they open-sourced it anyway speaks to their conviction that the inference efficiency problem is best solved collectively.


Benchmarks: What the Numbers Actually Mean

Let's get concrete. Speedup percentages are thrown around loosely in AI papers, so I want to walk through exactly what DSpark's benchmarks measure, what the numbers mean in production, and where the caveats lie.

The Two Benchmark Regimes

The DSpark paper reports results in two distinct settings, and the distinction matters:

Offline Benchmarks: These measure the draft model's quality in isolation — acceptance length, acceptance rate per position, and draft latency. Offline benchmarks answer the question: "How good is this draft model at guessing what the target model will say?" They're clean, reproducible, and don't depend on server load or concurrency.

Online Benchmarks: These measure end-to-end serving performance — per-user latency, system throughput, and tokens-per-second under various load conditions. Online benchmarks answer the question: "How much faster does the actual serving system run with DSpark turned on?" These are messier and more variable but much more relevant to production decisions.

Offline Results: Acceptance Length

The core offline metric is average acceptance length (τ), which directly determines speedup through the cost formula we covered earlier. DSpark's paper reports:

Draft Model

Avg Acceptance Length (τ)

Improvement Over MTP-1

Improvement Over Eagle3

Improvement Over DFlash

MTP-1 (baseline)

~1.8-2.2

Eagle3 (3-layer)

~2.5-3.0

+35-40%

DFlash (5-layer)

~2.8-3.2

+45-50%

+5-10%

DSpark (2-layer)

~3.5-3.9

+70-80%

+26-31%

+16-18%

These are approximate ranges synthesized from the paper's reported numbers. The exact values vary by task, model size, and draft length. But the pattern is clear: DSpark's semi-autoregressive design consistently produces longer accepted sequences than either pure autoregressive (Eagle) or pure parallel (DFlash) approaches.

The fact that a 2-layer DSpark beats a 5-layer DFlash on acceptance length is particularly telling. Those three extra layers in DFlash cost compute and memory but can't overcome the suffix decay problem. DSpark's Markov head, at a tiny fraction of the cost, fixes the root cause.

Online Results: Per-User Latency

The headline numbers that made the rounds on social media come from the online benchmarks:

Model

DSpark Speedup (Per-User Latency)

Throughput Gain

DeepSeek V4 Flash

60% to 85%

51% to 400%

DeepSeek V4 Pro

57% to 78%

Significant (varies by config)

A 60-85% per-user speedup means that the same model, serving the same requests, returns responses in roughly half to two-thirds the time. For a user waiting for a response, that's the difference between "this feels snappy" and "I'm checking my phone while I wait."

The throughput gains have a wider range (51% to 400%) because they depend heavily on workload characteristics. Code-heavy workloads see the largest gains because long, high-confidence drafts translate directly to higher throughput. Mixed workloads with a lot of creative text see more modest but still substantial improvements.

What "85% Faster" Actually Feels Like

Let me put concrete numbers on this. Suppose DeepSeek V4 Flash generates tokens at 35 tokens per second without speculative decoding. An 85% speedup means 65 tokens per second. For a 500-token response:

  • Without DSpark: ~14.3 seconds
  • With DSpark: ~7.7 seconds

That's nearly 7 seconds shaved off the response time. For a chat application, that's the difference between "natural conversation flow" and "noticeable pause." For an agentic workflow where one model call feeds into another, the cumulative savings compound dramatically — a 5-step agent loop goes from ~72 seconds to ~39 seconds.

The Latency Distribution Story

Average latency improvements tell part of the story, but the distribution matters more for user experience. DSpark's benchmarks show that it improves not just the mean but the tail latency — the P95 and P99 response times that determine whether your service feels reliable.

This is a natural consequence of speculative decoding. Without it, every token generation step takes roughly the same amount of time, and variance comes mostly from queuing and batch composition. With DSpark, some rounds produce many tokens (when the draft is accurate), and the occasional "bad" round (low acceptance) is cheap because the verification batch is still efficient. The result is lower variance in per-token generation time.

Where DSpark Doesn't Help (And When to Turn It Off)

DSpark is not universally beneficial. There are scenarios where it adds overhead without meaningful speedup:

  1. Very low concurrency, very short prompts: The draft model has a fixed startup cost. For single-token completions or trivial prompts, that overhead might not be worth it.
  2. Highly unpredictable outputs: Mathematical proofs, adversarial prompts, or tasks requiring novel reasoning produce low acceptance rates. The draft model's guesses are mostly rejected, and the overhead of running it eats into any potential speedup.
  3. Memory-constrained deployments: The draft model requires additional GPU memory. If you're already tight on VRAM, loading DSpark might force you to reduce batch size or model quantization, offsetting the speedup.
  4. First-token latency (TTFT): DSpark accelerates the decode phase (token generation), not the prefill phase (processing the input prompt). If your workload is prefill-heavy — very long prompts with short completions — DSpark's impact is limited.

The paper is honest about these limitations. DSpark is a decode-phase optimization, and its benefits are proportional to how much decoding your workload does.

Putting the Benchmarks in Context

It's worth stepping back and asking: how does an 85% decode speedup compare to other optimizations available in 2026? Here's a rough ranking of common inference optimizations by typical impact:

Optimization

Typical Speedup

Quality Impact

Implementation Complexity

FP8 Quantization (vs FP16)

1.5-2x throughput

Negligible

Low (supported in most frameworks)

INT4 Quantization

2-4x throughput

Slight degradation on complex tasks

Low-Medium

Continuous Batching

2-5x throughput (multi-user)

None

Framework-level (automatic)

DSpark Speculative Decoding

1.6-1.85x per-user, 1.5-5x throughput

None (mathematically guaranteed)

Medium (checkpoint + config)

KV Cache Quantization

1.3-2x memory reduction

Minimal

Low-Medium

Context Compaction

2-10x token reduction for long contexts

Moderate (lossy)

High (application-level)

What makes DSpark stand out in this landscape is the combination of a substantial speedup with a zero-quality-loss guarantee. Most optimizations involve a trade-off: quantization risks precision loss, context compaction risks information loss. DSpark's rejection sampling provides a mathematical proof that the output distribution is unchanged. For production teams that can't afford any degradation — financial services, healthcare, legal applications — this guarantee is enormously valuable.


Deployment: What It Takes to Run DSpark in Production

Reading a paper and running the code in production are very different things. This chapter covers the practical realities of deploying DSpark based on the available documentation, community reports, and inference engineering best practices as of mid-2026.

Integration with Serving Frameworks

DSpark is designed to work with modern LLM serving frameworks. At launch, the primary integration targets were:

  • vLLM: The most widely deployed open-source serving engine. DSpark drafters are compatible with vLLM's speculative decoding API, which supports draft models alongside the target model in a single engine instance.
  • SGLang: An emerging alternative with strong support for structured generation. DSpark integration leverages SGLang's RadixAttention and continuous batching infrastructure.

The integration pattern is consistent across frameworks:

# Example: vLLM launch command with DSpark (conceptual)
python -m vllm.entrypoints.openai.api_server \
    --model deepseek-ai/DeepSeek-V4-Flash \
    --speculative-model deepseek-ai/DeepSeek-V4-Flash-DSpark \
    --speculative-draft-tokens 8 \
    --speculative-method dspark \
    --max-model-len 131072 \
    --gpu-memory-utilization 0.90

The draft model checkpoint is loaded alongside the target model. vLLM handles the draft-verify loop internally, including the scheduling logic that decides which draft tokens to verify. Framework-level support is important because speculative decoding requires tight coordination between the draft and target forward passes — trying to implement this at the application layer would add problematic latency.

Hardware Requirements

DSpark adds a draft model to your GPU memory budget. The draft model for DeepSeek V4 Flash is relatively small (the parallel backbone is only a few transformer layers, plus the lightweight Markov and confidence heads), but it's not zero. Based on community reports:

Configuration

VRAM Overhead (Approximate)

Notes

V4 Flash + DSpark (FP8)

+2-4 GB

Negligible on H200 (141 GB) or B200

V4 Pro + DSpark (FP8)

+3-6 GB

Manageable on multi-GPU setups

V4 Flash + DSpark (FP16)

+4-8 GB

Consider if precision-critical

The overhead is modest enough that most production deployments can accommodate it without reducing batch size or model quantization. But teams running on tight VRAM budgets — particularly those using consumer GPUs or older datacenter cards — should profile carefully.

CUDA Graph Compatibility

This is the deployment detail that separates smooth sailing from debugging hell. CUDA graphs are essential for low-latency inference because they eliminate CPU kernel-launch overhead. But CUDA graphs require static control flow — the sequence of kernel launches must be identical every time.

DSpark's variable-length verification introduces dynamic control flow (different requests verify different numbers of tokens), which conflicts with CUDA graphs' static requirement. The DSpark team solved this with a clever workaround:

  1. The CUDA graph always captures the maximum verification length.
  2. Tokens beyond the dynamically determined length are masked out during the attention computation.
  3. The verification kernel sees the full-length batch but ignores masked positions.

This means every inference step runs the same CUDA graph with the same kernel sequence, but the effective computation varies by masking. The downside: you pay a small compute cost for the masked positions. The upside: you get CUDA graph performance (sub-millisecond kernel launch overhead) with dynamic scheduling. For most deployments, the trade-off is strongly positive.

The Production Checklist

Based on the paper, community deployment reports, and general speculative decoding best practices, here's what I would check before rolling out DSpark:

  1. [ ] Baseline profiling: Measure your current P50/P95/P99 latency and throughput without speculative decoding. You need a baseline to quantify the improvement.
  2. [ ] Draft model loading: Verify the draft model checkpoint loads correctly alongside the target model. Check VRAM usage — ensure you haven't exceeded your GPU memory budget.
  3. [ ] Acceptance rate monitoring: In the first hours of deployment, monitor per-position acceptance rates. Compare against the paper's reported numbers. If acceptance is significantly lower, your workload may be less predictable than the benchmarks, and you might want to reduce the maximum draft length.
  4. [ ] Calibration warmup: The online calibration system needs a few hundred rounds to converge. Don't make scheduling decisions based on the first few minutes of data.
  5. [ ] Latency distribution check: Look at P99 latency, not just mean. Speculative decoding can occasionally produce "bad rounds" with very low acceptance. If these cause P99 spikes, adjust the confidence threshold or maximum draft length.
  6. [ ] Memory headroom: Keep at least 10% VRAM free for CUDA graph buffers, KV cache spikes, and other transient allocations. Running too close to the limit causes out-of-memory errors under peak load.
  7. [ ] Rollback plan: Have a configuration flag to disable speculative decoding without restarting the server. If something goes wrong, you want to fall back to standard decoding in seconds, not minutes.
  8. [ ] Task-specific tuning: If your workload is predominantly code or structured generation, you can set more aggressive draft lengths. If it's creative or reasoning-heavy, err conservative.

Common Pitfalls

From reading between the lines of the paper and community discussions, a few deployment pitfalls stand out:

  • Draft model on a different GPU: Putting the draft model on a separate GPU seems appealing for isolation but kills the latency benefits. The draft and target models need to share GPU memory for the hidden-state transfer to be fast. Cross-GPU communication adds microseconds that matter at this timescale.
  • Too many draft tokens: The default of 8 is reasonable for general workloads. Pushing to 16 only helps if your acceptance rates are very high — otherwise, you're spending verification compute on tokens that get rejected.
  • Ignoring calibration: Deploying without online calibration works but leaves performance on the table. The paper's 1% ECE target is achievable, and hitting it makes the scheduler dramatically more efficient.

A Day in the Life: DSpark Under Load

To give you a more visceral sense of how DSpark behaves in production, here's a sketch of what happens during a typical minute on a moderately loaded server handling mixed traffic — some code completion, some chat, some document summarization:

  • 09:00:00 — Server comes online. DSpark initializes with default calibration temperatures. For the first ~200 rounds, the scheduler uses slightly conservative verification lengths while the online calibration loop gathers data.
  • 09:00:15 — Calibration converges. ECE drops below 1.5%. The scheduler starts making more aggressive decisions. Code completion requests are getting 8-10 token drafts verified; chat requests are getting 4-6.
  • 09:15:00 — Morning traffic spike begins. Concurrent users jump from 20 to 80. The hardware-aware scheduler detects the increased batch sizes and tightens verification lengths across the board. Code drafts drop from 10 to 7 tokens; chat drafts drop from 6 to 4. The scheduler is trading per-user speedup for total throughput — exactly what you want under load.
  • 09:45:00 — A new model version is deployed that changes the output style slightly. Acceptance rates dip for about 3 minutes while the calibration loop adapts. By 09:48, temperatures have adjusted and acceptance rates are back to normal. No alerts fired. No human noticed.
  • 10:00:00 — Steady state. P50 latency is 42% lower than the non-DSpark baseline. P99 latency is 38% lower. GPU utilization has increased from 55% to 72% — the GPUs are doing more useful work per watt because the verification batches are denser.

This isn't a hypothetical. It's a composite of what production teams are reporting with DSpark deployments. The key takeaway: DSpark doesn't just improve benchmark numbers. It makes serving systems more robust, more adaptive, and more efficient under real-world conditions. The calibration loop means you don't need to babysit it. The hardware-aware scheduler means it degrades gracefully under load rather than falling off a cliff. These are the properties that separate a research prototype from production infrastructure.


The Inference Economics Shift: What DSpark Really Means

DSpark is a technical achievement, but its broader significance is economic. The AI industry is undergoing a shift from "better models" to "better inference" — and DSpark is both a product and an accelerant of that shift.

The Cost Structure of LLM Serving

To understand why DSpark matters economically, you need to understand where the money goes in LLM serving. For a production deployment, the costs break down roughly as follows:

Cost Category

Approximate Share

DSpark Impact

GPU compute (rental or amortized hardware)

60-75%

Reduces by 35-45% via throughput gains

Networking and storage

10-15%

Minimal direct impact

Engineering and operations

10-15%

Some reduction (fewer GPUs to manage)

Power and cooling

5-10%

Proportional to GPU reduction

A 60% per-user speedup with a 51-400% throughput gain means you can serve the same traffic with roughly 35-65% fewer GPUs, or serve 2-5x more traffic with the same GPU fleet. For a company processing billions of tokens per day, the cost savings are measured in millions of dollars annually.

The Serving-Layer Advantage

There's a deeper strategic insight here. Model-level improvements — training a bigger model, using more data, developing better architectures — are expensive and uncertain. They require massive compute clusters, months of training time, and no guarantee that the resulting model will be better in ways that matter to users.

Serving-layer improvements like DSpark are different. They're applied to existing models, require no retraining of the base model, and deliver immediate, measurable speedups. The engineering investment is orders of magnitude smaller than training a new frontier model. The ROI is faster and more predictable.

This is why I think DSpark represents a maturation of the AI industry. In the early years (2020-2023), the only way to get better performance was to build better models. In 2026, we have multiple levers: better models, better inference, better prompting, better orchestration. DSpark is the state of the art in the "better inference" category.

Open-Source as Infrastructure

DeepSeek could have kept DSpark proprietary and used it as a competitive moat for their API service. Instead, they released it as MIT-licensed open source, complete with training code and pre-built checkpoints. This is consistent with their broader strategy — DeepSeek V3, V4, and now DeepSpec have all been released openly.

There's a practical calculus here. By open-sourcing inference optimization, DeepSeek makes speculative decoding a standard part of the LLM serving stack. This benefits the entire ecosystem, which in turn benefits DeepSeek (more efficient serving means more adoption of their models). It also attracts community contributions — bug fixes, optimizations, support for new hardware — that DeepSeek's own engineering team would struggle to produce alone.

The MIT license is particularly significant. It's the most permissive open-source license, allowing commercial use, modification, and redistribution with minimal restrictions. Any company, from startups to enterprises, can deploy DSpark without legal friction. This maximizes adoption and minimizes barriers.

The New Inference Stack

DSpark is part of a broader 2026 trend toward inference-time optimization as a first-class engineering discipline. The modern LLM serving stack now includes:

  • Continuous batching (vLLM, SGLang, TensorRT-LLM)
  • Speculative decoding (DSpark, Eagle3, Medusa)
  • KV cache optimization (quantization, eviction policies, prefix caching)
  • Quantization (FP8, INT4, with techniques like AWQ and GPTQ)
  • Structured generation (constrained decoding for JSON, function calls, code)
  • Context compaction (summarization-based pruning for long conversations)

Each of these techniques independently improves efficiency by some percentage. Combined, they can deliver order-of-magnitude improvements over naive model serving. DSpark's contribution — a 60-85% decode speedup with zero quality loss — is one of the largest single-lever improvements in the stack.

Here's a practical example of how these stack together. A production deployment serving DeepSeek V4 Flash might go through the following optimization journey:

Baseline (naive):                             100% cost, 100% latency
+ Continuous batching (vLLM):                 ~40% cost, ~60% latency
+ FP8 quantization:                           ~25% cost, ~55% latency  
+ KV cache FP8 + prefix caching:              ~20% cost, ~50% latency
+ DSpark speculative decoding:                ~12% cost, ~30% latency
+ Structured generation for JSON outputs:     ~10% cost, ~28% latency

Each layer compounds. The baseline deployment that cost $100K/month in GPU rental might cost $10K/month after the full optimization stack. And because DSpark's quality guarantee means no regression in output quality, there's no reason not to add it once the infrastructure supports it — which, as of mid-2026, it increasingly does.

Closing Thoughts

I've spent a lot of words on DSpark because it rewards close reading. The paper is dense with engineering decisions that make sense only when you understand the full context: the GPU memory wall, the autoregressive bottleneck, the suffix decay problem, the overconfidence of neural networks, the friction between dynamic scheduling and CUDA graphs.

What makes DSpark special isn't any one of these insights. It's the systematic integration — pulling every available lever simultaneously, ensuring they don't interfere with each other, and shipping the result as production-ready open source. That's genuinely hard engineering, and it deserves the attention it's getting.

For teams deploying LLMs at scale: DSpark is worth serious evaluation. The integration cost is modest (especially if you're already on vLLM or SGLang), the speedup is real, and the quality guarantee (identical output distribution) means there's no downside risk to your users' experience. Start with the default configuration, monitor your acceptance rates, let the online calibration converge, and adjust from there.

A Note on the Bigger Technical Picture

I want to close by zooming out to the broader trajectory that DSpark sits within. The history of speculative decoding, compressed into a timeline, looks something like this:

  • 2023: Leviathan et al. and Chen et al. independently formalize speculative decoding. The core insight — draft cheap, verify in parallel — is proven mathematically sound. Early implementations use standalone small models as drafters. The key contribution is the rejection sampling scheme that guarantees distributional equivalence.
  • 2024: The Eagle family (Eagle, Eagle2) introduces the idea of attaching draft heads to the target model's hidden states, dramatically reducing draft cost. Multi-Token Prediction (MTP) training objectives emerge, making the draft head a first-class training target. This is when speculative decoding shifts from "interesting research" to "practical for production."
  • 2025: DFlash explores pure parallel drafting, demonstrating that you can generate an entire draft block in one forward pass — but suffix decay limits practical acceptance lengths. Eagle3 refines the autoregressive approach with better training recipes. vLLM and other serving frameworks add speculative decoding support, making it accessible to non-experts.
  • Mid-2026: DSpark ships. Semi-autoregressive architecture solves the Eagle-vs-DFlash trade-off. Confidence scheduling, hardware-aware verification, and online calibration make speculative decoding truly production-grade. DeepSpec makes the entire pipeline reproducible and extensible. The paper's baseline is MTP-1 — meaning DSpark is measured against an already-optimized system, not a strawman.

This isn't just a story about one paper. It's the maturation of an entire subfield. What was a clever academic trick in 2023 is now an off-the-shelf production optimization in 2026. The barriers to adoption — obscure implementations, framework incompatibility, training complexity — have been systematically dismantled. DSpark didn't just advance the state of the art; it packaged that advancement in a way that the rest of the ecosystem can actually use.

And the trajectory isn't done. DSpark's architecture opens up new questions: can the Markov head be extended to look at two previous tokens instead of one, and would the marginal gain be worth it? Can the confidence head be improved with better calibration techniques from the uncertainty quantification literature? Can the hardware-aware scheduler be extended to make topology-aware decisions in multi-GPU deployments? These are the questions the next round of papers will answer.

For the broader AI community: DSpark is a reminder that the frontier isn't just about bigger models. There's enormous value in making the models we already have run faster, cheaper, and more efficiently. The inference optimization field is still young, and DSpark raises the bar for what's possible. The next time someone tells you that the only way to improve LLM performance is to train a bigger model, point them at DSpark. The serving layer has room for order-of-magnitude improvements — and we're just getting started.

Who Should Adopt DSpark — And Who Should Wait

Rather than end with a generic recommendation, let me be specific about which teams should prioritize DSpark adoption and which can afford to wait:

Adopt now if:

  • You're serving DeepSeek V4 Flash or Pro at scale and latency matters to your users
  • Your workload is code generation, structured output, or other highly predictable tasks
  • You're already on vLLM or SGLang (the integration path is straightforward)
  • You have headroom in your GPU memory budget (the draft model overhead is modest)

Evaluate carefully if:

  • Your workload is predominantly creative writing, open-ended chat, or mathematical reasoning (lower acceptance rates mean smaller speedups)
  • You're GPU-memory-constrained (profile VRAM usage before committing)
  • You're using a model without an existing DSpark checkpoint (training your own draft model is non-trivial)

Wait if:

  • Your serving framework doesn't yet support speculative decoding
  • Your traffic volume doesn't justify the engineering effort of an additional optimization
  • You're still stabilizing your baseline serving stack (get continuous batching and FP8 quantization working first)

DSpark is a significant achievement, but it's not magic. It's a well-engineered optimization that works best when deployed thoughtfully in the right context. That's true of every inference optimization, and being clear-eyed about the trade-offs is what separates production engineering from benchmark chasing.


Personal Learning & Practice Note: This article represents my (Mo Xiao Yu @ Source Code Station No.7, www.fuyuan7.com) personal study and analysis of the DSpark speculative decoding framework based on publicly available papers, documentation, and community resources. All technical descriptions are based on my understanding of the published materials. The analysis, commentary, and deployment recommendations reflect my own perspective as an AI practitioner. This article is intended for educational and informational purposes only and does not constitute professional engineering advice. Performance benchmarks cited are from the DSpark technical paper and third-party reports; your results may vary depending on hardware, workload, and deployment configuration. All model specifications, pricing, GPU memory figures, and availability are subject to change — refer to DeepSeek's official documentation and your hardware vendor for current information. When using overseas AI models or services, please ensure compliance with applicable local regulations and network management requirements. AI-generated content published on domestic platforms may require appropriate labeling per platform policies.

Reprint Statement: Please attribute this article to Mo Xiao Yu @ Source Code Station No.7 (www.fuyuan7.com) when reprinting. All rights to the analysis and original commentary in this article are reserved by the author.

✏️ 发表评论

请先登录后发表评论

前往登录
📊 站点统计
今日发布2 篇
文章总数1289 篇
昨日发布0 篇
本月发布67 篇
建站时间407 天
🔍 搜索
📅 日历
« 2026 » « 08 »
     12
3456789
10111213141516
17181920212223
24252627282930
31      
站长微语

联系站长

微信:165255185
AIGC 技术社区
致力于解码 AI前沿技术 与经验分享
纯粹的技术交流社区

💡 欢迎您的建议与反馈,让社区变得更好

快速通道
联系站长
站长微信二维码
AI交流群
AI交流群二维码
仍在路上

那些寒夜里追赶过的方向

那些冷眼下没放弃的理想

一篇一篇写到现在

仍在路上

"不羁放纵爱自由"

—— 致敬 Beyond
持续创作中 莫潇羽 · 源码七号站