llama.cpp b11474、GLM5-NextのMTPグラフと分割GGUF読み込みに対応

llama.cppはリリースb11474(#29928)で、GLM5-Nextのマルチトークン予測(MTP)ヘッドをグラフとして追加し、NextN処理の最適化と、MTP-only/trunk-onlyに分割したGGUFの読み込みに対応しました。共同作成者にはGeorgi GerganovとPascalが名を連ね、各変更は「Assisted-by: Claude」と記されています。

llama.cppはggml-orgが公開するC/C++製の推論ソフトウェアで、GLMはZ.aiが開発するモデルファミリーです。

何が新しいか

GLM5-NextのNextNブロックをgraph_mtpとして構築します。NextNブロックはenorm(tok)+hnorm(h)をeh_projで埋め込み、通常のDSA層を1つ実行し、共有lm_headを使います。trunkのビルダーはno_buildタグのコンストラクタ経由で再利用します。またllama_memory_recurrentは、コンテキストにrecurrent層がない場合に部分的なseq_rmを許容するようになり、これはMTPのdraft contextが必要とする挙動です。

NextN処理の最適化

出力行のないNextN forward(MTPのcatch-upとdraft contextのprefill)はキャッシュ書き込みだけが後に残るため、計算を削る変更が入りました。

方式 内容 4トークンcatch-upのカーネル時間
最適化前 — 6.9 ms
headless graph prune MLA latent、indexer key/gate、pooled-keyの書き込みを残し、query経路・indexer選択・attention本体・FFN・LM headを除外 0.33 ms
crop方式 output idsでattention outputとblock inputを集め、FFNと共有headを0行で実行 2.9 ms

いずれの変更でもgreedy出力ハッシュは変わらず、prune方式ではdraft acceptanceも変わらなかったとしています。後続変更でpruneは他のMTPグラフと同じcrop方式に置き換えられ、crop_before_nextnとcrop_after_nextnで、main graphや他モデルと同じ方法で行を絞り込みます。

修正点

  • headless pruneは、出力行がないことに加え、マスクされていないNextN抽出が有効でない場合に限定(このモードはlogitsフラグに関係なくn_tokens分のhidden rowsを読むため)
  • マスク付きNextN抽出はoutput idsで集めたhidden rowsを公開し、出力フラグが先頭連続でないバッチでも正しい行を出力
  • 部分recurrent rollbackで末尾セルを別シーケンスと共有している場合は、そのシーケンスの末尾を黙って動かさず拒否

分割GGUFの読み込み

NextN層だけを含むファイルではtrunk tensorsを、trunkだけを含むファイルではNextN tensorsを任意扱いにします。これにより分割したMTP用GGUFをdraftモデルとして読み込めます。

この記事の固有名詞

コメント (0)

まだコメントはありません。

コメントを書く

2000文字以内