Research · Inference · Oct 2026
Two DeltaNVIDIA

Two Delta makes NVIDIA Nemotron 3.5 Super even faster with DCOCO

Same model quality, faster responses: DCOCO helps Nemotron 3.5 Super accept more drafted tokens per verification pass.

Through our collaboration with NVIDIA, we gained early access to Nemotron 3.5 Super VL to optimize its inference with DCOCO, our speculative decoding method. The goal is straightforward: deliver the same model quality with faster responses.

Nemotron 3.5 Super VL is an open, customizable model combining agentic reasoning, tool use, and multimodal understanding for specialized workflows in long-running enterprise agents.

Speculative decoding lets a small, fast drafter propose several tokens that the larger model verifies in a single pass. When multiple tokens are accepted, generation accelerates while preserving the target model’s output distribution.

The challenge is getting more of those proposals accepted. A drafter often has the right token among its leading candidates but chooses a combination that the target model rejects. DCOCO improves those choices by combining token embeddings with contextual signals from hidden states informed by the target model’s activations. It scores candidate combinations in parallel and conditions each subsequent choice on the actual token selected.

By improving the drafter’s proposals, DCOCO helps Nemotron 3.5 Super accept more tokens per verification pass, delivering more output from each pass while retaining the target model’s quality.

Faster inference starts with better drafts

To make Nemotron 3.5 Super faster, we need it to accept more tokens in each verification pass without spending the saved time on drafting.

Parallel drafters such as DFlash generate an entire block in one pass. That makes drafting fast, but each position predicts from the existing context without knowing which tokens will be selected elsewhere in the block. Individually plausible predictions can form an inconsistent sequence.

Consider “These key is missing.” Each choice might make sense on its own, but the words don’t fit together. DCOCO accounts for the selected tokens: “These” favors “keys,” and “keys” then favors “are,” producing “These keys are missing.”

A parallel draft reads “These key is missing”; DCOCO selects “These keys are missing” from the same candidates.
Figure 1. A parallel draft can combine individually plausible tokens into an inconsistent continuation. DCOCO uses token identities and contextual information to select a consistent path through the available candidates. Word-level example shown for illustration.

This consistency matters because verification accepts only the tokens before the first rejection. Improving an early choice can allow more of the block to pass, increasing the amount of text Nemotron generates per verification step. The correction must also stay cheap enough to deliver a net speedup.

How DCOCO works

DCOCO stands for DFlash Contextual Corrector. It sits between the parallel drafter and the target’s verification step.

Keep the leading candidates

DCOCO retains the top-$K$ candidates at each of the $B$ draft positions. Let $c_{i,k}$ denote candidate $k$ at position $i$, $h_i$ the drafter’s hidden state, and $\ell_i(k)$ its original logit, or score before normalization. In the example (Figures 1 and 2), a position might retain candidates “key,” “keys,” and “locks.”

This gives the corrector alternatives to choose from. Correction is limited to that shortlist: if the desired token is absent, DCOCO cannot select it.

Score neighboring candidates in parallel

The correction is grounded in both which tokens are being considered and what the model knows about the context. DCOCO looks up each candidate’s embedding $\mathrm{Emb}(c_{i,k})$ in the frozen token-embedding table. This gives it an explicit representation of that candidate’s identity. It combines the embedding with the position’s hidden state $h_i$ from DFlash, whose predictions are conditioned on target-model activations from the existing prefix.

These signals are projected into a compact space, normalized, and fused into a candidate representation $z_{i,k}$ via function $f$. In shorthand:

$$z_{i,k} = f\big(\mathrm{Emb}(c_{i,k}),\, h_i\big)$$

The embedding tells the corrector which candidate it is evaluating; the hidden state provides contextual information for that position. DCOCO also combines the hidden states of each neighboring pair of positions into $s_p$, a shared context representation reused across all candidate pairs at those positions.

A small shared feed-forward network, $\Delta_\theta$, uses both candidates’ fused representations, the shared pair context, and the original draft logits to compute a correction. For candidate $a$ at position $p$ and candidate $b$ at position $p+1$, the corrected transition score is:

$$S_p(a, b) = \ell_{p+1}(b) + \Delta_\theta\big(s_p,\, z_{p,a},\, z_{p+1,b},\, \ell_p(a),\, \ell_{p+1}(b)\big)$$

The first term, $\ell_{p+1}(b)$, is the draft unary logit: the drafter’s original score for the later candidate. The second term, $\Delta_\theta$, is the learned correction. Through $z_{p,a}$ and $z_{p+1,b}$, it sees the embeddings of both candidate tokens together with their position-specific context; $s_p$ supplies their shared pair context. These inputs let it learn how the score for $b$ should change when $a$ is the predecessor in this particular context.

For example, the embedding of “These” provides an explicit signal that can raise the score of “keys” relative to “key,” while the hidden states ground that adjustment in the surrounding text. DCOCO evaluates each candidate pair with both token identity and context available.

Each neighboring pair of positions has $K^2$ candidate combinations. DCOCO computes all $(B-1)K^2$ transition scores together, reusing information from the existing DFlash pass. The corrector adds no attention layer and requires no additional drafter pass.

Select using the realized token identities

Once the scores are ready, DCOCO selects tokens from left to right. It keeps the drafter’s first choice at the first position. At each following position, it chooses the highest-scoring candidate given the token actually selected immediately before it:

$$k_1 = \arg\max_k \ell_1(k), \qquad k_{p+1} = \arg\max_b S_p(k_p, b)$$

Here, $k_p$ is the selected candidate index at position $p$; the proposed token is $c_{p,k_p}$. Each step reads the scores associated with that selected predecessor.

For the illustrative draft, this can turn “These key is missing” into “These keys are missing.”

All possible predecessor identities have already been represented through their embeddings during parallel scoring. Once a token is selected, its realized identity determines which precomputed scores are used at the next position. Only this short lookup-and-selection step is sequential; the neural computation has already finished.

The selection rule also reflects how verification works. It prioritizes the next token in the prefix, since later tokens are useful only if the earlier ones are accepted.

DCOCO architecture: candidate embeddings and DFlash hidden states feed a shared MLP that scores all neighboring candidate pairs in parallel; selection follows the scores of each realized predecessor before the target verifies the block.
Figure 2. DCOCO combines candidate embeddings with DFlash hidden states informed by the target’s prefix activations. A shared MLP scores all neighboring candidate pairs in parallel. Selection then follows the scores associated with each realized predecessor, and the target verifies the selected block.

How we train the corrector

DCOCO trains the drafter and corrector together using supervision from the target model. The drafter retains its original training objective. The corrector learns to favor candidate pairs matching the target’s preferred tokens under the training context.

Training gives greater weight to earlier positions, where a rejection would invalidate more of the proposed block. Pairs whose target tokens are missing from the candidate lists are excluded from the correction loss.

The corrector initially makes no adjustment: $\Delta_\theta = 0$, so $S_p(a, b) = \ell_{p+1}(b)$. Selection therefore reproduces DFlash’s original choices at initialization. Training then teaches the corrector when to change those choices. The token embeddings remain frozen.

Results on NVIDIA Nemotron 3.5 Super

In collaboration with NVIDIA, we trained DCOCO for Nemotron 3.5 Super. We compare vanilla autoregressive decoding, DFlash, DSpark, and DCOCO on ten datasets at temperatures $T = 0$ and $T = 1$. $T = 0$ uses greedy decoding; $T = 1$ uses stochastic decoding.

The reported runs use serving concurrencies $C = 1$, 4, 8, 16, and 32. All speculative methods use the $k = 15$ setting from the evaluation tables. Evaluation is performed on NVIDIA DGX B200, using the vLLM framework.

The target remains responsible for verification. With the appropriate speculative verification rule, greedy decoding preserves the target’s token choices, and stochastic decoding preserves its output distribution.

End-to-end throughput

We evaluate Nemotron 3.5 Super on ten datasets spanning math, code, and general-purpose generation. The detailed breakdown below covers greedy decoding ($T = 0$) with thinking disabled. A separate summary reports averages across the same ten datasets for each of the four thinking and temperature configurations.

Both tables report output throughput in tokens per second at concurrency $C = 1$ and tensor parallelism TP = 2, with speedup over vanilla decoding in parentheses. At $C = 1$, vanilla, DFlash, DSpark, and DCOCO average three runs at $T = 0$ and three seeds (42, 43, and 44) at $T = 1$.

CategoryDatasetVanilla decodingDFlashDSparkDCOCO
MathMATH-500205.597405.543 (1.97×)417.680 (2.03×)504.653 (2.45×)
MathAIME-25208.665430.138 (2.06×)434.105 (2.08×)550.280 (2.64×)
MathGSM8K194.647383.811 (1.97×)397.688 (2.04×)477.271 (2.45×)
CodeHumanEval201.209417.130 (2.07×)435.895 (2.17×)528.126 (2.62×)
CodeMBPP183.073379.781 (2.07×)389.463 (2.13×)459.751 (2.51×)
CodeLiveCodeBench206.277376.635 (1.83×)383.081 (1.86×)459.069 (2.23×)
GeneralMT-Bench207.044262.870 (1.27×)254.048 (1.23×)293.776 (1.42×)
GeneralArena-Hard-v2209.235225.824 (1.08×)217.973 (1.04×)250.772 (1.20×)
GeneralAlpaca207.526234.661 (1.13×)231.076 (1.11×)262.204 (1.26×)
GeneralSpeedBench200.534265.135 (1.32×)266.404 (1.33×)310.982 (1.55×)
AllAverage202.381338.153 (1.68×)342.741 (1.70×)409.688 (2.03×)
Table 1. Per-dataset throughput with thinking off and $T = 0$. Throughput in tok/s at concurrency $C = 1$. DFlash, DSpark, and DCOCO use $k = 15$. Parentheses show speedup over the corresponding vanilla baseline. The Average row gives the arithmetic mean of dataset throughputs and, separately, the arithmetic mean of per-dataset speedups, giving each dataset equal weight.
ThinkingTemperatureVanilla decodingDFlashDSparkDCOCO
Off$T = 0$202.381338.153 (1.68×)342.741 (1.70×)409.688 (2.03×)
Off$T = 1$203.679309.649 (1.52×)311.967 (1.54×)364.405 (1.79×)
On$T = 0$213.041342.809 (1.61×)351.878 (1.66×)411.630 (1.94×)
On$T = 1$215.328313.490 (1.46×)320.575 (1.49×)365.163 (1.70×)
Table 2. Average throughput across the four decoding configurations. Each row averages the same ten datasets at concurrency $C = 1$ and tensor parallelism TP = 2, using the same averaging convention as Table 1. Speedups are calculated against each dataset’s vanilla baseline in the corresponding configuration before averaging.

How we compute speedups. For each dataset and configuration, speedup is computed against the corresponding vanilla baseline before averaging:

$$\text{speedup}(\text{method}) = \frac{\text{throughput}(\text{method})}{\text{throughput}(\text{vanilla})}$$

We also report the incremental gain over DFlash:

$$\text{DCOCO gain over DFlash}\ (\%) = 100 \times \left[\frac{\text{throughput}(\text{DCOCO})}{\text{throughput}(\text{DFlash})} - 1\right]$$
Bar charts of mean throughput across ten datasets at concurrency 1, thinking off: DCOCO is highest at both T = 0 and T = 1, ahead of DSpark, DFlash and vanilla decoding.
Figure 3. Mean throughput across ten datasets at concurrency $C = 1$, thinking off, and TP = 2. Bars are recomputed from the per-dataset measurements. The left panel uses $T = 0$ and the right panel $T = 1$.

With thinking disabled and one request at a time, DCOCO is faster than both vanilla decoding and DFlash on all ten datasets at both temperatures. Its mean per-dataset speedup over vanilla decoding is 2.03× at $T = 0$ and 1.79× at $T = 1$. Relative to DFlash, the mean per-dataset throughput gain is 19.8% and 16.7%, respectively.

Scaling to higher concurrency

To test how the gains carry over to serving multiple requests, we increase concurrency from 1 to 4, 8, 16, and 32 with thinking disabled and tensor parallelism TP = 2. We evaluate both $T = 0$ and $T = 1$ on the same ten datasets, comparing total output throughput at each serving load.

DCOCO maintains higher throughput than DFlash on every dataset at every tested concurrency and temperature. Across $C = 4\text{–}32$, its mean per-dataset gain over DFlash ranges from 17.8% to 22.2% at $T = 0$ and from 16.6% to 24.3% at $T = 1$. At $C = 32$, DCOCO reaches mean throughput of 3,285.679 tok/s at $T = 0$ and 3,036.602 tok/s at $T = 1$, with mean per-dataset speedups over vanilla decoding of 2.44× and 2.25×, respectively.

DCOCO also maintains higher average throughput than DSpark at every tested concurrency and temperature. Across $C = 4\text{–}32$, its mean per-dataset gain over DSpark ranges from 12.7% to 16.3% at $T = 0$ and from 13.7% to 15.7% at $T = 1$.

These results show that DCOCO’s throughput benefit over DFlash persists as serving concurrency increases. Average DCOCO throughput exceeds vanilla decoding, DFlash, and DSpark at every tested concurrency in both temperature settings.

Grouped bar charts of total output throughput at concurrency 1, 4, 8, 16 and 32 for T = 0 and T = 1; DCOCO's bar is the tallest in every group.
Figure 4. Total output throughput as serving concurrency increases on NVIDIA Nemotron 3.5 Super with thinking off and TP = 2. Each group shows vanilla decoding (grey), DFlash (yellow), DSpark (purple) and DCOCO (light green); bars are arithmetic means over the same ten datasets. Panels use $T = 0$ and $T = 1$ with a shared, zero-based y-axis. Concurrency groups are equally spaced for comparison.

Draft acceptance

With thinking disabled, DCOCO has higher reported acceptance length than both DFlash and DSpark on every dataset at every measured concurrency and temperature. At $C = 1$ and $T = 0$, the means are 3.80 for DFlash, 4.12 for DSpark, and 4.80 for DCOCO. At $T = 1$, they are 3.45, 3.74, and 4.28, respectively. Across $C = 1\text{–}32$, DCOCO’s mean stays between 4.78 and 4.82 at $T = 0$ and between 4.23 and 4.28 at $T = 1$.

Grouped bar charts of acceptance length at each concurrency for T = 0 and T = 1; DCOCO stays near 4.8 and 4.3, above DSpark and DFlash.
Figure 5. Reported acceptance length for DFlash (yellow), DSpark (light purple), and DCOCO (light green), averaged across ten datasets at each concurrency, with thinking off and TP = 2. Panels show $T = 0$ and $T = 1$.

DCOCO combines higher reported acceptance with higher average end-to-end throughput than both DFlash and DSpark at every measured serving load and temperature.

Conclusion

DCOCO makes Nemotron 3.5 Super even faster while preserving its output quality. By improving draft acceptance through parallel correction, with no additional drafter pass, it delivers higher throughput than DFlash across the datasets, temperatures, and concurrency levels we tested in our collaboration with NVIDIA. More tokens accepted per pass means faster generation from the same model.

The method, ablations and results on Qwen3 and Llama verifiers are in the paper, arxiv.org/abs/2610.12570, and on the DCOCO project page.

Try the model on Hugging Face
Paper · arXiv 2610.12570 Code · GitHub DCOCO project page