| Apple Silicon向けに、DFlash(論文)のネイティブMLX実装を作っています。小さなドラフトモデルがブロック拡散により16トークンを並列に生成し、ターゲットが1回の順伝播でそれらを検証します。出力はベースラインとビット単位で完全に同一です(貪欲な完全なargmax一致)。 セットアップ: M5 Max、64GB、MLX、CUDAなし。 結果Qwen3.5-9B bf16
Qwen3.5-4B bf16
4Bは、生成が長くなるほど速くなります。文脈が伸びても、ドラフト/検証のバランスが健全に保たれるほどモデルが小さいためです。 Qwen3.5-27B 符号化(quantized)
8bitのほうが4bitより良いスピードアップ比になります。 int4だと検証が非常に速くなり、bf16のドラフトがボトルネックになります。int8ではドラフト/検証のバランスがより健全です。 すべての数値は生成のみです(最初のトークンから最後のトークンまで、プリフィルなし)。どのモデルでも受容率は約80〜87%です。 作ったものDFlashのMLX実装は存在しませんでした。ランタイムを最初から書きました。実際に数値を動かしたのは: head_dim=256のパッチ。 Qwen3.5-9Bはhead_dim=256を使っており、MLXのsteel_attentionでは対応されていませんでした。2行のパッチで高速なSDPAパスが解放されました。 同期の省略(sync elision)。 パイプラインを、サイクルあたりGPU→CPUの同期を2回行う構成から1回へ再編しました。80+ tok/sでは、各同期のコストは約0.5msです。 QKV射影のパック。 3回のmatmul → 1回のmatmul+分割。層ごとのカーネル起動回数を減らします。 Apple Siliconに関する学び統一メモリではすべてが帯域(バンド幅)制約になります。これにより、推測デコードのゲームの前提が変わります: カスタムMetalカーネル(バッチ化-GEMV、fused gated SiLU、カスタムSDPA)をいずれも試した結果、標準のMLX steel GEMMより0.5〜0.8倍遅いことが判明しました。結局、それらはすべて元に戻しました。 検証コストは4〜16トークンでほぼフラットです(57ms vs 59ms)。ボトルネックはトークン数ではなく、重みのロードです。 「信頼度が低いときは検証するトークン数を減らす」ではここでは効果がありません。 量子化モデルでは最適化の景色が反転します:ドラフト(bf16)が検証(int4/int8)より遅くなります。これはbf16の場合とは逆で、帯域制約のあるハードウェア上で量子化ターゲットに対して推測デコードを行うときの構造的な制限です。 現在取り組んでいることドラフト圧縮/蒸留:27B向けに、量子化ターゲットでbf16ドラフトのボトルネックを解消します。 長い文脈の安定性。 KVキャッシュの増加により、2Kトークンを超えるとスピードアップが低下します。 MoEモデル。 DFlashのドラフトはQwen3.5-35B-A3B(合計35B、アクティブは3B)で存在します。小さなモデルの検証コストと、大きなモデルの品質を両立します。 すべてまだ製作の最中です。準備ができ次第オープンソースにします。 [link] [コメント] |
Apple Silicon上でのDFlash speculative decoding:85トークン/秒、Qwen3.5-9Bで3.3x(MLX、M5 Max)
Reddit r/LocalLLaMA / 2026/4/12
💬 オピニオンDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical UsageModels & Research
要点
- 投稿者はMLXでApple Silicon(M5 Max、64GB)向けにDFlashのネイティブ実装を進め、ドラフト生成とターゲット検証を効率化する方式を示しています。
- ドラフトモデルが16トークンを並列生成し、ターゲット側が1回のフォワードパスでそれらを検証することで、ベースライン(greedy exact argmax)とビット単位で一致する出力を実現したと述べています。
- Qwen3.5-9B(bf16)では1024/2048トークン生成でそれぞれ約3.3x/3.1xの速度向上(26 tok/s→85 tok/s など)を報告しています。
- Qwen3.5-4B(bf16)でも2.7x〜3.2xの改善が見られ、4Bは長いコンテキストでむしろ速度が伸びる傾向を示しました。
- Qwen3.5-27Bを量子化(8bit/4bit)してもDFlashはベースラインより高速である一方、量子化度が下がるほど(4bit)スピードアップは小さくなる例が示されています。




