この記事は、Googleが最近発表した TurboQuant という新しい圧縮技術を紹介しながら、とくに KV cache compression の仕組みを説明しています。
ざっくり言うと、LLMやベクトル検索は賢いけれど、巨大なメモリを食います。
その中でも厄介なのが KV cache です。
KV cacheは、ざっくり「計算済みの中間結果を置いておく高速メモ帳」みたいなものです。
LLMが文章を1トークンずつ生成するとき、毎回ぜんぶを計算し直すと遅すぎるので、過去の情報を覚えておくわけです。
でもこのメモ帳、長文になればなるほどどんどん大きくなります。
つまり、長い文脈を扱いたいほどメモリがきつくなる。ここがLLMの実運用でかなり大きなボトルネックです。
正直、この問題は「AIが賢くなるほど、周辺のインフラがしんどくなる」という典型例だと思います。モデル本体の性能だけでなく、こういう地味な圧縮技術が効いてくるのが面白いところです。
元記事によると、TurboQuantは large language models と vector search engines を圧縮するための新しいアルゴリズム群で、accuracyを損なわずにキャッシュメモリ消費を 3 bits まで下げられるとされています。

ここで言う「3 bits」は、かなり強烈です。
普通、データ圧縮は「小さくしたら精度が落ちる」というトレードオフがつきものです。ところがTurboQuantは、その常識をかなり押し返そうとしている。ここが一番の見どころだと思います。
しかも、retraining不要というのが実務的に大きいです。
学習済みモデルをもう一回育て直すのは、コストも時間も重い。だから「後から差し込める圧縮技術」は、現場ではかなり魅力的です。
元記事では、従来の vector quantization (VQ) には副作用があると説明しています。
quantizationとは、簡単に言えば「高精度な数値を、少ない情報量で表すこと」です。たとえば、細かい小数をざっくり丸めて保存するイメージです。
ただし、従来方式には次のような弱点があります。
要するに、「圧縮したいのに、圧縮のための付属品が邪魔をする」わけです。
このあたり、かなり“あるある”な工学の悩みだなと思います。
TurboQuantの核心は、2段階で圧縮するところです。
最初の段階では、ベクトルを polar coordinate system に写し替えます。
polar coordinates は、ふつうの x-y 座標ではなく、半径と角度で位置を表す方法です。
この記事では、この変換によって次のような効果があると説明されています。
要するに、まずデータの見た目を整理して、圧縮しやすい形に整えるわけです。
個人的には、ここがかなり賢いと思いました。いきなり無理やり削るのではなく、「削りやすい形に並べ替える」発想だからです。
2段階目は QJL (Quantized Johnson-Lindenstrauss) です。
役割は、1段目で残った bias や hidden errors を取り除くことです。
ここで出てくる Johnson-Lindenstrauss Transform は、ざっくり言うと「高次元データを低次元に押しつぶしても、距離関係をなるべく保つ」ための数学的手法です。
元記事では、QJLが残差に対して 1-bit の最小限の圧縮を行い、符号ビット(+1 / -1)に近い形でエラーをチェックする、と説明しています。

つまり、
という二段構えです。
この分担はかなり気持ちいいです。
圧縮って、どうしても「大胆に削る」と「正確さを保つ」がぶつかりやすいのですが、TurboQuantはその役割を分けている。設計として美しい、という印象があります。
元記事では、quantizerを mean-squared error (MSE) だけで最適化すると、inner product の推定に hidden bias が入る、と述べています。
inner product は、ベクトル同士の“相性”や“向きの近さ”を見る計算です。
LLMのattentionでは、これがまさに重要になります。attentionは「どの情報に注目するか」を決める仕組みなので、ここがズレると生成品質に響きやすい。
つまり、単に数値を小さくできればいいわけではなく、attention score を正しく保てるか が本丸です。
ここをきちんと見ているのが、TurboQuantの面白いところだと思います。
元記事によると、PolarQuantでは random rotation を使ってデータベクトルを回転させます。
これにより、各座標の分布が扱いやすい形になり、特に Beta distribution のようなコンパクトな分布に近づくと説明されています。

少し難しく聞こえますが、要するにこうです。
さらに、PolarQuantはベクトルを Cartesian coordinates ではなく、radius-angle pair で扱うので、正規化のような余計な準備作業を減らせる、というのがポイントです。
ここはかなり実装寄りの話にも見えますが、根っこは「データの幾何を整えると、圧縮がうまくいく」という発想です。
理屈としてもきれいだし、実際のシステムでも効きそうだなと思います。
QJLの役目は、PolarQuantで残った誤差を拾って、unbiased estimator に近づけることです。
元記事では、この段階で残差に対して 1-bit compression をかける、と説明されています。
1-bitというのは、たった1つの符号情報だけで表すイメージです。かなり極端ですが、そこに意味がある。圧縮しすぎることで、かえって“ズレの構造”をシンプルに捉えられるわけです。

この仕組みの肝は、
という点にあります。
正直、ここはかなり数学の匂いが強いです。でも逆に言えば、「なんとなく速い」ではなく「なぜ速くて、なぜ精度が落ちにくいのか」 を説明できるのは強い。こういう理論ベースの技術は、長く生き残りやすいと思います。
個人的に一番おもしろかったのは、TurboQuantが単なる“軽量化の小技”ではなく、圧縮の理屈そのものを再設計しているところです。
圧縮技術って、世の中にはたくさんあります。
でも多くは「とにかく削る」「とにかく丸める」という発想に寄りがちです。TurboQuantはそこに対して、
という、かなり筋のいい構造を作っています。

もちろん、元記事は技術紹介であって、実際のあらゆる現場で万能と断言しているわけではありません。
ただ、LLMの運用コストを本気で下げたいなら、こういう発想はかなり重要ではないかと思います。
TurboQuantは、Googleが出した新しい compression / quantization のアルゴリズム群で、LLMやvector search engineのメモリ負荷をかなり下げることを狙っています。
ポイントは、
という流れです。
AIは「モデルが賢いか」だけではなく、「その賢さを安く・速く使えるか」が本当に大事です。
TurboQuantは、その裏側を支えるかなり本質的な技術だと感じました。派手さはないけれど、こういう基盤技術が一番効く。そういうタイプの話として読むと、かなり面白い記事です。
参考: Effective KV Compression with TurboQuant - MachineLearningMastery.com