はじめに
LLM 関連の技術情報は英語が主流です。論文・ベンチマーク・実装例のほとんどは英語テキストで評価されており、「X 倍速くなる」「acceptance rate が Y% に達した」という数字もほぼ英語ベースです。
日本語で使うシステムを構築・運用するエンジニアにとって、これらの数字をそのまま採用するのは危険です。speculative decoding の効果はモデルの出力分布に直結し、出力分布は 生成するテキストの言語特性に大きく依存します。
このシリーズでは Qwen3.5 + vLLM を RTX 4070 (12GB) で動かし、全計測を日本語プロンプト・日本語出力で行ってきました。今回はまったく同じ設定のまま 英語プロンプト・英語出力に切り替えて計測 し、何が変わるかを検証します。
先に結論を書きます。
- baseline の tok/s は日英でほぼ同じ。言語は推論速度には影響しない
- MTP の acceptance rate は英語で一様に上昇 し、tok/s も 5〜15% 改善する
- D-Flash の改善率が劇的に変わる: 日本語 Long +18% → 英語 Long +57%
- 英語では D-Flash が MTP を上回り、前記事での「同速」評価が逆転する
- 海外のベンチ数字は英語ベースであることが多く、日本語ユースケースに直接適用できない。日本語で実測することで異なる現実が見える
前回までの振り返り
シリーズ全3記事のポイントを1行ずつまとめます。
| 記事 | テーマ | 主な結論 |
|---|---|---|
| 記事1 | 2B FP16 + MTP | n=1 が最速 (+15%)。n=3 以上は acceptance rate が下がりすぎて逆効果 |
| 記事2 | 2B FP8/AWQ4 + MTP 全12構成 | 全量子化で n=1 のみ有効。FP8+MTP-n1 Long が最速 147 tok/s |
| 記事3 | 4B D-Flash vs MTP | 12GB GPU ではスケジューラ制約が効き D-Flash も MTP も +18% 同速 |
これらはすべて日本語プロンプト・日本語出力での計測です。
なぜ英語で試すのか ─ 2 つの仮説
speculative decoding の肝は acceptance rate ─ ドラフターが予測したトークンをターゲットモデルが受け入れる割合です。受理率が高いほど 1 forward 当たりに確定する token 数が増え、tok/s が上がります。
「英語にするだけで acceptance rate が変わるのでは」という仮説を2つの角度から立てました。
仮説1: 日本語はトークン境界が多様で「次」が予測しにくい
英語のテキストはほぼ単語単位でトークン化されます。前後のコンテキストから次の単語が絞り込まれやすく、確率分布がシャープになりやすいです。
日本語はひらがな・カタカナ・漢字が混在し、送り仮名・助詞の選択肢・読点の位置によってトークン分布が拡散しやすいです。同じ意味でも複数の表現が等確率で候補に残ることが多く、ドラフターが「ここはこれしかない」と断言しにくい状態になります。
仮説2: Qwen3.5 の学習データに日本語が少ない
MTP も D-Flash の drafter も、最終的には「このモデルが次に何を出力しやすいか」という事前分布を学習しています。Qwen3.5 の学習データは英語が最も多く、次いで中国語です。日本語はそれらに比べ少ない割合です。
MTP ヘッドはターゲットモデルと同時に学習されるため、「日本語での次トークン予測」については学習経験が少ない 可能性があります。D-Flash の drafter (z-lab/Qwen3.5-4B-DFlash) も Qwen3.5-4B のアーキテクチャを流用しており、Z-Lab がどの言語で DFlash drafter を訓練したかは非公開ですが、同様のバイアスがある可能性は否定できません。
2 つの仮説は独立ではなく、おそらく両方が重なって今回の結果を作っています。
MTP と D-Flash: 仕組みの違いと acceptance rate への影響
MTP (Multi-Token Prediction) の仕組み
MTP はターゲットモデル本体に組み込まれた 追加の予測ヘッド です。通常の LM ヘッドが「次の 1 token」を出力するのに対し、MTP ヘッドは「2 番目以降の token」を並列に出力します。
vLLM の qwen3_next_mtp 実装では、ドラフトステップとターゲット検証ステップが次のように動きます。
1. Target forward (通常の 1 token 生成)
└─ 同時に MTP ヘッドが次の n token を並列予測 (draft)
2. Draft token を target の確率分布と照合 (verify)
└─ 受理された token だけを確定
3. 受理された分だけ次のステップをスキップ
重要な点は、MTP ヘッドは target モデルと重みを共有し、target と同じ内部表現から予測する ことです。つまり MTP ヘッドの精度は target モデルの内部分布の質に直結します。
学習データの少ない言語では target モデルの内部表現そのものが粗くなり、MTP ヘッドが参照する特徴量の質も下がります。これが日本語での acceptance rate 低下の一因と考えられます。
また MTP は n が増えるほど後段のドラフトトークンが前段の誤差に依存 します。英語では n=1 で受理率 0.68、n=3 では 0.46 と落ちるものの実用的な水準を保ちます。日本語では n=1 で 0.60、n=3 で 0.36 と落ち込みが大きく、n=3 は損益分岐点ぎりぎりでした。
D-Flash (Block Diffusion Drafter) の仕組み
D-Flash は外部 drafter を使う方式で、MTP とは構造が大きく異なります。
1. Target モデルの中間層から特徴量ベクトルを抽出
2. 軽量な projection を通して drafter の KV cache に注入
3. Drafter は注入された KV を参照し、block size 分 (例: 16 token) を
1 回の forward で一括生成 (block diffusion)
4. 生成された 16 token を target が検証し、受理分だけ確定
D-Flash の強みは「drafter 1 forward で 16 token 分の候補を出す」ことで、autoregressive draft より深いネットワークを使えるぶん精度を出しつつ draft latency を抑えられる点です。
ただし block diffusion の効果が最大になるのは 「連続する複数トークンが互いに強い相関を持つ」 ときです。英語の構造化テキスト(技術解説・手順書)はこの条件を満たしやすく、段落内で関連単語が連続して出現します。日本語は読点や助詞の挿入パターンが多様で、隣接トークン間の相関が弱まりやすいです。
加えて Z-Lab の drafter モデルは Qwen3.5-4B の重みを流用して訓練されていますが、訓練データの言語構成は公開されていません。英語や中国語テキストで drafter を訓練した場合、その投影関数 (projection) は日本語の中間層特徴量に対して最適化されていない可能性があります。
このあたりが「英語で acceptance rate が 0.054 → 0.095 と約 2 倍になった」要因として最も説得力のある説明です。
計測条件
前記事と完全に同じ docker コンテナ・vLLM 設定を使い、プロンプトだけ英語版に差し替えました。
| 項目 | 設定 |
|---|---|
| モデル / スクリプト | 前記事と同一 |
enable_thinking |
false (明示) |
| プロンプト | 英語版 medium.txt / long.txt (日本語版と同等の構造・難易度) |
| 出力トークン数 | Medium: 256 / Long: 512 |
| 計測回数 | warmup 1 回 + 本計測 5 回中央値 |
| VRAM / GPU | RTX 4070 12GB |
プロンプトの内容は日本語版と同等の難易度・構造です (地方自治体向け政策解説 / 生成 AI 導入ガイド)。プロンプト言語以外の条件はすべて固定しています。
結果: 2B MTP ─ acceptance rate の日英比較
Long (出力 512 tokens)
| 構成 | JA tok/s | EN tok/s | JA acc | EN acc | EN/JA 倍率 |
|---|---|---|---|---|---|
| FP16 Base | 116.0 | 116.0 | - | - | 1.00 |
| FP16 n=1 | 133.5 | 138.0 | 0.602 | 0.668 | +11% |
| FP16 n=3 | 120.6 | 145.1 | 0.356 | 0.498 | +20% |
| FP16 n=5 | 91.1 | 107.8 | 0.207 | 0.280 | +18% |
| FP8 Base | 123.9 | 124.4 | - | - | 1.00 |
| FP8 n=1 | 147.3 | 155.6 | 0.597 | 0.684 | +6% |
| FP8 n=3 | 131.1 | 149.4 | 0.362 | 0.455 | +14% |
| FP8 n=5 | 100.2 | 111.8 | 0.222 | 0.268 | +12% |
| AWQ4 Base | 164.1 | 163.9 | - | - | 1.00 |
| AWQ4 n=1 | 172.9 | 181.8 | 0.602 | 0.681 | +5% |
| AWQ4 n=3 | 140.5 | 165.1 | 0.340 | 0.459 | +17% |
| AWQ4 n=5 | 108.4 | 130.9 | 0.222 | 0.313 | +21% |
baseline (MTP なし) の tok/s は日英でほぼ同値 です。言語は推論速度そのものには影響しません。
MTP 有りの構成は全12行で英語が上回り、acceptance rate の改善幅は n=3 / n=5 のほうが大きいです。
注目すべきは n=3 の変化 です。
- 日本語では FP8 n=3 Long が 131 tok/s で n=1 (147) に大きく劣っていました
- 英語では FP8 n=3 Long が 149 tok/s と n=1 (156) に迫ります
- AWQ4 n=3 Long は英語で 165 tok/s ─ baseline (164) とほぼ同値になり、「n=3 のオーバーヘッドがほぼゼロ」という状態です
これはなぜかというと、n=3 の実効コストは ドラフト cost × (1 - acceptance_rate)^n に相当する部分で決まります。acceptance rate が 0.34 (JA) から 0.46 (EN) に上がるだけで、ドラフトが外れてロスするステップの割合がかなり下がり、損益分岐点を超えやすくなります。
日本語では「n=1 だけ有効、n=3 以上は逆効果になりやすい」という結論でしたが、英語では n=3 も現実的な選択肢 になります。
結果: 4B D-Flash と MTP ─ 今回最大の発見
| 構成 | JA Medium | EN Medium | JA Long | EN Long |
|---|---|---|---|---|
| Base-FP8 | 59.8 | 59.9 | 60.0 | 60.1 |
| DFlash n=15 | 62.8 (+5%) | 80.4 (+34%) | 71.0 (+18%) | 94.1 (+57%) |
| MTP n=3 | 70.3 (+18%) | 77.8 (+30%) | 70.6 (+18%) | 84.0 (+40%) |
acceptance rate の変化:
| 構成 | JA Medium | EN Medium | JA Long | EN Long |
|---|---|---|---|---|
| DFlash n=15 | 0.040 | 0.070 | 0.054 | 0.095 |
| MTP n=3 | 0.331 | 0.409 | 0.333 | 0.464 |
D-Flash の acceptance rate が英語で約 1.75 倍になっています。この差が +18% → +57% という speedup の跳ね上がりを生んでいます。
そして前記事では「D-Flash と MTP がほぼ同速」という結論でしたが、英語では D-Flash (94.1) が MTP (84.0) を 12% 上回り、順位が逆転します。
日本語では MTP が有利だった理由は、ターゲットモデルと内部表現を共有する MTP のほうが「日本語の不確実な分布」に対しても多少は追随できたからと考えられます。英語では D-Flash の block diffusion が持つ「連続 token の相関を活かす」設計の優位性が出てきます。
考察: acceptance rate はなぜ言語で変わるのか
トークン分布の「シャープさ」と言語特性
投機的デコーディングの受理プロセスは修正棄却サンプリング (modified rejection sampling) で実装されています。受理の判定基準は以下に依存します。
受理確率 = min(1, p_target(token) / p_draft(token))
ドラフターとターゲットの確率分布が近いほど受理率が上がります。重要なのは 「分布がシャープか、フラットか」 です。
英語テキストは文脈から次のトークンがある程度絞り込まれやすく、ドラフターとターゲット両方が同じ高確率トークンに収束しやすいです。日本語では選択肢が広がり、両者の分布がずれやすくなります。
学習データの偏りという問題
MTP ヘッドは「target モデルが日本語をどう予測するか」を模倣する形で訓練されます。Qwen3.5 の日本語での内部表現が英語・中国語に比べて粗い場合、MTP ヘッドが参照する特徴量の質も下がります。
D-Flash の drafter (z-lab/Qwen3.5-4B-DFlash) についても同様の懸念があります。Z-Lab のリポジトリには drafter 訓練のデータセット構成が明記されていないため確認はできませんが、Qwen3.5 ベースのアーキテクチャを流用している以上、投影関数の学習分布が英語・中国語寄りである可能性は十分あります。
今回の結果で「D-Flash の acceptance rate が日本語と英語で特に大きな差 (0.05 vs 0.10) があった」のは、この学習データバイアスが MTP より強く出ているのかもしれません。MTP はモデル本体と共同訓練されているため日本語の分布を多少は内部化していますが、D-Flash drafter は外部モデルであり、その分バイアスが強く出やすい構造です。
実用的な含意
| 用途 | 推奨構成 | 理由 |
|---|---|---|
| 日本語チャットボット | 2B + MTP-FP8-n1 | n=1 だけが確実にプラス。D-Flash は効果小 |
| 英語チャットボット | 2B + MTP-FP8-n1 (最速) / 4B + D-Flash (品質優先) | n=3 も選択肢。D-Flash は 4B で +57% |
| 英語コード生成 | 4B + D-Flash | コードはさらにトークン相関が高く D-Flash に有利な可能性 |
シリーズ全体の総括
シリーズ4本で得られた最終的な比較表です。
| モデル | 構成 | 日本語 Long tok/s | 英語 Long tok/s |
|---|---|---|---|
| 2B | Base-FP8 | 123.9 | 124.4 |
| 2B | MTP-FP8-n1 | 147.3 | 155.6 |
| 2B | MTP-FP8-n3 | 131.1 | 149.4 |
| 4B | Base-FP8 | 60.0 | 60.1 |
| 4B | DFlash-FP8-n15 | 71.0 | 94.1 |
| 4B | MTP-FP8-n3 | 70.6 | 84.0 |
12GB GPU での実用上の選択肢をまとめます。
- 日本語用途: 2B + MTP-FP8-n1 (147 tok/s) が最速。n=1 以外は試す価値が薄い
- 英語用途: 2B + MTP-FP8-n1 (156 tok/s) 最速だが FP8-n3 (149) も近い。4B + D-Flash (94) は 2B には及ばないが 4B の品質が必要なら十分に検討に値する
- 4B が必要な日本語用途: D-Flash も MTP n=3 も +18% どまり (~70 tok/s)。16GB 以上あれば D-Flash の本来の性能が出る可能性がある
個人的な感想
記事3で D-Flash を測ったとき、正直「これで終わりか」と思いました。論文で 2x 以上というスペックを期待していたところに、日本語で +18%・MTP と同速という結果が出て、少し拍子抜けしました。
ただ今回英語で測り直したら Long で 94 tok/s (+57%) が出て、その感覚がかなり変わりました。条件が整えば D-Flash はちゃんと速くなる。問題は「英語の条件が整っていた」だけで、自分が日本語で使おうとしていたというだけでした。
MTP と D-Flash は方式が違うため「どちらが優れているか」という問いはあまり意味がないと感じています。MTP はモデル内蔵で追加モデル不要・日本語でも一定の効果がある・n=1 なら安全。D-Flash は外部 drafter 必要・英語で大きな恩恵・block diffusion の設計上 block size が大きいほどポテンシャルが高い。12GB GPU の制約込みで考えると、日本語なら MTP-n1、英語で 4B を使うなら D-Flash、という棲み分けが自然に見えてきます。
もう一つ印象に残ったのは「baseline は変わらない」という事実です。日英どちらも baseline は 60 tok/s 前後・124 tok/s 前後でほぼ同値です。投機的デコーディングは「モデルが得意な分布を当てる」ゲームであって、モデル自体の推論速度とは独立しています。この分離を実測で確認できたのは収穫でした。
おわりに
「海外の論文やベンチが英語なのは当然」という話だけをしたいわけではありません。
今回の計測が示すのは、同じモデル・同じ設定でも、出力言語が変わるだけで speculative decoding の効果が根本的に変わりうるという事実です。acceptance rate は単なる「モデルのスペック」ではなく、「どんなテキストを生成するか」と「どの言語でモデルが学習されているか」の両方に強く依存します。
D-Flash が日本語で +18%、英語で +57% という差は偶然ではなく、Qwen3.5 の学習データ構成と日本語のトークン特性が組み合わさった必然的な結果と考えています。海外の速度ベンチを日本語システムに持ち込む前に、必ず日本語で実測するステップを挟む ことを強く推奨します。
speculative decoding に限らず、量子化の精度評価・fine-tuning 後の品質評価・RAG の検索精度など、LLM の最適化全般でこの視点は重要です。英語で評価された技術が日本語でどう変わるかを自分で確かめる文化が広がると良いなと思います。