ローカルで言語モデルを動かす開発者に向け、CPU用の重み圧縮形式が五つ提案された。モデルの保存容量と出力精度のバランスを選ぶ選択肢を増やす提案だ。
1. 何を追加するのか
提案はIQ2_KからIQ6_Kまでの五つの形式を追加する。量子化は重みを少数の代表値で表す圧縮で、新形式は代表値の間隔が不均等な表である非線形コードブックを使う。
256個の重みを16個ずつに分け、グループごとの倍率と、コードブックを一定間隔でずらす情報を保存する。コードブックの段階数は2のn乗で、nは目標ビット数なので、4ビットなら16段階となる。
元の設計者はik_llama.cppでこの形式を先に作った。今回の提案はブロック配置と名前を踏襲するが、コードブックと量子化器の実装は別途作成した。
2. 使用方法と互換性
テスト用リポジトリには変換コマンドが示されている。以下のコマンドは重み圧縮を調整する較正データを指定し、<TYPE>には選択した量子化形式の名前が入る。
llama-quantize --pure --token-embedding-type q8_0 --output-tensor-type q8_0 --imatrix imatrix/imatrix-K2-Horizon-7B-medium.gguf K2-Horizon-7B-F16.gguf K2-Horizon-7B-<TYPE>.gguf <TYPE>注意点は、名前が既存実装と同じでもファイルに互換性があるとは限らないことだ。テストモデルの案内には、通常のllama.cppでは使えないと明記されている。提案者は、同じ名前で既存のコードブックを使えば互換性を持たせられるが、新しいコードブックを維持するなら名前を変えるべきだと説明した。形式番号の順序も合わせる必要があると付け加えたが、最終的な選択は示されていない。
3. 品質の結果と代償
品質比較はK2-Horizon-7Bの90億パラメータの密モデル一つを対象とした。レシピ、較正データ、量子化設定を固定し、評価には1024トークンのまとまりを275個使った。次の表の平均KLDは元モデルと圧縮モデルの出力確率分布の差を表し、低いほどよい。
表:同じファイルサイズでの出力誤差比較
条件:K2-Horizon-7B 9B密モデル、レシピ・較正データ・量子化設定を固定、KLD評価は1024トークンのチャンク275個、測定機は一台(ハードウェア仕様は示されていない)
単位:ファイルサイズGiB、平均KLDは無次元
| 形式 | ファイルサイズ | 平均KLD |
|---|---|---|
| Q3_K | 4.81 | 0.179783 |
| IQ3_K | 4.81 | 0.087475 |
| Q4_K | 5.67 | 0.023664 |
| IQ4_K | 5.67 | 0.018850 |
| Q5_K | 6.48 | 0.007991 |
| IQ5_K | 6.48 | 0.006624 |
この試験では三つのペアすべてでファイルサイズは同じだが、新形式の平均誤差が低かった。特に3ビットのペアでは平均KLDが0.179783から0.087475に下がった。ただし一つのモデルと一つの評価条件での結果なので、他の構造でも改善が維持されるかは追加試験が必要だ。
サイズと品質がともに改善するわけではない。同じモデルの試験でIQ6_KはQ6_Kよりファイルが51.75MiB、0.69%大きく、平均KLDは55.7%低かった。
一方、IQ2_KはQ2_Kよりファイルが4.9%小さいが、平均KLDは18.5%高かった。最も低ビットの形式では、サイズ削減の代償が誤差の増加として現れた。
変換時間もコストとなる。16スレッドで測定した実経過時間はIQ3_Kが155.3秒、Q3_Kが15.6秒だった。モデルごとに一度かかるコストだが、同じサイズで誤差を減らす代わりに、準備時間が大幅に増える可能性がある。
4. 提案の現時点での範囲
変更はまだマージされていない公開プルリクエストだ。CPU向けの変更とは別に、アクセラレータ対応を追加する提案が分かれている。
公開されたスループット試験は、同じモデルをMetalバックエンド・12スレッドで実行した結果だ。3ビット形式だけが明確に速く、残りはおおむね遅いか、結果が分かれた。これをCPUの速度改善の根拠とはみなせず、CPU推論性能の数値は示されていない。
同じ容量で誤差を減らす効果と、変換にかかる追加コストを併せて検討すべき実験的な提案だ。
