{"id":516180,"date":"2026-06-24T14:51:09","date_gmt":"2026-06-24T14:51:09","guid":{"rendered":"https:\/\/www.newsbeep.com\/ie\/516180\/"},"modified":"2026-06-24T14:51:09","modified_gmt":"2026-06-24T14:51:09","slug":"dflash-speculative-decoding-drafts-whole-token-blocks-in-parallel-for-up-to-15x-higher-throughput-on-nvidia-blackwell","status":"publish","type":"post","link":"https:\/\/www.newsbeep.com\/ie\/516180\/","title":{"rendered":"DFlash Speculative Decoding Drafts Whole Token Blocks in Parallel for Up to 15x Higher Throughput on NVIDIA Blackwell"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Autoregressive large language models generate text one token at a time. Each token waits for the one before it. This serial loop leaves modern GPUs underused and keeps inference slow. The cost grows worse with long Chain-of-Thought reasoning models. Their lengthy outputs make latency the dominant part of generation.<\/p>\n<p class=\"wp-block-paragraph\">Speculative decoding is the standard fix. A small draft model proposes future tokens. The large target model verifies those tokens in parallel. Accepted tokens are kept, so the output stays lossless. But most methods, including the state-of-the-art EAGLE-3, still draft autoregressively. That serial drafting caps real-world speedups near 2\u20133\u00d7.<\/p>\n<p class=\"wp-block-paragraph\">DFlash, introduced by research team from UC San Diego team (z-lab), takes a different route. It is a lightweight block diffusion model built for drafting. Instead of drafting tokens one at a time, it proposes a whole block in a single forward pass. The target model then verifies that block in parallel.<\/p>\n<p class=\"wp-block-paragraph\">The research team reports over 6\u00d7 lossless acceleration across a range of models and tasks. It reaches up to 2.5\u00d7 higher speedup than EAGLE-3. On NVIDIA Blackwell, NVIDIA engineering team reports up to 15\u00d7 higher throughput for gpt-oss-120b. That figure holds at the same user interactivity target.<\/p>\n<p><img decoding=\"async\" data-attachment-id=\"80677\" data-permalink=\"https:\/\/www.marktechpost.com\/2026\/06\/24\/dflash-speculative-decoding-drafts-whole-token-blocks-in-parallel-for-up-to-15x-higher-throughput-on-nvidia-blackwell\/screenshot-2026-06-24-at-12-00-06-am-2\/\" data-orig-file=\"https:\/\/www.newsbeep.com\/ie\/wp-content\/uploads\/2026\/06\/Screenshot-2026-06-24-at-12.00.06-AM-1.png\" data-orig-size=\"1708,922\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;,&quot;alt&quot;:&quot;&quot;}\" data-image-title=\"Screenshot 2026-06-24 at 12.00.06\u202fAM\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/www.marktechpost.com\/wp-content\/uploads\/2026\/06\/Screenshot-2026-06-24-at-12.00.06-AM-1-1024x553.png\" src=\"https:\/\/www.newsbeep.com\/ie\/wp-content\/uploads\/2026\/06\/Screenshot-2026-06-24-at-12.00.06-AM-1.png\" alt=\"\" class=\"wp-image-80677 lazyload\" style=\"aspect-ratio:1.8525083340108952;width:792px;height:auto\"\/>https:\/\/developer.nvidia.com\/blog\/boost-inference-performance-up-to-15x-on-nvidia-blackwell-using-dflash-speculative-decoding\/<\/p>\n<p>What block diffusion drafting changes<\/p>\n<p class=\"wp-block-paragraph\">Block diffusion models denoise a block of masked tokens at once. They blend parallel generation with autoregressive block structure. DFlash applies this idea only to the drafting stage. Verification stays with the trusted autoregressive target model.<\/p>\n<p class=\"wp-block-paragraph\">This split matters for quality. Standalone diffusion LLMs often trail autoregressive models on accuracy. They also need many denoising steps, which slows their raw inference speed. DFlash sidesteps both problems. The draft only needs to be good enough to be accepted. The target\u2019s parallel verification guarantees the final output distribution.<\/p>\n<p class=\"wp-block-paragraph\">A second benefit is drafting cost. An autoregressive drafter\u2019s cost grows linearly with the number of speculative tokens. A diffusion drafter generates all tokens in one parallel pass. So drafting latency stays largely flat as the block grows. This frees DFlash to use deeper, more expressive draft models without adding latency.<\/p>\n<p class=\"wp-block-paragraph\">This separates DFlash from earlier diffusion-drafter work. Methods like DiffuSpec and SpecDiff-2 used massive 7B drafters, capping speedups near 3\u20134\u00d7. DFlash instead uses a small five-layer drafter (eight layers for Qwen3-Coder).<\/p>\n<p>The \u201ctarget knows best\u201d insight<\/p>\n<p class=\"wp-block-paragraph\">DFlash\u2019s core idea is simple: the target knows best. Large autoregressive models\u2019 hidden features encode information about multiple future tokens. DFlash extracts hidden states from several target layers. It fuses them into one compact target context feature. This feature then conditions the draft model.<\/p>\n<p class=\"wp-block-paragraph\">DFlash injects this feature differently than EAGLE-3. EAGLE-3 fuses target features into the draft\u2019s input embeddings only. As draft depth grows, that signal gets diluted. DFlash instead injects the feature into the Key and Value projections of every draft layer. The projected features sit in the draft\u2019s KV cache and persist across drafting iterations.<\/p>\n<p class=\"wp-block-paragraph\">This KV injection lets acceptance length scale with draft depth. A five-layer DFlash drafter generating 16 tokens beats EAGLE-3 generating 8 tokens. It is both lower-latency and higher-acceptance in the paper\u2019s tests. The draft model effectively becomes a diffusion adapter on top of the target.<\/p>\n<p>Two speedup numbers, measured differently<\/p>\n<p class=\"wp-block-paragraph\">The DFlash research\u2019s 6\u00d7 is single-stream lossless acceleration. On Qwen3-8B with greedy decoding (Transformers backend), DFlash averages a 4.86\u00d7 speedup. EAGLE-3 averages 1.76\u00d7 at tree size 16 and 2.02\u00d7 at tree size 60. DFlash peaks at 6.08\u00d7 on MATH-500 (\u03c4 = 7.87) and averages \u03c4 = 6.49 across tasks.<\/p>\n<p class=\"wp-block-paragraph\">NVIDIA\u2019s 15\u00d7 is throughput at a fixed interactivity target. It applies to gpt-oss-120b on eight NVIDIA Blackwell GPUs in a DGX B300 system, using TensorRT-LLM. At the 500\u2013600 tokens\/sec per-user range, DFlash serves more than 15\u00d7 the throughput of autoregressive decoding. That is about 1.5\u00d7 more than EAGLE-3 at the same point.<\/p>\n<p class=\"wp-block-paragraph\">The table below shows the paper\u2019s per-task speedups on Qwen3-8B at temperature 0 (Transformers backend).<\/p>\n<p>Task (Qwen3-8B, temp=0)BaselineEAGLE-3 (16)DFlash (16)DFlash \u03c4GSM8K1.00\u00d71.94\u00d75.15\u00d76.54MATH-5001.00\u00d71.81\u00d76.08\u00d77.87AIME251.00\u00d71.79\u00d75.62\u00d77.08HumanEval1.00\u00d71.89\u00d75.14\u00d76.50MBPP1.00\u00d71.69\u00d74.65\u00d75.95LiveCodeBench1.00\u00d71.57\u00d75.51\u00d77.27MT-Bench1.00\u00d71.63\u00d72.75\u00d74.24Average1.00\u00d71.76\u00d74.86\u00d76.49<\/p>\n<p class=\"wp-block-paragraph\">A separate NVIDIA Speed-Bench comparison measures interactivity speedups at matched concurrency. On gpt-oss-120b, DFlash averages 2.3\u00d7 versus EAGLE-3\u2019s 1.7\u00d7. On Llama 3.1 8B Instruct, DFlash averages 2.8\u00d7 versus EAGLE-3\u2019s 2.2\u00d7.<\/p>\n<p>Use cases with examples<\/p>\n<p class=\"wp-block-paragraph\">DFlash targets latency-sensitive serving where token-by-token generation hurts. Three patterns fit well:<\/p>\n<p>Coding agents: Code generation needs fast, interactive responses. On Gemma 4 31B with vLLM, NVIDIA reports up to 5.8\u00d7 on Math500 at concurrency 1. HumanEval reaches 5.6\u00d7. Faster drafts mean shorter wait times inside agent loops.<\/p>\n<p>Reasoning models: Long Chain-of-Thought traces dominate generation time. With thinking mode enabled, DFlash holds roughly 4.5\u00d7 under greedy decoding on Qwen3-4B and Qwen3-8B. Under sampling, it holds about 3.9\u00d7. This cuts the cost of long reasoning outputs.<\/p>\n<p>Serving and throughput: DFlash also raises serving throughput. On SGLang with a B200 GPU, it reaches up to 5.1\u00d7 on Qwen3-8B (Math500, concurrency 1). Gains taper as concurrency rises but stay positive, so serving cost still drops.<\/p>\n<p>Running DFlash<\/p>\n<p class=\"wp-block-paragraph\">DFlash ships with checkpoints and framework support, so adoption needs little code. On vLLM, you swap an EAGLE-3 config for a DFlash one. No application refactoring is required.<\/p>\n<p>vllm serve Qwen\/Qwen3.5-27B \\<br \/>\n  &#8211;speculative-config &#8216;{&#8220;method&#8221;: &#8220;dflash&#8221;, &#8220;model&#8221;: &#8220;z-lab\/Qwen3.5-27B-DFlash&#8221;, &#8220;num_speculative_tokens&#8221;: 15}&#8217; \\<br \/>\n  &#8211;attention-backend flash_attn \\<br \/>\n  &#8211;max-num-batched-tokens 32768<\/p>\n<p class=\"wp-block-paragraph\">The Transformers backend supports Qwen3 and LLaMA-3.1 models. It exposes a spec_generate call that pairs a draft model with a target model.<\/p>\n<p>from transformers import AutoModel, AutoModelForCausalLM, AutoTokenizer<\/p>\n<p>draft = AutoModel.from_pretrained(<br \/>\n    &#8220;z-lab\/Qwen3-8B-DFlash-b16&#8243;, trust_remote_code=True,<br \/>\n    dtype=&#8221;auto&#8221;, device_map=&#8221;cuda:0&#8243;).eval()<br \/>\ntarget = AutoModelForCausalLM.from_pretrained(<br \/>\n    &#8220;Qwen\/Qwen3-8B&#8221;, dtype=&#8221;auto&#8221;, device_map=&#8221;cuda:0&#8243;).eval()<br \/>\ntokenizer = AutoTokenizer.from_pretrained(&#8220;Qwen\/Qwen3-8B&#8221;)<\/p>\n<p>messages = [{&#8220;role&#8221;: &#8220;user&#8221;, &#8220;content&#8221;: &#8220;How many positive whole-number divisors does 196 have?&#8221;}]<br \/>\ninput_ids = tokenizer.apply_chat_template(<br \/>\n    messages, return_tensors=&#8221;pt&#8221;, add_generation_prompt=True,<br \/>\n    enable_thinking=False).to(draft.device)<\/p>\n<p>output = draft.spec_generate(<br \/>\n    input_ids=input_ids, max_new_tokens=2048, temperature=0.0,<br \/>\n    target=target, stop_token_ids=[tokenizer.eos_token_id])<br \/>\nprint(tokenizer.decode(output[0], skip_special_tokens=False))<\/p>\n<p>Key Takeaways<\/p>\n<p>DFlash drafts an entire token block in one forward pass, not one token at a time.<\/p>\n<p>It injects target hidden features into every draft layer\u2019s KV cache, scaling acceptance length with depth.<\/p>\n<p>Research Paper\u2019s metrics: up to 6.08\u00d7 lossless speedup on Qwen3-8B; NVIDIA test: up to 15\u00d7 throughput on Blackwell at fixed interactivity.<\/p>\n<p>A lightweight five-layer drafter replaces the 7B drafters that capped earlier diffusion methods near 3\u20134\u00d7.<\/p>\n<p>Interactive Explainer<\/p>\n<p>\n=TOTAL) return;<br \/>\n      arCells[i].classList.add(&#8216;accept&#8217;);<br \/>\n      i++;<br \/>\n      arSteps.textContent=i; arTok.textContent=i; arTime.textContent=i;<br \/>\n      timers.push(setTimeout(arStep, 70));<br \/>\n    }<br \/>\n    arStep();<\/p>\n<p>    \/\/ &#8212;- animate DFlash: block by block &#8212;-<br \/>\n    var pos=0, pass=0;<br \/>\n    function dfBlock(){<br \/>\n      if(pos&gt;=TOTAL){ finish(); return; }<br \/>\n      pass++;<br \/>\n      var blockEnd=Math.min(pos+blockSize, TOTAL);<br \/>\n      \/\/ 1) show drafted block (amber); clear any prior reject state at the frontier<br \/>\n      for(var j=pos;j in &#8216;+dfPasses+<br \/>\n        &#8216; target passes vs &#8216;+arPasses+&#8217; for autoregressive. Fewer sequential &#8216;+<br \/>\n        &#8216;verifications \u2192 &#8216;+spd.toFixed(2)+&#8217;\u00d7 faster at \u03c4=&#8217;+tau+&#8217;, block size &#8216;+blockSize+&#8217;.&#8217;;<br \/>\n    }<br \/>\n  }<br \/>\n  runBtn.addEventListener(&#8216;click&#8217;, run);<\/p>\n<p>  syncLabels();<br \/>\n})();<\/p>\n","protected":false},"excerpt":{"rendered":"Autoregressive large language models generate text one token at a time. Each token waits for the one before&hellip;\n","protected":false},"author":2,"featured_media":516181,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[61,60,80],"class_list":["post-516180","post","type-post","status-publish","format-standard","has-post-thumbnail","category-technology","tag-ie","tag-ireland","tag-technology"],"_links":{"self":[{"href":"https:\/\/www.newsbeep.com\/ie\/wp-json\/wp\/v2\/posts\/516180","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.newsbeep.com\/ie\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.newsbeep.com\/ie\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.newsbeep.com\/ie\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.newsbeep.com\/ie\/wp-json\/wp\/v2\/comments?post=516180"}],"version-history":[{"count":0,"href":"https:\/\/www.newsbeep.com\/ie\/wp-json\/wp\/v2\/posts\/516180\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.newsbeep.com\/ie\/wp-json\/wp\/v2\/media\/516181"}],"wp:attachment":[{"href":"https:\/\/www.newsbeep.com\/ie\/wp-json\/wp\/v2\/media?parent=516180"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.newsbeep.com\/ie\/wp-json\/wp\/v2\/categories?post=516180"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.newsbeep.com\/ie\/wp-json\/wp\/v2\/tags?post=516180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}