0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

# Qwen3.5-2B で Multi-Token Prediction を試す ② 量子化と MTP の組み合わせ比較

0
Last updated at Posted at 2026-05-24

はじめに

前回は MTP の仕組みと FP16 ベースラインを見ました。MTP-FP16-n1 で +15%、ただし n=3/5 はベースライン割れという結果でした。

ただ実用シーンを考えると、ローカル LLM を FP16 のまま動かす場面はあんまりなくて、たいてい FP8 か AWQ4 まで落として VRAM を稼ぎます。「じゃあ量子化を強くしたとき、MTP は同じように効いてくれるのか?」というのが今回の主題です。

比較するのはこの3つ。

  • FP16: Qwen/Qwen3.5-2B
  • FP8: lovedheart/Qwen3.5-2B-FP8
  • AWQ4: QuantTrio/Qwen3.5-2B-AWQ

ついでに Ollama (qwen3.5:2b Q8_0) でも同じプロンプトを流して、実用感覚としての参考値も取りました。

先に結論を書くと、全3量子化で「n=1 だけが有効」 という結果になりました。n=3 以上はどの量子化でも受理率が下がりすぎてベースラインを下回ります。「先読みを増やすほど速い」という直感は、少なくとも Qwen3.5-2B では成り立ちません。

量子化のおさらい

vLLM で扱える量子化フォーマットは複数ありますが、今回触ったのはこの3つです。

  • FP16 / BF16: 半精度。実質「量子化なし」
  • FP8 (compressed-tensors): 重みと活性を 8bit 浮動小数に。Ada Lovelace 以降の native FP8 演算で速い
  • AWQ 4bit: weight-only の 4bit 量子化。VRAM は大幅削減、計算は dequant 後の半精度で行う

ざっくり言うと、ビット幅が小さいほどモデルは軽くスループットは伸びる方向です。引き換えに精度が劣化します。

FP8 モデル選定でハマった話

最初は surogate/Qwen3.5-2B-FP8 を使っていました。

普通に MTP も動いているように見えるのに、/metrics を見ると 受理率が 0% になっていました。draft は出ているのに target が全部拒否している、という奇妙な状態です。

原因は FP8 量子化の 除外モジュール設定 でした。surogate 版は除外モジュールが 227 個、対して lovedheart/Qwen3.5-2B-FP8 は 900+ 個指定されています。lovedheart 版は MTP ヘッド周辺を FP8 量子化対象から外しているらしく、こちらに切り替えたら正常な受理率になりました。

教訓: MTP ヘッドが量子化で壊れると静かに 0% になる。FP8 + MTP を使うときは、最初に必ず /metrics で受理率を確認するのが安全です。

結果: Medium (256 tokens)

3量子化 × baseline/n=1/n=3/n=5 の全12構成。命名は前回と同じく Base-{量子化} / MTP-{量子化}-n{先読み数} です。

構成 tok/s 同量子化内 speedup acceptance
Base-FP16 115.4 1.00 -
MTP-FP16-n1 126.4 1.10 0.52
MTP-FP16-n3 119.7 1.04 0.36
MTP-FP16-n5 94.3 0.82 0.22
Base-FP8 122.3 1.00 -
MTP-FP8-n1 143.1 1.17 0.57
MTP-FP8-n3 112.6 0.92 0.26
MTP-FP8-n5 88.5 0.72 0.17
Base-AWQ4 161.9 1.00 -
MTP-AWQ4-n1 180.3 1.11 0.68
MTP-AWQ4-n3 151.0 0.93 0.39
MTP-AWQ4-n5 116.7 0.72 0.26

ベースラインを横並びで見ると、量子化が軽いほど baseline が速い という素直な並びです。

  • FP16: 115.4 tok/s
  • FP8: 122.3 tok/s (FP16 比 1.06x)
  • AWQ4: 161.9 tok/s (FP16 比 1.40x)

ここに MTP を足すと、全量子化で n=1 のみ有効。n=3 は FP8/AWQ4 でベースライン割れ、n=5 はどの量子化でも大きく落ちます。

結果: Long (512 tokens)

構成 tok/s 同量子化内 speedup acceptance
Base-FP16 116.0 1.00 -
MTP-FP16-n1 133.5 1.15 0.60
MTP-FP16-n3 120.6 1.04 0.36
MTP-FP16-n5 91.1 0.79 0.21
Base-FP8 123.9 1.00 -
MTP-FP8-n1 147.3 1.19 0.60
MTP-FP8-n3 131.1 1.06 0.36
MTP-FP8-n5 100.2 0.81 0.22
Base-AWQ4 164.1 1.00 -
MTP-AWQ4-n1 172.9 1.05 0.60
MTP-AWQ4-n3 140.5 0.86 0.34
MTP-AWQ4-n5 108.4 0.66 0.22

Long でも構造は同じです。全量子化で n=1 がピーク。FP8 + MTP-n1 は +19% (147.3 tok/s) が今回の最大効果。

AWQ4 は Long でも n=1 は +5% 程度の上乗せにとどまっています。baseline が速い分、MTP による絶対値の伸びが小さい。

なぜ n=3 以上が逆効果か

受理率の数字を見るとシンプルで、n=1 が 0.60 のところ n=3 は 0.36、n=5 は 0.21 まで落ちます。

投機的デコーディングのオーバーヘッドは「先読み n token 分の draft forward コスト + verify forward コスト増加」です。n=3 で3 token を連続して当てる確率は 0.36³ではなく「3 token すべての受理率の積に近い値」ですが、実態として verify 1 回あたりに回収できる token 数が n=1 と大差なくなる

n=1: 1 step で 0.60 token 回収 → draft コスト小
n=3: 1 step で 0.36 × 3 ≈ 1.1 token 回収 → draft コスト大
n=5: 1 step で 0.21 × 5 ≈ 1.0 token 回収 → draft コスト 最大

おおよそ n=1 で 0.6、n=3 でも 1.1 程度。draft コストが増えた割に回収が増えていないので、n=3/5 は損益分岐を超えています。Qwen3.5-2B の MTP ヘッドは先読み精度がそこまで高くなく、n=1 で受理率 60% あたりが実用の天井に近いと思われます。

出力サンプル

数値だけだと品質感が伝わらないので、実際の出力も覗いておきます。プロンプトは「地方自治体の生成 AI 導入ガイド (Long 512 tokens)」です。

Qwen3.5 は thinking モードがデフォルト有効ですが、今回は enable_thinking: false で計測しているため、出力は最初から日本語の回答本文です。

[MTP-FP8-n1 Long の出力冒頭]
# 地方自治体が生成 AI を導入する際の進め方:実務者向け長文解説

地方自治体は、行政の効率化、透明性向上、そして市民サービスの質の向上を目的として、
生成 AI(LLM や多模态 AI など)の導入を検討するケースが増えています。

## 1. 導入目的の整理:なぜ AI を導入するのか?

*   業務効率化とコスト削減:
    行政書士や事務職員が、重複する書類作成や標準的な回答生成タスクを AI に委ね、
    人間の作業時間を大幅に短縮する。

*   情報提供の質の向上:
    市民が「〇〇の保険料は?」と検索する際、AI が最新の法律や条例に基づき、
    正確で即座に回答できることで、窓口での待ち時間を短縮する。

MTP-AWQ4-n1 でも Base-FP16 でも構造は同様で、明らかな崩れはありませんでした。

Ollama の参考値

参考までに、Ollama でも同じプロンプトを流しました。qwen3.5:2b は Q8_0 量子化で、temperature 0 / num_ctx 2048 / think: false で計測しています。

Engine Workload Eval tok/s
Ollama (Q8_0) Medium 155.9
Ollama (Q8_0) Long 155.9

Ollama は API も tokenization も vLLM と違うので横並び厳密比較ではありませんが、雑な体感では次の位置づけです。

AWQ4 baseline (164 tok/s) > Ollama Q8_0 (156 tok/s) > FP8+MTP-n1 (147 tok/s) > FP8 baseline (124 tok/s)

「Ollama で十分」という人も多いと思いますが、vLLM FP8 + MTP-n1 (147 tok/s) は Ollama Q8_0 (156 tok/s) とほぼ同等の速度域です。量子化の選択肢や、後述する 4B モデルへの移行を考えると vLLM を立てる価値はあります。

実用候補としての結論

今回の3量子化をまとめると次のようになります。

構成 Long tok/s (best) Long 品質 評価
MTP-FP16-n1 133.5 OK 安定。速度控えめ
MTP-FP8-n1 147.3 OK 実用候補
MTP-AWQ4-n1 172.9 OK 速いが MTP 効果が薄い

速度だけなら AWQ4-n1 が最速 ですが、MTP による上乗せが +5% 程度なので baseline をそのまま使っても大差ありません。

実用候補は FP8 + MTP-n1 です。

  • FP16 baseline 比 +27%
  • FP8 baseline 比 +19%
  • 出力品質に明らかな崩れなし
  • VRAM も RTX 4070 12GB に収まる

FP8 + MTP は「量子化で baseline を上げた上に MTP をかける」という二段構えが一番効いています。AWQ4 はベースラインが速い分 MTP の伸びしろが少なく、FP16 は逆にベースラインが遅いため上限が低い。

まとめ

  • 全3量子化で n=1 のみ有効 (n=3 以上はベースライン割れ)
  • 受理率が n=1 で 0.60、n=3 で 0.36、n=5 で 0.21 と急落するため、draft コストが利益を超える
  • MTP-FP8-n1 が実用候補: FP16 baseline 比 +27%、FP8 baseline 比 +19%
  • AWQ4 は baseline が速いが MTP 効果が薄い (Long で +5%)
  • Ollama Q8_0 (156 tok/s) と FP8+MTP-n1 (147 tok/s) はほぼ同速度域
  • FP8 で MTP を使うときは量子化除外設定で MTP ヘッドが守られているか確認するのが安全

次回 ③ は Qwen3.5-4B で D-Flash を試します。MTP とはまったく別方式の block diffusion drafter で、12GB GPU での限界も見えてきます。

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?