Phractis

MTP で Gemma 4 26B の翻訳は速くなるか:1 本ずつなら 1.5 倍、4 並列なら 1.15 倍

目次
  1. きっかけ
  2. 学んだこと
  3. 自分なりの理解
  4. 実践へのつなげ方
  5. 次に試すこと

きっかけ

洋書の PDF を日本語に翻訳するツールを、自宅の Ryzen AI Max+ 395(Radeon 8060S)で動かしています。モデルには Gemma 4 26B A4B の QAT 版(unsloth の UD-Q4_K_XL)、サーバーには llama.cpp の Vulkan 版(b11227)を採用し、4 段落を同時に処理させつつ、thinking(思考)は 1024 トークンで打ち切る運用にしています。この構成は先月までの検証で決めました。

unsloth は mtp-gemma-4-26B-A4B-it-Q4_0.gguf という 250MB ほどのファイルがも提供しています。これは MTP(Multi-Token Prediction)用のヘッド(小さな追加モデル)で、llama.cpp では --spec-type draft-mtp オプションを指定することで利用できます。これを使えば今の翻訳速度がさらに上がるのか、実際に確かめてみることにしました。

学んだこと

文字数の多い順に選んだ 16 段落(1,046〜1,973 文字)を対象に、本番と同じプロンプトと設定(temperature 0.2)で翻訳速度を比較しました。

使い方 MTP なし MTP あり 変化
1 本ずつ(-np 1) 2.49 段落/分 3.74 段落/分 +50%
4 並列(-np 4、下書き 3 トークン) 4.44 段落/分 4.80 段落/分 +8%
4 並列(-np 4、下書き 4 トークン) 4.44 段落/分 5.09 段落/分 +15%

1 本ずつ順番に処理する場合、1 段落あたりの待ち時間は 24 秒から 16 秒へと大幅に短縮されました。生成速度単体で見ても 65 tok/s から 106 tok/s となり、+64% の高速化を果たしています。一方で、本番環境である「4 並列」では +8% の改善にとどまりました。下書きトークン数を既定値の 3 から 4 に増やして、ようやく +15% の改善が得られたという結果です。

なお、翻訳精度への悪影響は見られませんでした。16 段落を 11 回(計 176 回)翻訳しましたが、空の訳文が出力されたり、思考ログが訳文に混ざったりするトラブルは 0 件でした。思考プロセスも毎回狙い通り 1023 トークン前後で終了し、出力全体の長さもほぼ一定でした。

自分なりの理解

MTP は、本体モデルが 1 トークン出力するたびに、軽量なヘッドが 2〜3 トークン先まで予測(下書き)しておき、本体が次の計算ステップでまとめて「答え合わせ」をする仕組みです。予測が当たった分だけ、本体の重い計算ステップをスキップできます。今回の測定では受理率(正答率)が 75% 前後あり、1 回の答え合わせにつき平均して 3 トークン強進めることができていました。

1 本ずつ生成しているときは GPU の計算力を持て余しているため、処理時間のほとんどが「メモリから重みを読み出す時間」に費やされます。答え合わせ用のトークンを 3 つ追加しても、読み出す重みの量は変わらないため、ほぼ追加コストなしで 3 回分の判定を検証できます。単発処理での +50% という大幅な向上は、この余剰リソースをうまく活用できた結果だと考えています。

しかし、4 並列になると状況が変わります。もともと 4 リクエスト分をまとめて処理しているため、GPU の余力はあまり残っていません。そこに「4 本 × 4 トークン」の検証処理が加わると、計算負荷が一気に増えます。さらに、今回使っているモデルは MoE(Mixture of Experts)構成のため、トークンごとに参照するエキスパートが異なります。検証するトークンが増えるほどアクセスするエキスパートも増えるため、「重みの読み込みは 1 回で済む」という前提が崩れてしまいます。並列時の効果が +8% 程度に留まったのは、これが原因だと見ています。

注意点は、MTP を有効にすると測定値のばらつきが大きくなる点です。MTP なしの場合は 3 回測定しても 4.42〜4.47 段落/分とほぼブレませんでした。しかし MTP ありでは、同じ設定にもかかわらず 4.96 と 4.63 というように 7% もの差が出ました。答え合わせの成否が文脈や試行ごとに変動するため、速度も揺らぎやすくなります。

実践へのつなげ方

以上の検証結果を踏まえ、翻訳ツールの GUI に「MTP あり」のプリセットを追加しました。起動オプションは --model-draft mtp-gemma-4-26B-A4B-it-Q4_0.gguf --spec-type draft-mtp --spec-draft-n-max 4 とし、思考上限の 1024 トークン設定は維持しています。これにより、普段の 4 並列翻訳では約 15% の高速化、特定の 1 段落だけを再翻訳する際には待ち時間を 3 分の 2 に短縮できるようになりました。

次に試すこと

今回は本番設定の 0.2 で測りましたが、MTP は出力のブレが少ないほど当たりやすくなります。温度を 0.0 に固定して受理率が 80〜90% 台まで跳ね上がるのか、それによって 4 並列時の伸び悩みが改善するかを検討します。