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でクランプされます。この変数は値を下げる用途にのみ使えます。

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