llama.cpp b11821、Intel XMX向けSYCLマルチカラム処理を刷新し+5.9%

llama.cppはリリースb11821(#29864)で、SYCLバックエンドのIntel XMXマトリックスエンジン向けマルチカラム処理をリファクタリングしました。B70上のQ4_K_Mでtg128が26.67 tok/sから28.23 tok/s(+5.9%)に向上しています。

何が新しいか

対象は、reordered K-quantとQ8_0の重みに対する2〜80 activation columnsのmul_mat_vec_qで、int8 DPASとESIMDを使います。speculative decodingの検証(1ステップあたり2〜8トークン)と短いプロンプトのバッチ(9〜80トークン)を想定しています。Q2_K、Q3_K、Q8_0の3形式はシングルカラムでもこの経路を使います。

主な変更点は次のとおりです。

  • fused gate/up kernelを実装しました。FFNの2つの重みについて、活性値を一度だけ読み、up * act(gate)を1回のlaunchで計算し、SWIGLUまたはGEGLUをepilogueで適用します。最大16カラムまで対応し、XMXの6形式すべてで動作します。
  • 初期実装で行数が4の倍数でないときにNaNが出る回帰バグを修正しました。
  • Q2_Kのmin-sum最適化、dispatchチェック、GRF sweepを追加しました。
  • 一時的な環境変数XMX_NOGLUを削除しました。
  • esimd.hppで5つのquant構造体の重複コードを共通化し、DPASを1回実行してfloat変換と行ごとのスケーリングを行うヘルパーxmx_termを追加しました。

性能とテスト結果

項目 結果
tg128 Q4_K_M(B70) 26.67 → 28.23 tok/s(+5.9%)
Q6_K 変化なし
MUL_MAT 1727/1727
perplexity(batch 1、XMXあり) 5.2064
perplexity(batch 1、XMXなし) 5.2058

設定用の環境変数

変数 デフォルト 範囲 内容
GGML_SYCL_XMX_MAX_COLS 80 0以上 マルチカラム処理の最大カラム数
GGML_SYCL_XMX_GLU_MAX_COLS 16 0〜16 fused gate/up kernelの最大バッチ

GGML_SYCL_XMX_GLU_MAX_COLSは、fused kernelが16カラムまでしかコンパイルされていないため16でクランプされます。この変数は値を下げる用途にのみ使えます。

この記事の固有名詞

コメント (0)

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

コメントを書く

2000文字以内