DFlash は、大規模言語モデル(LLM)の推論を高速化するための Speculative Decoding(投機的デコーディング)用の軽量「ドラフトモデル」 とその実装パッケージです。Z-Lab が公開する論文 DFlash: Block Diffusion for Flash Speculative Decoding(Chen, Liang, Liu, 2026, arXiv:2602.06036)の公式コードに該当します。
特徴は、ドラフトモデルとして従来一般的な「自己回帰型の小型モデル(EAGLE 系など)」ではなく、Block Diffusion(ブロック拡散)モデル を採用している点です。マスクトークンで埋めたブロックを並列に「拡散」的に生成(埋め直し)してドラフトトークン列を作り、それをターゲットモデルに検証させる構造になっています(dflash/model.py の dflash_generate、build_target_layer_ids、extract_context_feature 等)。
提供物は次の 3 点に整理できます。
pyproject.toml の optional-dependencies)。python -m dflash.benchmark で gsm8k / math500 / humaneval / mbpp / mt-bench を共通条件で計測(dflash/benchmark.py)。LLM 推論を速くする既存手段と並べると、ポジショニングが明確になります。
| 手段 | アプローチ | DFlash との関係 |
|---|---|---|
| 通常の自己回帰生成 | 1 トークンずつ逐次デコード | 比較対象(最も遅い) |
| 量子化 / KV キャッシュ最適化 | 1 トークンの計算コストを下げる | 直交。DFlash と併用可能 |
| Medusa / EAGLE / EAGLE-3 系ドラフト | 小型「自己回帰」ドラフトモデルで先読み | DFlash の主な競合 |
| DFlash(本リポジトリ) | Block Diffusion による並列ドラフト生成 | 1 ステップで複数トークンを並列に下書き |
嬉しい点は次の通りです。
vllm serve の --speculative-config '{"method": "dflash", ...}' のような 既存サービング方式の差し替えだけで導入可能。EAGLE 等と同列の選択肢として呼び出せる。mlx 経由で M5 Pro 等のローカル環境でも block_size 指定の stream_generate が使え、サーバ GPU 以外でも恩恵を受けられる。典型的な利用ステップは 4 段階です。
uv pip install -e ".[transformers]"uv pip install -e ".[sglang]"uv pip install -e ".[vllm]" の後に nightly vLLM を追加インストールpip install -e ".[mlx]"ターゲット LLM と対応する DFlash ドラフトを選ぶ
README の対応表から、利用したい本体(例: Qwen/Qwen3.5-27B)に対応するドラフト(例: z-lab/Qwen3.5-27B-DFlash)を選択。
vllm serve <target> --speculative-config '{"method": "dflash", "model": "<draft>", "num_speculative_tokens": 15}' ...python -m sglang.launch_server --speculative-algorithm DFLASH --speculative-draft-model-path <draft> --speculative-num-draft-tokens 16 ...AutoModel.from_pretrained(<draft>, trust_remote_code=True) の draft.spec_generate(..., target=target) を呼ぶdflash.model_mlx.load / load_draft を読み、stream_generate(model, draft, tokenizer, prompt, block_size=16, ...) でストリーム取得python -m dflash.benchmark --backend {vllm|sglang|transformers|mlx} --model <target> [--draft-model <draft>] --dataset gsm8k --num-prompts 128 で gsm8k / math500 / humaneval / mbpp / mt-bench を回し、スループットや受理率を比較。データセットは初回実行時に cache/ 配下に JSONL でキャッシュされる。要するに 「ターゲット LLM はそのまま、ドラフトを DFlash に差し替えるだけ」 で速度向上を狙える、Speculative Decoding のドラフト側コンポーネント、というのがこのリポジトリの位置づけです。