llama.cppはリリースb11454(PR #29535)で、K2 Horizonのdenseモデルと MoVA のサポートを追加しました。GGUF変換から計算グラフ、チャットテンプレート、reasoningとツール呼び出しまでを含み、0.9B・4B・MoVAで会話とツールのラウンドトリップを検証しています。
llama.cppはggml-orgが公開するC/C++製の推論ソフトウェアで、CPUや各社GPUで動作します。
何が新しいか
変更はifm-ai/llama.cppのK2 Horizon実装を取り込んだもので、コンバーター、テンソル並列、モデル保存・再読み込みの修正を含みます。主な追加内容は次のとおりです。
- GGUF変換コード、
k2-horizon.cppでのhparamsとテンソルの読み込み、計算グラフ、トークナイザー登録 - チャットテンプレートとsafetensors命名への対応
- K2 Horizonのreasoningとtool callsへの対応
- jinjaの
selectattr/rejectattrでシーケンスインデックスをサポート - 応答スキーマの強制: 推論後の最終JSONの制約、柔軟なJSONツールエンベロープの受け入れ、XMLダイアレクトの強制、繰り返し・別形式のthinkingマーカーの処理
- モデルメタデータからYaRN beta値を読み込み(従来はデフォルト値のまま)
- 旧K2 Auroraエイリアスの削除
複数の変更はCodexの支援で作成され、共同作成者にRyandito Diandaru、WestWaters、Natani L. Mayday、aaryamonvikramが名を連ねています。
プリトークナイザーの修正
K2 Horizonの正規表現はunicode_regex_split_customに分岐がなく、汎用のstd::regexフォールバックに落ちていました。これが2つの問題を起こしていました。
| 問題 | 内容 |
|---|---|
| MSVCで読み込み不可 | std::regexが\p{...}を拒否し、Windowsではllama-quantize、llama-imatrix、llama-perplexityがトークン生成前にregex_error(error_escape)で中断 |
| ZWNJ/ZWJの誤分割 | U+200C/U+200DがカテゴリControlでk_ucat_cptに項目がなく0xD0のフォールバックバイトになり、ZWNJやZWJごとに文字ランが切れる |
K2の正規表現はllama3と比べ、文字ランがマーク・ZWNJ・ZWJも取り込む点だけが異なるため、既存のllama3用スプリッターの規則を1つ広げて対応しました。tests/test-unicode.cppに追加したケースは、変更前に[Amy] [ZWNJ khaham]で失敗し、変更後はランが保たれて通ります。ケースフォールディングと空入力の処理も加えています。
検証範囲
- CUDAおよびCPUビルドで検証
- 0.9B、4B、MoVAで会話・ツールのラウンドトリップを確認
- スキーマ、ストリーミング、継続処理、モデル再読み込みの回帰テストを追加
コミット履歴には、attn_v_expの分割とMetal fusionの修正、TP向けにgroup norm前でembdsをコピーする修正に加え、「disable tesnor parallelism」という変更も含まれています。

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