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モデルとして読み込めます。

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