前にもローカルLLMの構築は試したのですが今回はMTPという技術を使ってみたいと思います。
ぜひ前の記事も読んでください
環境
- Windows 11 Pro
- llama.cpp b9828
- RTX 4060
MTP (Multi-Token Prediction)とは
MTP (Multi-Token Prediction)とは数単語先まで別モデルが先読みして生成します。
この予測が正しければ採用され、出力される仕組みです。
最終的には元のモデルがチェックして生成するのでモデルの劣化がありません。
llama.cppのインストール
インストールしてるよって方は読み飛ばしてください。
この記事ではWindowsかつRTX系のGPUを使っていることを前提とします。
から最新のWindows x64 (CUDA 13)とCUDA 13.3 DLLsと書かれたところを押してダウンロードしてください。
次にそれぞれ解凍して、CUDAのdllを全てllama.cppの実行ファイルがある方に移動させてください。
モデルのダウンロード
上記のリンクからgemma-4-E4B-it-qat-UD-Q4_K_XL.ggufとgemma-4-E4B-it-BF16-MTP.ggufをダウンロードします
次に下記のコマンドを実行すればMTPを使用することができます。
llama-server.exe -m gemma-4-E4B-it-qat-UD-Q4_K_XL.gguf -md gemma-4-E4B-it-BF16-MTP.gguf --spec-type draft-mtp --spec-draft-n-max 4 -fa off -ngl 99 --port 8080 --host 0.0.0.0 -c 16384 --jinja
http://localhost:8080にアクセスすればUIが表示されます。
比較
下記のプロンプトを送信した時の反応を見ます。
シンプルなLocalstorage APIを使用した複数保存可能なメモ帳を作ってください
走れメロスについて感想文2000文字程度で書いてください
青空文庫から引っ張ってきたテキストファイルを添付しました
√27+3√a+√b=5√3+9√2に当てはまる自然数a,bを求めてください。ただしステップごとにやること
| Gemma 4 | MTPなし | MTPあり |
|---|---|---|
| 一個目 | 3,401 tokens | 3,928 tokens |
| 50s | 29s | |
| 66.79 t/s | 134.11 t/s | |
| 二個目 | 1,462 tokens | 1,529 tokens |
| 23s | 20s | |
| 63.52 t/s | 72.91 t/s | |
| 三個目 | 1,424 tokens | 1,168 tokens |
| 23s | 7.4s | |
| 59.44 t/s | 157.24 t/s |
英語のベンチマークを取ってみたいので次は英語で指示してみます。
メロスは除外します。
Please create a notepad that allows users to save multiple notes using the simple LocalStorage API.
Find the natural numbers a and b that satisfy the equation √27+3√a+√b=5√3+9√2. Be sure to show your work step by step.
| Gemma 4 | MTPなし | MTPあり |
|---|---|---|
| 一個目 | 3,215 tokens | 2,597 tokens |
| 51s | 16s | |
| 62.62 t/s | 153.23 t/s | |
| 二個目 | 1,181 tokens | 1,278 tokens |
| 17s | 8.1s | |
| 68.44 t/s | 157.53 t/s |
あまり変化しませんでした。
まとめ
コードを書いてるときたまに180t/s行くこともあったので早いときは3倍くらい速くなりました。
遅いときでも2倍程度は速くなりました。
VRAMの消費ですが4.2GBからMTPを使うことで4.9GBになるので0.7GBほど容量を食います。
でも結構速くなるのでその価値があると思いました。
llama.cppのバグ?でFlash Attentionというメモリ削減技術が使えないのでアップデートを期待します。