Qwen3.6-27BにMTPを「移植」し、Unsloth UD XL上で2.5倍スループット:未統合のllama.cpp PRを使った成果

Reddit r/LocalLLaMA / 2026/5/6

📰 ニュースDeveloper Stack & InfrastructureSignals & Early TrendsTools & Practical UsageModels & Research

要点

  • 本記事では、UnslothのUD XL量子化GGUFを使ってQwen3-27BにMulti-Token Prediction(MTP)を有効化するDIY構成が共有されており、ベースモデルにMTPの「draft heads」を移植しています。
  • メインとなるモデルは低ビット量子化のまま維持しつつ、3つのMTPレイヤーのみQ8で動作させて推測(スペキュレーティブ)精度を保つ方針です。
  • ローカル推論でMTPを動かすために、著者はllama.cppの未公開(まだオープン)のPR #22673からspeculative-decodingの対応を取り込み、masterに統合してllama-serverをMTP有効化付きでビルドしています。
  • ベンチマークでは、同じGGUFをMTPなしで動かした場合に比べてトークンスループットが約2.5倍になり、受け入れ率が高いことから、ドラフトトークンが主に保持され計算が無駄になりにくいことが示されています。
  • 著者は、この取り組みにより、MTPが主にSGLangやvLLM上の公式Qwen3配備に限られていた効率化機能を、GGUF+llama.cppのエコシステムへ持ち込めると主張しています。

みなさんこんにちは。Quantized GGUF(量子化GGUF)で、Qwen3-27BにMulti-Token Prediction(MTP)を動作させる作業を進めていて、その結果がかなり素晴らしいです。私がまとめた内容は以下のとおりです: https://huggingface.co/havenoammo/Qwen3.6-27B-MTP-UD-GGUF

これは、Qwen3-27BのUnslothによるUD XL量子化に、上からMTPのドラフトヘッドをQ8_0で移植(graft)したものです。ベースモデルは通常どおり低ビット量子化のままにしつつ、3つのMTP層はスペキュレーティブ精度を保つためQ8のままにしています。

移植済みのGGUFファイル(UD XLベース + Q8 MTP)、私が抽出した生のMTP層ソース(MTP_Q8_0.gguf)、そしてconvert.py(私がこのgistから適応した移植スクリプト)を共有します。他のモデルでも同様にやりたい人がいる場合に備えて。さらに、custom llama.cpp のフルビルド手順も同梱されています。

Qwen3は3段のMTPステップで学習されており、つまり各フォワードパスで一度に4トークンを予測します。llama.cppのメインブランチはまだMTPをサポートしていないため、まだオープンの PR #22673 からスペキュレーティブデコーディングのサポートを取り込み、masterの上にマージして、その状態でllama-serverをビルドしました。実行は次のとおりです: --spec-type mtp --spec-draft-n-max 3

結果:MTPなしで同じUD XL GGUFを実行した場合と比べて、だいたい2.5倍のトークンスループットです。さらに、ドラフトトークンの多くが保持される堅実な受け入れ率が得られており、つまりMTPヘッドは本当に役に立っていて、単に計算を浪費しているだけではありません。Q8のMTP層はモデル全体のほんの一部なので、VRAMの追加オーバーヘッドも非常に小さいです。

MTPは、スペキュレーティブデコーディングで利用可能な最大級の効率向上の1つですが、基本的にはSGLangおよびvLLMでの公式Qwen3デプロイ以外ではサポートされていません。これでGGUFとllama.cppでも使えるようになりました。つまり、すでに使っている同じツールでローカル実行できます。PR #22673 が近いうちに取り込まれて、この一連が何も考えずにそのまま動くようになることを期待しています。その間は、マージ手順は簡単です(gitコマンド3つ)。

質問があればお答えしますし、誰かが動かせるように手伝うこともできます。試してみて、どのくらいの速度が出るか教えてください!

完全な手順はHuggingFaceリポジトリにありますが、ここでは短い版を載せます:

# 1. MTPサポート付きで llama.cpp をビルド git clone https://github.com/ggml-org/llama.cpp.git cd llama.cpp git fetch origin git fetch origin pull/22673/head:pr-22673 git checkout master git reset --hard origin/master git merge --no-ff pr-22673 -m "Merge PR #22673: llama + spec: MTP Support" cmake -B build -DGGML_CUDA=ON cmake --build build --config Release --target llama-server # 2. HF から GGUF を取得 # https://huggingface.co/havenoammo/Qwen3.6-27B-MTP-UD-GGUF # 3. MTPで実行 ./build/bin/llama-server -m your-model.gguf --spec-type mtp --spec-draft-n-max 3 
submitted by /u/havenoammo
[link] [comments]