llama.cppはリリースb11408で、ggml-cpuにSpacemiT X60向けのQ8_0 IME1行列カーネルと、関連する再パック・量子化処理を追加しました(#28479)。Milk-V Jupiter上で、Qwen2.5-0.5B-Instruct Q8_0のpp128は10.70 t/sから93.87 t/sへ向上しています。
何が新しいか
これまでSpacemiT X60でIME行列アクセラレーションの対象になっていたのは、Q4_0、Q4_1、Q4_Kだけでした。Q8_0にはIME1カーネルがありませんでした。さらにSpacemiTビルドはGGML_CPU_REPACK=OFFを設定するため、再パック経路もコンパイルされていませんでした。そのためQ8_0には高速化された経路がなく、同じボード上のプリフィル速度はQ4_0の約10分の1でした。
今回の変更内容は次のとおりです。
make_block_q8_0x16とQ8_0の再パックエントリを追加し、重みをIME1のvmadotシーケンスが期待する16列レイアウトへインターリーブします。- int8 x int8のIME1カーネル
ime1::gemm_kernel_i8i8を追加しました。単一行Aパスと4行Aパスを備えます。4行パスは各Bパネルを1回だけロードし、Aの4行で再利用します。 - 4行アクティベーション量子化用に
quantize_a_4row_i8を追加しました。 - これらを
forward_mul_matと、Q8_0用の再パックファクトリーへ接続しました。 - ドキュメントで、Q8_0をX60対応として記載しました。
ベンチマーク結果
測定はtaskset -c 0-3の下でllama-bench -t 4を実行し、アイドル状態のボードで5回反復しています。
| 形式 | pp128 変更前 | pp128 変更後 |
|---|---|---|
| Q8_0 | 10.70 t/s | 93.87 t/s |
| Q4_0 | 106.40 t/s | 107.51 t/s |
Q4_0の経路は今回の変更の対象外です。数値がほぼ変わらないのはそのためです。
正確性検証とテスト環境
正確性は2つの方法で確認しています。1つはK=32から4096の範囲で、量子化に厳密な整数リファレンスと比較する方法で、最大相対誤差は約1e-6でした。もう1つは、複数のプロンプトで生成内容の一貫性が保たれることの確認です。
| 項目 | 内容 |
|---|---|
| ボード | Milk-V Jupiter(SpacemiT X60) |
| OS | Bianbu 2.1.1 |
| コンパイラ | gcc 14.2 |
| モデル | Qwen2.5-0.5B-Instruct Q8_0 |
| スレッド数 | 4 |
Qwenは、Alibaba Cloudが開発する大規模言語モデルのファミリーです。

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