環境
- RADEON RX9060XT/16GB
- llama.cpp-turboquant
- --temp 1.0 --reasoning on --reasoning-budget 4096
- -ctk q8_0 -ctv turbo4 -c 65536
- -ctkd turbo4 -ctvd turbo3
- 面倒なのでテストは一発取り
サンプルプロンプト
ドラフト採用率が中程度のもの。
以下のテーマについて、1500文字以上で詳細な解説文を作成してください。要件や具体例を交え、専門的なトーンで記述してください。
テーマ:『人工知能(AI)が今後のグローバル経済と労働市場に与える影響について』
【必須条件】
- 導入、現状の分析、将来の予測、そして結論の構成にすること
- 具体的な産業(製造業、医療、金融など)における活用事例を最低3つ含めること
- 労働市場における課題と、それに対する対策を論理的に記述すること
- 最後に全体の要約を箇条書きでまとめること
実験1(n-max値を変更する)
- gemma-4-26B-A4B-it-qat-UD-Q4_K_XL.gguf + mtp-gemma-4-26B-A4B-it-Q4_0.gguf
対照群(MTPオフ)
prompt eval time = 4290.50 ms / 156 tokens ( 27.50 ms per token, 36.36 tokens per second)
eval time = 88010.74 ms / 3250 tokens ( 27.08 ms per token, 36.93 tokens per second)
total time = 92301.24 ms / 3406 tokens
標準(--spec-draft-n-max=2)
prompt eval time = 4468.21 ms / 156 tokens ( 28.64 ms per token, 34.91 tokens per second)
eval time = 71614.90 ms / 2757 tokens ( 25.98 ms per token, 38.50 tokens per second)
total time = 76083.11 ms / 2913 tokens
draft acceptance = 0.61210 ( 1518 accepted / 2480 generated)
ドラフト採用率61%、36.9tps→38.5tps、損益分岐点ギリギリ。
ドラフトを増やす(--spec-draft-n-max=4)
prompt eval time = 4455.13 ms / 156 tokens ( 28.56 ms per token, 35.02 tokens per second)
eval time = 89175.63 ms / 2848 tokens ( 31.31 ms per token, 31.94 tokens per second)
total time = 93630.76 ms / 3004 tokens
draft acceptance = 0.45680 ( 1840 accepted / 4028 generated)
ドラフト採用率46%、36.9tps→31.9tps、うんち。
ドラフトを減らす(--spec-draft-n-max=1)
prompt eval time = 4248.52 ms / 156 tokens ( 27.23 ms per token, 36.72 tokens per second)
eval time = 66732.32 ms / 2838 tokens ( 23.51 ms per token, 42.53 tokens per second)
total time = 70980.84 ms / 2994 tokens
draft acceptance = 0.75015 ( 1216 accepted / 1621 generated)
ドラフト採用率75%、36.9tps→42.5tps。速くなった。
実験2(ドラフトの量子化レベルを変える)
- gemma-4-E4B-it-qat-UD-Q4_K_XL.gguf + mtp-gemma-4-E4B-it-BF16.gguf
- n-max=1(もう2を試す必要ないよね)
対照群(MTPオフ)
prompt eval time = 105.20 ms / 149 tokens ( 0.71 ms per token, 1416.34 tokens per second)
eval time = 28577.23 ms / 2104 tokens ( 13.58 ms per token, 73.63 tokens per second)
total time = 28682.43 ms / 2253 tokens
bf16(163MB)
prompt eval time = 116.70 ms / 149 tokens ( 0.78 ms per token, 1276.73 tokens per second)
eval time = 26390.55 ms / 2335 tokens ( 11.30 ms per token, 88.48 tokens per second)
total time = 26507.25 ms / 2484 tokens
draft acceptance = 0.55704 ( 835 accepted / 1499 generated)
お互いモデルが小さいのでガバガバにすれ違っているのか、採用率はだいぶ悪い。しかし効果はある。
q8_0(94MB)
prompt eval time = 114.95 ms / 149 tokens ( 0.77 ms per token, 1296.20 tokens per second)
eval time = 24564.73 ms / 2159 tokens ( 11.38 ms per token, 87.89 tokens per second)
total time = 24679.68 ms / 2308 tokens
draft acceptance = 0.57060 ( 784 accepted / 1374 generated)
上がるのはおかしいだろ誤差ってレベルじゃねえぞ。
q4_0(67MB)
prompt eval time = 117.92 ms / 149 tokens ( 0.79 ms per token, 1263.53 tokens per second)
eval time = 27513.37 ms / 2370 tokens ( 11.61 ms per token, 86.14 tokens per second)
total time = 27631.29 ms / 2519 tokens
draft acceptance = 0.56370 ( 854 accepted / 1515 generated)
普通のモデルだと163MBを67MBに量子化したら相当キツイと思うけどこれでもいけそう。
結論
マルチトークン予測というのかい?
贅沢な名だね。今からお前の名前はシングルトークン予測だ。
いいかい、シングルトークン予測だよ。分かったら返事をするんだ、STP!
コード生成だと多少ドラフト採用率が上がるけど、逆に「短編小説を書け」とかだとドラフト採用率はもっと悪くなってn-max=2でも損益分岐点を割り込む。
n-max=1だと今のところ試したどのケースでもプラスだったので、とりあえずn-max=1でなら設定して損はないように思う。
また、ドラフトモデルはbf16でもq4_0でもあまり変わらない。結局のところ元より自明なものしか当たっていないということに尽きるのかもしれない。
ちなみに-ctkd/-ctvd(ドラフトモデル用のKVキャッシュ設定)をq8_0とかにしても特に改善はしない。
+20%のゲインでいいのなら、n-max=1でVRAMが最も小さくて済むものを選んでおけば損はしないのでは。