3行でいうと
- 投機的デコードは、小さなモデルが数トークン(文章を数える単位)を先に予想し、大きなモデルがまとめて検算して速くする仕組み。
- 予想が外れても本体が直すので、論文によれば出力の確率分布は本体だけで書いた場合と同じになる。
- 予想の当たる率が高く、予想役が軽いほど速い。外れ続けたり、計算に余裕がなかったりすると速くならない。
- Splashの倍率は自社測定。どの仕組みが何倍に効いたかは、公式ブログに書かれていない。
Splashのモデル構成には、本体(約14.1GiB)のほかに、約1.2GiBの小さな補助モデルが入っています。この補助モデルは何をしているのか。「投機的デコード」という仕組みを、論文と実装の資料が読めた範囲で説明します。
Splashの中にあるもの
Hugging Faceのincoai/Qwen3.8-27B-Splashのページには、ファイルの内訳が載っています。
| 部品 | 大きさ | 説明(ページの記載) |
|---|---|---|
| 本体 | 14.1 GiB | Qwen3.8-27B、4ビット |
| 補助モデル | 1.2 GiB | 「DFlash 2」という予想役のモデル |
| 画像を読む部品 | 0.9 GiB | 画像用のエンコーダー |
| 文字の区切り方など | 小さい | トークナイザーと会話の型 |
補助モデルについて、ページには次の説明があります。5層の小さなモデルで、本体の途中の状態を読み取り、1回に7トークンを予想します。本体は、それを1回の処理でまとめて検算します。トークンとは、AIが文章を数える単位です。日本語では、おおよそ1〜2文字です。
投機的デコードとは
AIは、文章を1トークンずつ書いています。大きなモデルは、1トークンを出すたびに、数十GBの重みをメモリから読み出します。計算そのものより、読み出しの待ち時間が、速さを決めやすい作りです。
そこで、次のようにします。
- 小さなモデル(下書き役)が、先に数トークンを予想する。
- 大きなモデル(本体)が、予想された数トークンを、1回の処理でまとめて検算する。
- 合っているところまでは採用する。最初に外れたところで、本体が自分の答えに差し替える。
- そこから、また1に戻る。
例えるなら、先輩が書く文章を、新人が先回りして下書きします。先輩は、下書きをまとめて読み、合っていれば採用します。1語ずつ書くより速いのは、読むほうが、書くより一度にたくさんできるからです。
ここで大事なのは、検算が本体の仕事だという点です。下書きが外れても、本体が直します。下書きが下手だと、速くならないだけです。
論文では何が言われているか
最初の論文は、Googleの研究者による「Fast Inference from Transformers via Speculative Decoding」(Leviathanら、2022年11月、ICML 2023)です。ほぼ同じ時期に、DeepMindの研究者が、Chinchilla(700億パラメータ)を使って「Speculative Sampling」(Chenら、2023年2月)を出しています。
| 論文 | 試したモデル | 論文の報告 |
|---|---|---|
| Leviathanら | T5-XXL | 標準の実装の2〜3倍。出力は変わらない |
| Chenら | Chinchilla(70B) | 分散環境で2〜2.5倍。品質は損なわれない |
| EAGLE(Liら、2024年) | LLaMA2-Chat 70B | 2.7〜3.5倍。生成される文章の分布を保つ |
いずれも、論文の著者自身の測定です。Leviathanらの論文では、翻訳(英独)で、温度0のとき3.4倍、温度1のとき2.6倍でした。温度とは、答えにばらつきを持たせる度合いです。ばらつきがあるほうが、少し効きにくくなっています。
なぜ「品質が変わらない」と説明されるのか
理由は、検算の決まりにあります。論文によると、下書きの1トークンごとに、本体の確率と見比べます。本体の確率が下書き以上なら、採用します。そうでなければ、一定の確率で却下して、本体の確率から計算した補正の分布で、引き直します。この決まりで、最終的な出力の確率分布が、本体だけで書いた場合と数学的に同じになる、と論文は証明しています。
つまり、「たまたま似た答えが出る」のではなく、「本体の答えと同じ確率で出る」ように作られています。Splashのページにも、速さは変わるが出力の分布は変わらない、という趣旨の記述があります。LM Studioの資料も、本体が「自分が出したはずのトークンだけ」を採用するので、品質は下がらないと説明しています。
注意点が2つあります。
- 「同じ確率で出る」ことと、「毎回、一字一句同じ」ことは別です。ばらつきのある設定では、本体だけで書いても毎回違います。
- 数値の丸めの違いで、細かいずれは出ます。Chenらの論文も、「ハードウェアの精度の範囲で」保たれる、と書いています。
どんなときに速くなるか
Leviathanらの論文には、速さを決める2つの数字があります。
- 下書きの採用率(α):下書きが本体と合う確率です。論文では、サイズが2桁違うモデルの組み合わせで、0.5〜0.9くらいと報告されています。
- 下書きの費用(c):下書き役が1回動く時間が、本体の何割かという比です。
1回の本体の処理で得られるトークン数の期待値は、(1−α^(γ+1))÷(1−α)です。γは、1回に下書きするトークン数です。数字を入れてみます。以下は筆者の計算です。
| 採用率α | 下書きの数γ | 本体1回あたりに進むトークン数 |
|---|---|---|
| 0.5 | 4 | 約1.9 |
| 0.8 | 4 | 約3.4 |
| 0.9 | 7 | 約5.7 |
採用率が高く、下書きが安いほど、速くなります。下書きに「ちょうどいい」賢さが必要なわけです。
次のような作業は、当たりやすいとされています。LM Studioの資料は、数学の問題のような答えが決まりやすい作業は効きやすく、物語のような創作は効きにくいと書いています。llama.cppの資料も、コードの書き直しのように繰り返しが多い作業で効く、としています。
どんなときに効かないか
読めた資料から、次の場合がまとめられます。
- 下書きが外れ続けるとき。 LM Studioの資料は、下書き役が遅いか、当たらないと、速くならず、むしろ遅くなることもあると、はっきり書いています。
- 計算の余裕がないとき。 Leviathanらの論文は、投機的デコードが計算を増やして待ち時間を減らす方法だと述べています。余った計算能力がない環境では、使えません。
- 下書き役のメモリが足りないとき。 補助モデルの分、メモリを使います。Splashでは1.2GiBです。メモリがぎりぎりのMacでは、無視できません。ここは筆者の整理です。
- 下書きと本体で、文字の区切り方(語彙)が違うとき。 LM Studioの資料は、下書き役が本体と同じ語彙を持つ必要がある、としています。同じ系列のモデルを組み合わせるのが基本です。
実装での扱い
| ソフト | 読めた範囲での扱い |
|---|---|
| llama.cpp | 公式の資料に、下書きモデル方式のほか、EAGLE-3、DFlash、モデル内のマルチトークン予測(MTP)、n-gram(過去の文章のパターンを使う方式)が並ぶ。下書きの数は、標準で最大3 |
| mlx-lm(MLX) | 生成のコマンドに、--draft-model(下書きモデル)と--num-draft-tokens(標準で3)の引数がある |
| LM Studio | 設定で下書きモデルを選ぶ方式。語彙が同じであることなどの条件を、資料で説明している |
| Splash | 投機的デコードが標準の仕組みで、選択式ではない(公式ブログの記載) |
llama.cppとMLXでは、投機的デコードは、使う側が下書きモデルを自分で選ぶ、後付けの機能のような扱いです。Splashは、モデルごとに専用の下書き役を付けて、最初から組み込んでいる点が違います。ただし、LM StudioのMLXとllama.cppのどちらで使えるかは、読んだ資料に書かれていませんでした。
MoEが速い理由
MoE(Mixture of Experts)は、投機的デコードとは別の速くする方法です。モデルの中に、多数の「専門家」を並べて、1トークンごとに一部だけを動かします。
Hugging Faceのページによると、Qwen3.6-35B-A3Bは、全体が350億パラメータで、実際に動くのは30億です。専門家は256個あり、1トークンで動くのは、選ばれた8個と、常に動く共通の1個です。
1トークンで読み出す重みが少なければ、読み出しの待ち時間も短くなります。ローカルの速さは、メモリの読み出しに左右されやすい、というのが前の記事の話でした。これは筆者の整理です。ただし、全体の重みは、メモリに置いておく必要があります。速くなるのは、動かす量で、置く量ではありません。
Splashの公式ブログには、MoEモデルの専門家向けの専用の計算部品(カーネル)があると書かれています。
Splashは何を説明しているか
公式ブログとHugging Faceのページから、読めた範囲だけを整理します。
- 投機的デコードは、Splashの生成の標準の経路で、選択式ではない。
- 補助モデルは「DFlash 2」で、1回で複数のトークンを予想する。ブログは、モデル自身のマルチトークン予測より、検算を通る数が多い、と書いている。
- 速さの比較は、同じ48GBのM5 Proで、oMLX、Lily、Ollama、uzuと行った。課題は、NVIDIAのSPEED-Benchのコード課題で、出力は1,024トークンまで。
- 比べた結果として、1件ずつの生成で1.7〜2.0倍、32Kトークンの文脈の再利用で6.6〜7.3倍、同時4件の合計で2.0〜3.9倍、という数字が載っている。これはSplash自身の測定です。
- 例えば27Bでは、短い入力の生成が毎秒74トークン(oMLXは38で、2.0倍)。
- 速さの理由として、特化した計算部品、学習した補助モデル、ハードウェアに合わせたメモリの割り当てが挙げられている。
一方、読めた範囲では、どの仕組みが何倍に効いたかは、公式ブログに書かれていません。投機的デコードだけで何倍、計算部品で何倍という分解は、載っていないのです。ここから推測はしません。公式のページに数字がない以上、「2倍のうち、半分が補助モデルのおかげ」のような言い方はできません。
また、DFlash 2が、どう学習され、どのくらい当たるのかも、ブログの本文には詳しい説明がありません。別のページ(incoai/Qwen3.8-27B-DFlash2)では、ブロック拡散という方式で、1回に1ブロックのトークンを予想する下書き役と説明されています。ただし、このページの大きさは20億パラメータ(BF16)で、Splashの1.2GiBとは表記が違います。両者の関係は、読んだ資料からは確かめられませんでした。
気をつけること
- 論文の倍率は、昔の大きなモデルでの、論文の著者自身の測定です。いまの家庭用のMacで、同じ倍率が出る保証はありません。
- Splashの倍率は、Splash自身の測定です。独立した検証は、見つけられませんでした。この記事では、手元で確かめていません。
- 「品質が変わらない」は、投機的デコードの検算の決まりについての話です。Splashが4ビットに圧縮している影響は、別の話です。
- MoEと投機的デコードを組み合わせたときの相性は、読めた資料では確かめられませんでした。
出典
- Fast Inference from Transformers via Speculative Decoding(arXiv、2022年11月)
- Accelerating Large Language Model Decoding with Speculative Sampling(arXiv、2023年2月)
- EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty(arXiv)
- DFlash: Block Diffusion for Flash Speculative Decoding(arXiv)
- incoai/Qwen3.8-27B-Splash(Hugging Face)
- Splash(Inco AI公式ブログ)
- incoai/Qwen3.8-27B-DFlash2(Hugging Face)
- Speculative Decoding in llama.cpp(GitHub)
- mlx-lm generate.py(GitHub)
- Speculative Decoding(LM Studio Docs)
- Qwen/Qwen3.6-35B-A3B(Hugging Face)
更新履歴
- 2026年10月25日 書き方を直しました。
- 前:運営者がやっていないと読める書き方 → いま:主語を記事にして、「この記事は、実際にやって確かめた記録ではありません」と書きました。運営者が使っているものを、使っていないと読ませないための直しで、内容や数字は変えていません。
