[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-93785":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":15,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":16,"rankGlobal":10,"rankLanguage":10,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":18,"hasPages":18,"topics":20,"createdAt":10,"pushedAt":10,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":15,"starSnapshotCount":15,"syncStatus":14,"lastSyncTime":27,"discoverSource":28},93785,"FlowBlock","Red-EAD\u002FFlowBlock","Red-EAD","FlowBlock: Wavefront-Parallel Decoding Framework for Self-Correcting Diffusion Language Models","",null,"Python",111,1,2,0,40.9,"Apache License 2.0",false,"main",[21,22,23],"diffusion","diffusion-models","large-language-models","2026-09-21 04:01:26","\u003Cdiv align=\"center\">\n\n\u003Cimg src=\"assets\u002Fflowblock_logo.svg\" alt=\"FlowBlock\" width=\"760\"\u002F>\n\n\u003Ch3>Wavefront-Parallel Decoding for Self-Correcting Diffusion Language Models\u003C\u002Fh3>\n\n\u003Cp>\n  \u003Ca href=\"LICENSE\">\u003Cimg alt=\"License\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache--2.0-4E94CE.svg\">\u003C\u002Fa>\n  \u003Cimg alt=\"Python\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPython-3.11-3776AB.svg\">\n  \u003Cimg alt=\"PyTorch\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPyTorch-2.8-EE4C2C.svg\">\n  \u003Cimg alt=\"Backend\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FBackend-SGLang-8A2BE2.svg\">\n  \u003Cimg alt=\"Training\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTraining-Free-E0453F.svg\">\n\u003C\u002Fp>\n\n\u003C\u002Fdiv>\n\n**FlowBlock** is a **training-free** parallel decoding framework for block-wise\ndiffusion language models (dLLMs). Block-wise dLLMs such as LLaDA-2.x decode\none block at a time, which makes inter-block decoding strictly serial.\nFlowBlock observes that the **token-to-token (T2T)** self-correction ability of\nLLaDA-2.1 series enable a downstream block start from an *informative draft* instead of\na *finalized* predecessor — so **block finality becomes a scheduling resource\nrather than a hard dependency**.\n\nFlowBlock is built on two mechanisms:\n\n- **Gated Wavefront Decoding (GWD)** — admits blocks into a bounded wavefront\n  only when a readiness gate (`SPAWN_TH`) is satisfied, jointly refines active\n  blocks via T2T editing, and commits blocks in order under a windowed\n  block-causal mask that preserves **exact** frozen-prefix KV-cache reuse.\n- **Heterogeneous Wavefront Packing (HWP)** — gives each request its own\n  wavefront while packing all active windows into dense, shape-stable batched\n  forwards, so asynchronous progress stays GPU-efficient in batched serving.\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"assets\u002Ffig_overview_new.png\" alt=\"FlowBlock overview\" width=\"92%\"\u002F>\n\u003C\u002Fdiv>\n\n## ✨ Highlights\n\n- **Up to 2.95× \u002F 4.01× higher TPS** than LLaDA-2.1 \u002F LLaDA-2.0 under batched\n  serving (1.57× \u002F 3.17× at batch size 1), with **up to 53.6% \u002F 77.1% lower\n  latency**.\n- **Accuracy preserved or improved**: +1.3 points on average across eight\n  math \u002F code benchmarks.\n- **No training**: runs the unmodified LLaDA-2.1 series\n  weights.\n\n## 🛠️ Installation\n\nRequirements: Linux, NVIDIA GPU(s) with ~80 GB memory for the 16B-A1B MoE\ncheckpoints, CUDA 12.x driver.\n\n```bash\ngit clone \u003Cthis-repo-url> FlowBlock\ncd FlowBlock\n\nconda create -n flowblock python=3.11 -y\nconda activate flowblock\n\n# 1) Install PyTorch matching your CUDA version (validated: 2.8.0 + cu128)\npip install torch==2.8.0 --index-url https:\u002F\u002Fdownload.pytorch.org\u002Fwhl\u002Fcu128\n\n# 2) Install the base dependencies (sglang, lm-eval, ...)\npip install -r requirements.txt\n\n# 3) Install vLLM last — this is a separate step on purpose\npip install vllm==0.10.2\n```\n\nThe `dinfer` package is used directly from source — the evaluation scripts set\n`PYTHONPATH` automatically, no `pip install` step is needed. Verify the setup:\n\n```bash\nPYTHONPATH=\"$PWD\u002FdInfer\u002Fpython\" python -c \\\n  \"from dinfer.decoding import FlowBlockJointDiffusionLLM, flowblock_packed; print('FlowBlock import OK')\"\n```\n\n### Models\n\n| Method | Checkpoint |\n| --- | --- |\n| `flowblock`, `llada2.1` | [inclusionAI\u002FLLaDA2.1-mini](https:\u002F\u002Fhuggingface.co\u002FinclusionAI\u002FLLaDA2.1-mini) |\n| `llada2.0` | [inclusionAI\u002FLLaDA2.0-mini](https:\u002F\u002Fhuggingface.co\u002FinclusionAI\u002FLLaDA2.0-mini) |\n\n```bash\npython dInfer\u002Fevaluations\u002Fdownload_hf_model.py \\\n  --repo_id inclusionAI\u002FLLaDA2.1-mini --local_dir \u002Fpath\u002Fto\u002FLLaDA2.1-mini\n```\n\n### Datasets\n\nBenchmark data is fetched automatically on first run (GSM8K is downloaded to\n`test_datasets\u002F`, the other tasks load from the Hugging Face Hub). For\nair-gapped machines, prefetch the code benchmarks once on a connected host:\n\n```bash\nTEST_DATASETS_ROOT=.\u002Ftest_datasets\u002Fcode bash dInfer\u002Fevaluations\u002Fprefetch_code_datasets.sh\n```\n\n## 🚀 Running Evaluations\n\n`run_eval.sh` is the single entry point. Pick a **method**, a **task family**\n(or a specific benchmark), and a **model path**:\n\n```bash\n# FlowBlock on math (defaults: GSM8K, W=2, SPAWN_TH=0.6)\nbash run_eval.sh --method flowblock --task math --model-path \u002Fpath\u002Fto\u002FLLaDA2.1-mini\n\n# FlowBlock on code (defaults: HumanEval, W=2, SPAWN_TH=0.8)\nbash run_eval.sh --method flowblock --task code --model-path \u002Fpath\u002Fto\u002FLLaDA2.1-mini\n\n# Serial baselines\nbash run_eval.sh --method llada2.1 --benchmark math500 --model-path \u002Fpath\u002Fto\u002FLLaDA2.1-mini\nbash run_eval.sh --method llada2.0 --task math --model-path \u002Fpath\u002Fto\u002FLLaDA2.0-mini\n\n# FlowBlock and LLaDA-2.1 back-to-back on the same seed-fixed subset,\n# 4 GPUs (data-parallel), batch size 8 per GPU\nbash run_eval.sh --method flowblock,llada2.1 --task math \\\n  --model-path \u002Fpath\u002Fto\u002FLLaDA2.1-mini --gpus 0,1,2,3 --batch-size 8\n```\n\n### Benchmarks\n\n| `--task` | `--benchmark` options | Default |\n| --- | --- | --- |\n| `math` | `gsm8k`, `math500`, `algebra`, `asdiv` | `gsm8k` |\n| `code` | `humaneval`, `humaneval_plus`, `mbpp`, `mbpp_plus` | `humaneval` |\n\n### Key options and defaults\n\n| Option | Default | Meaning |\n| --- | --- | --- |\n| `--method` | `flowblock` | `flowblock` \\| `llada2.1` \\| `llada2.0` (comma-separated to combine) |\n| `--window` | `2` | FlowBlock wavefront window size `W` |\n| `--spawn-th` | `0.6` math \u002F `0.8` code | Readiness gate threshold `θ_spawn` |\n| `--batch-size` | `4` | Per-GPU batch size |\n| `--gen-length` | `2048` | Max generation length |\n| `--block-length` | `32` | Diffusion block length |\n| `--threshold` | `0.95` (2.0) \u002F `0.5` math, `0.9` code (2.1 & FlowBlock) | Decode \u002F commit threshold |\n| `--gpus` | `0` | GPU ids; one data-parallel shard per GPU |\n| `--num-samples` | full benchmark | Evaluate a seed-shuffled subset |\n| `--output-dir` | `outputs\u002F\u003Cbenchmark>_\u003Ctimestamp>` | Result directory |\n\nRun `bash run_eval.sh --help` for the full list. Results land in:\n\n```\n\u003Coutput-dir>\u002F\u003Cmethod>\u002Fsummary.json    # accuracy, TPS, latency, TPF per method\n\u003Coutput-dir>\u002Fglobal_summary.log       # side-by-side comparison table\n```\n\nFor multi-configuration sweeps (block lengths, batch sizes, thresholds), edit\n`RUN_COMBOS` in `dInfer\u002Fevaluations\u002Frun_flowblock_joint_batch_compare_loop.sh`\nand run it directly; `aggregate_global_results.py` merges everything into one\ntable afterwards.\n\n> ⚠️ **Code benchmarks execute model-generated Python** (`HF_ALLOW_CODE_EVAL=1`).\n> Run them only in an isolated environment (container \u002F VM without secrets).\n\n## 📊 Results Preview\n\nUnder the paper settings (block length 32), FlowBlock consistently dominates\nthe serial baselines in the throughput–latency plane while matching or\nimproving accuracy.\n\n### Single-request decoding (batch size 1)\n\nMain results at batch size 1 on a single 80 GB GPU (block length 32,\ngeneration length 2048; FlowBlock uses `W=2` with per-task spawn thresholds).\nBest value per benchmark in **bold**.\n\n\u003Ctable>\n  \u003Cthead>\n    \u003Ctr>\n      \u003Cth rowspan=\"2\" align=\"left\" style=\"text-align:left;\">Benchmark\u003C\u002Fth>\n      \u003Cth colspan=\"4\" align=\"center\" style=\"text-align:center;\">LLaDA-2.0\u003C\u002Fth>\n      \u003Cth colspan=\"4\" align=\"center\" style=\"text-align:center;\">LLaDA-2.1\u003C\u002Fth>\n      \u003Cth colspan=\"4\" align=\"center\" style=\"text-align:center;\">\u003Cb>FlowBlock\u003C\u002Fb>\u003C\u002Fth>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Cth align=\"center\" style=\"text-align:center;\">Acc\u003C\u002Fth>\u003Cth align=\"center\" style=\"text-align:center;\">TPF\u003C\u002Fth>\u003Cth align=\"center\" style=\"text-align:center;\">TPS\u003C\u002Fth>\u003Cth align=\"center\" style=\"text-align:center;\">Lat\u003C\u002Fth>\n      \u003Cth align=\"center\" style=\"text-align:center;\">Acc\u003C\u002Fth>\u003Cth align=\"center\" style=\"text-align:center;\">TPF\u003C\u002Fth>\u003Cth align=\"center\" style=\"text-align:center;\">TPS\u003C\u002Fth>\u003Cth align=\"center\" style=\"text-align:center;\">Lat\u003C\u002Fth>\n      \u003Cth align=\"center\" style=\"text-align:center;\">Acc\u003C\u002Fth>\u003Cth align=\"center\" style=\"text-align:center;\">TPF\u003C\u002Fth>\u003Cth align=\"center\" style=\"text-align:center;\">TPS\u003C\u002Fth>\u003Cth align=\"center\" style=\"text-align:center;\">Lat\u003C\u002Fth>\n    \u003C\u002Ftr>\n  \u003C\u002Fthead>\n  \u003Ctbody>\n    \u003Ctr>\n      \u003Ctd align=\"left\">GSM8K\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">92.49\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">2.04\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">82.6\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">4.17\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">92.49\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">4.46\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">176.6\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">2.05\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>92.65\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>6.73\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>254.2\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>1.34\u003C\u002Fb>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd align=\"left\">MATH500\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">73.40\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">2.59\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">104.6\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">11.25\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>77.00\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">5.34\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">211.7\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">5.40\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">76.20\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>8.86\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>332.1\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>3.44\u003C\u002Fb>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd align=\"left\">Minerva-Algebra\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">91.24\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">3.00\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">120.9\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">6.50\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>93.60\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">6.29\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">247.6\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">2.87\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">93.51\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>10.14\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>378.9\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>1.81\u003C\u002Fb>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd align=\"left\" style=\"border-bottom:2px solid #999;\">ASDIV\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">92.36\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">2.03\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">81.9\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">2.94\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">\u003Cb>92.89\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">4.43\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">174.5\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">1.50\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">92.80\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">\u003Cb>6.36\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">\u003Cb>239.7\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">\u003Cb>1.01\u003C\u002Fb>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd align=\"left\">HumanEval\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">84.76\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">4.37\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">159.6\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">2.16\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">82.93\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">4.93\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">180.1\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">1.79\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>86.59\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>8.41\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>279.4\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>1.15\u003C\u002Fb>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd align=\"left\">HumanEval+\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">79.27\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">4.37\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">162.5\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">2.13\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">77.44\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">4.93\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">182.8\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">1.76\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>82.32\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>8.41\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>282.4\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>1.14\u003C\u002Fb>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd align=\"left\">MBPP\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">79.16\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">2.75\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">105.1\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">2.24\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">82.20\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">3.26\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">124.2\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">2.09\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>83.61\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>4.43\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>162.1\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>1.53\u003C\u002Fb>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd align=\"left\" style=\"border-bottom:2px solid #999;\">MBPP+\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">84.39\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">2.78\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">108.7\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">2.18\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">87.04\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">3.30\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">125.8\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">1.96\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">\u003Cb>88.36\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">\u003Cb>4.47\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">\u003Cb>161.3\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;border-bottom:2px solid #999;\">\u003Cb>1.39\u003C\u002Fb>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n    \u003Ctr>\n      \u003Ctd align=\"left\">\u003Cb>Average\u003C\u002Fb>\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">84.63\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">2.99\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">115.7\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">4.20\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">85.70\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">4.62\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">177.9\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">2.43\u003C\u002Ftd>\n      \u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>87.00\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>7.23\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>261.2\u003C\u002Fb>\u003C\u002Ftd>\u003Ctd align=\"center\" style=\"text-align:center;\">\u003Cb>1.60\u003C\u002Fb>\u003C\u002Ftd>\n    \u003C\u002Ftr>\n  \u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\u003Csub>Acc = accuracy (%) · TPF = tokens per forward pass · TPS = tokens per\nsecond · Lat = per-request latency (s).\u003C\u002Fsub>\n\nOn average FlowBlock reaches **87.00** accuracy — 1.3 points above LLaDA-2.1\n(85.70) — while delivering **1.45× \u002F 2.35×** the throughput of LLaDA-2.1 \u002F\nLLaDA-2.0 (up to 1.57× \u002F 3.17×).\n\n### Batched serving\n\n**Math benchmarks — batched serving (TPS ↑ \u002F latency ↓ vs. batch size):**\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"assets\u002Ffig_batch_math.png\" alt=\"Math batched serving results\" width=\"97%\"\u002F>\n\u003C\u002Fdiv>\n\n**Code benchmarks — batched serving:**\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"assets\u002Ffig_batch_code.png\" alt=\"Code batched serving results\" width=\"97%\"\u002F>\n\u003C\u002Fdiv>\n\n## 📁 Repository Layout\n\n```\nFlowBlock\n├── run_eval.sh                        # ← user-facing evaluation entry point\n├── requirements.txt\n├── assets\u002F                            # logo & result figures\n└── dInfer\u002F\n    ├── python\u002Fdinfer\u002F\n    │   ├── decoding\u002F                  # FlowBlock + LLaDA-2.1 decoders\n    │   │   ├── generate_uniform.py    #   GWD: gated wavefront, joint M2T\u002FT2T refine, in-order commit\n    │   │   ├── flowblock_packed.py    #   HWP: per-request wavefronts packed into dense forwards\n    │   │   ├── parallel_strategy.py   #   threshold \u002F joint-threshold decode policies\n    │   │   ├── diffusion_runner.py    #   SGLang model runner (compile \u002F CUDA-graph)\n    │   │   └── utils.py               #   KV cache, block iterators, token arrays\n    │   ├── decoding_llada_origin\u002F     # original LLaDA-2.0 decoding (serial baseline)\n    │   └── model\u002F                     # LLaDA-2 MoE modeling (HF + SGLang)\n    └── evaluations\u002F\n        ├── run_flowblock_joint_batch_compare.sh       # comparison harness (used by run_eval.sh)\n        ├── run_flowblock_joint_batch_compare_loop.sh  # multi-config sweep driver\n        ├── eval_dinfer_sglang.py                      # lm-eval entry with dInfer backend\n        ├── prepare_task_subset.py                     # seed-fixed subset & GPU sharding\n        ├── aggregate_dp8_results.py \u002F aggregate_global_results.py\n        ├── val_gsm8k.py \u002F val_math.py \u002F val_asdiv.py \u002F val_code.py\n        └── tasks\u002F                                     # lm-eval task configs\n```\n\n## 🙏 Acknowledgements\n\nThis project is built upon [DMax](https:\u002F\u002Fgithub.com\u002Fczg1225\u002FDMax) and the\n[dInfer](https:\u002F\u002Fgithub.com\u002FinclusionAI\u002FdInfer) inference framework, and uses\n[SGLang](https:\u002F\u002Fgithub.com\u002Fsgl-project\u002Fsglang),\n[lm-evaluation-harness](https:\u002F\u002Fgithub.com\u002FEleutherAI\u002Flm-evaluation-harness),\nand the [LLaDA-2.x](https:\u002F\u002Fhuggingface.co\u002FinclusionAI) model family. Many\nthanks to the authors of these projects.\n\n## 📄 License & Citation\n\nReleased under the [Apache 2.0 License](LICENSE).\n\n**Paper**: **FlowBlock: Wavefront-Parallel Decoding for Self-Correcting Diffusion Language Models** — Bing Tian, Haikun Liu, Xiaocheng Zhong, Zhuohui Duan, Zhaokai Luo, Huayi Jin, Zhiyong Wang, Xiaofei Liao (\u003Chttps:\u002F\u002Farxiv.org\u002Fabs\u002F2607.17652>) \n","FlowBlock 是一个无需训练的波前并行解码框架，专为块式扩散语言模型（如 LLaDA-2.x）设计，突破其固有的串行块解码瓶颈。它利用模型固有的 token-to-token 自校正能力，通过门控波前解码（GWD）和异构波前打包（HWP）机制，在保持精确 KV 缓存复用的前提下实现块级并行调度与动态批处理。项目显著提升吞吐量（最高达 4.01×）并降低延迟，同时维持或提升数学与代码任务准确率。适用于部署高吞吐、低延迟的扩散型大语言模型服务，尤其适合批量推理场景。","2026-07-25 02:30:05","CREATED_QUERY"]