- 高次元ベクトルのメモリオーバーヘッド問題を根本的に解決する量子化アルゴリズム群で、LLMのキー・バリューキャッシュ圧縮とベクトル検索の両方に適用可能
- PolarQuantでデータを高品質に圧縮した後、QJLアルゴリズムで残留誤差を1ビットだけで除去する2段階圧縮構造
- 学習やファインチューニングなしでキー・バリューキャッシュを3ビットまで量子化しながらモデル精度の損失がなく、H100 GPUで最大8倍の性能向上を達成
- ベクトル検索でも大規模コードブックやデータセット別チューニングなしで最適なrecall比率を記録し、既存の最先端手法を上回る
- 理論的下限に近い証明可能な効率性を備えた根本的なアルゴリズム上の貢献であり、Geminiのようなモデルや大規模セマンティック検索インフラで中核的な役割が期待される
ベクトルと量子化の背景
- ベクトルはAIモデルが情報を理解し処理するための根本的な方式であり、高次元ベクトルは画像特徴、単語の意味、データセットの属性といった複雑な情報を表現する
- 高次元ベクトルは膨大なメモリを消費し、その結果キー・バリューキャッシュ(よく使う情報を簡単なラベルで保存し、即座に検索できるようにする高速なデジタル参照シート)でボトルネックが発生する
- ベクトル量子化は高次元ベクトルのサイズを削減する古典的なデータ圧縮手法で、ベクトル検索の高速化とキー・バリューキャッシュのボトルネック解消に寄与する
- 従来のベクトル量子化には、小さなデータブロックごとに量子化定数をフル精度で計算・保存しなければならないという固有のメモリオーバーヘッドがあり、数値あたり1〜2ビットの追加コストが発生して量子化の目的を一部打ち消してしまう
TurboQuantの動作原理
- TurboQuantは精度損失なしで高いモデルサイズ削減を実現する圧縮手法で、キー・バリューキャッシュ圧縮とベクトル検索の両方をサポートする
- 2つの中核ステップで構成される:
第1段階: 高品質圧縮(PolarQuant方式)
- データベクトルをランダム回転してデータの幾何学構造を単純化した後、標準的な高品質量子化器をベクトルの各部分に個別適用する
- この段階では大半のビットを使って、元のベクトルの主要な概念と強度を捉える
第2段階: 隠れた誤差の除去
- 第1段階で残った微細な誤差にQJLアルゴリズムを、わずか1ビットの残差圧縮力で適用する
- QJLは数学的な誤差チェッカーとして機能し、バイアスを取り除いてより正確なアテンションスコアを算出する
QJL: ゼロオーバーヘッドの1ビット手法
- Johnson-Lindenstrauss変換を活用し、高次元データを縮約しながらデータポイント間の重要な距離と関係を保持する
- 結果ベクトルの各数値を単一の符号ビット(+1または-1)に縮約することで、メモリオーバーヘッドをゼロにする
- 精度維持のため、高精度クエリと低精度の単純化データを戦略的にバランスさせる特殊な推定器を使用する
- これにより、モデルが入力のどの部分が重要で、どの部分を無視できるかを決めるアテンションスコアを正確に計算する
PolarQuant: 圧縮への新たな「角度」
- メモリオーバーヘッド問題をまったく異なる方法で解決するアプローチ
- 標準座標(X, Y, Z)ではなく、ベクトルを極座標に変換する — 「東へ3ブロック、北へ4ブロック」を「37度の方向へ5ブロック」に置き換えるのに似ている
- 変換結果は2つの情報で構成される: 中核データの強度を表す半径と、データの方向・意味を表す角度
- 角度のパターンは既知で高度に集中しているため、境界が変化し続ける「四角形」グリッドではなく、境界があらかじめ分かっている固定の「円形」グリッドへデータをマッピングし、コストの高いデータ正規化ステップを省略する
- d次元ベクトルでは座標ペアをグループ化して極座標系にマッピングし、半径をペアごとにまとめて再帰的極座標変換を繰り返すことで、最終的に1つの半径と記述的な角度集合へと蒸留する
実験と結果
長文コンテキストベンチマーク性能
- LongBench, Needle In A Haystack, ZeroSCROLLS, RULER, L-Eval などの標準長文コンテキストベンチマークで、オープンソースLLM(Gemma, Mistral)を用いて評価
- TurboQuantは内積歪み(dot product distortion) と recall の両方で最適スコアを達成しながら、同時にキー・バリューメモリフットプリントを最小化した
- Llama-3.1-8B-Instructモデルで、質問応答、コード生成、要約など多様なタスクにわたりKIVIベースラインに対して堅牢な性能を示した
Needle-in-Haystackタスク
- 大量テキストの中から特定情報を探すテストで、TurboQuantはすべてのベンチマークにわたって完璧なダウンストリーム結果を達成
- キー・バリューメモリサイズを少なくとも6倍以上削減
- PolarQuantもこのタスクではほぼ無損失レベルだった
ランタイム性能
- 学習やファインチューニングなしでキー・バリューキャッシュを3ビットに量子化しながら、モデル精度に妥協はない
- 元のLLMよりも高速なランタイムを達成し、実装は極めて効率的でランタイムオーバーヘッドは無視できる水準
- 4ビットTurboQuantはH100 GPUで、32ビット非量子化キーに対するアテンションロジット計算において最大8倍の性能向上を達成し、JAX最適化ベースライン比で測定された
ベクトル検索性能
- 高次元ベクトル検索で、PQ、RabbiQなどの最先端手法と比較評価
- アルゴリズムが上位k件の近似候補の中で実際の最上位内積結果をどれだけ頻繁に捉えるかを測る1@k recall比率を使用
- 非効率な大規模コードブックやデータセット別チューニングを用いるベースラインに対して、TurboQuantは一貫して優れたrecall比率を記録
- GloVeデータセット(d=200)で、さまざまな最新量子化ベースラインに対して最適な1@k recall比率を達成
- データ非依存的(data-oblivious)な方式で準最適歪み率を提供し、3ビットシステムの効率で、はるかに重いモデルの精度を維持する
今後の展望
- TurboQuant、QJL、PolarQuantは実用的なエンジニアリングソリューションであるだけでなく、強力な理論的証明に支えられた根本的なアルゴリズム上の貢献でもある
- 証明可能な効率性を持ち、理論的下限に近い形で動作するため、大規模な中核システムにおいて堅牢で信頼できる
- 主要用途であるGeminiのようなモデルのキー・バリューキャッシュボトルネック解消を超えて、効率的なオンラインベクトル量子化の影響はさらに広範囲へ広がる
- 現代の検索がキーワード中心から意図と意味の理解へ進化する中、数十億規模のベクトルデータベースから意味的に最も近い項目を見つけるベクトル検索は不可欠
- TurboQuantは最小限のメモリ、ほぼゼロの前処理時間、最先端の精度で大規模ベクトルインデックスを構築・クエリできるようにし、Google規模のセマンティック検索をより高速かつ効率的に実現する
4件のコメント
"回転は無限の力だ。それを信じろ。"
敬意を表します。
このコメントのためにログインしました
Hacker Newsのコメント
KVキャッシュ圧縮の研究は本当に興味深い進展だと思う。
ただ、関連研究で中核となる数学的メカニズムへの引用が欠けているのは残念。
高次元幾何を扱うために幾何学的回転を適用したうえで極端な量子化を行う手法は、私たちのチームの NeurIPS 2021 論文 “DRIVE” で最初に提案したものだ。
この回転ベースのアプローチとバイアス補正メカニズムによって、最適な分散平均推定を達成した。
その後 Google の招待セミナーでもこの内容を発表しており、TurboQuant と PolarQuant の理論的な類似性を考えると、今後の版では先行研究への引用が反映されることを望む。
つまり、対角行列と新しい基底を保存して、さらに圧縮する方式なのかを聞きたい。
今回の研究と MHLA がどういう関係にあるのか説明してほしい。
こうしたアイデアは数年おきに再発見されがちで、たとえば 2017年の論文 にも類似のアプローチがあった。
ただ、研究者がすでにかなり進めた段階で、似たアイデアを独立に思いついた可能性もある。
良いアイデアというのは、問題を深く理解した人なら自然にたどり着くものだ。
「TurboQuant がデータをランダムに回転させて幾何を単純化する」という説明が理解できない。
回転すれば常により単純な形になる保証はないのでは?
また、「Johnson–Lindenstrauss 変換で高次元データを縮小し、各ベクトルを符号ビットで表現する」という部分も、ブール値1つで関係情報を維持するというのが腑に落ちない。
一部の次元では外れ値活性値が生じ、Adam オプティマイザの性質上、こうした現象が強化される。
関連論文として SmoothQuant と Privileged Basis が参考になる。
こうすることで不要な規則の学習を減らし、最適化を安定させられる。
つまり、モデルが「特定の次元の特定の桁が 5 なら猫」といった些末な規則を学ばないようにするわけだ。
回転行列を掛けるとデータがより均等に分布し、効率的な量子化が可能になる。
その後 Lloyd–Max アルゴリズムで境界と再構成値を最適化し、残ったバイアス(bias)** は 1ビットで補正する。
こうすれば少ないビット数でも高い精度を維持できる。
たとえば、浮動小数点値を別の単位(ベル→デシベル)に変えると、より近い値として表現できて圧縮しやすくなるのと似ている。
つまり、離れたデータを再び中心付近に集める過程だ。
また、各次元を個別に符号化するので、ベクトル全体が単一のブール値に縮むわけではない。
このブログ記事は質が低い。
グラフ の軸表示が間違っており、動画の可視化 もPolar Quantization の概念をまったく伝えられていない。
別の グラフ は軸が 48 から始まっていて、実際の差を誇張している。
全体として視覚資料の信頼性とコミュニケーションの質が低い。
すでに誰かが llama.cpp に実装を進めている。
関連コミット を参照。
Johnson–Lindenstrauss の定理は依然として成り立つので、各座標の独立量子化が理論的に妥当であることを期待している。
ドメイン知識はあまりないが、構造は明快に見える。
4〜6週間以内にメインブランチへマージされる可能性が高い。
TurboQuant を直感的に説明した アニメーション がある。
学部レベルで整理してみた要約。
要点はKVキャッシュを情報損失を最小限に抑えつつ量子化することだ。
ほとんどのベクトルは高次元球の赤道付近に集まっているため、回転によって分布を均等化してエントロピー保持を高める。
PolarQuant は極座標変換でこれを試みたが、TurboQuant はそれを単純化し、さらにQJL バイアス補正を追加した。
結局のところ、PolarQuant + QJL + 実用的な補正で高効率な圧縮を達成している。
ブログ記事には誤りが多く、混乱を招く。
PolarQuant のハイパーポーラ座標コードブックは TurboQuant にも一部残っている。
この記事はAI の構成要素の説明として最悪レベルだ。
技術的文脈がほとんどない。
Johnson–Lindenstrauss の定理に触れているのに、具体的なつながりの説明がない。
たとえば「東に3ブロック、北に4ブロック」を「5ブロック先、角度37度の方向へ移動」と説明するようなもので、中学生レベルの比喩に感じる。
独立した PyTorch 実装がすでに公開されている。
turboquant-pytorch
ブログは最近公開されたが、論文自体はほぼ1年前に arXiv に投稿 されていた。
すでに Gemini のようなモデルに適用されているのか気になるし、もしそうなら個人向けの RAM コストも下がるのではと期待している。
最近の圧縮研究が実用応用へつながるスピードには驚かされる。
画像フォーマットでも AVIF や JPEG XL が動画コーデック研究から派生したように、AI 量子化技術もまもなく実際の推論環境に適用される可能性が高い。
XYB 色空間など一部の概念は共通しており、LLM でも同様の用途特化エンジニアリングが必要になるだろうと予想している。