llama.cpp、b11454でK2 HorizonのdenseとMoVAに対応

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」という変更も含まれています。

この記事の固有名詞

コメント (0)

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

コメントを書く

2000文字以内