AIモデルを自前のサーバーに載せて運用している現場では、GPUメモリを最も食う「真犯人」をしばしば誤解している。普通はモデル本体を思い浮かべるが、実際には「いま会話している相手を覚えておくためのメモ帳」のほうが重いことがある。ユーザーが増えるほどこのメモ帳の山が膨らみ、ある瞬間にモデル本体を超えてしまう。
STEPQuantは、そのメモ帳を6ビットに圧縮する。線形アテンション系のモデルを自前サーバーに載せ、同時ユーザーが多い環境で、精度は実質的にFP32(32ビット、ほぼ無損失)のまま保ちながら、メモリを目に見えて削減した。論文が示した最大の削減幅は68.7%だが、これはQwenを重み4ビット(W4)・バッチ512で動かした特定条件での値であり、重み・予約状態プール・KVキャッシュを合算したメモリを基準にしたものであって、サーバー全体のメモリではない(付録の算定基準であり、一部の構成要素と割り当てのオーバーヘッドは除外)。つまり使える条件が限られているということでもあるが、その話は後に回そう。
秘訣は、圧縮をより強くかけたことにあるのではない。誤差を「見分けて」扱ったのだ。従来の量子化が主に誤差の「空間」の問題、すなわち「状態のどの位置が重要か」に集中していたのに対し、STEPQuantはそこに「時間」軸、すなわち「この誤差がどれだけ長く残るか」という次元を加えた。これがこの手法の核心的な貢献だ。本稿はその時間軸をたどる。
いま広く使われているソフトマックスアテンションは、やり取りした単語の断片(トークン)が増えるほど、過去の記録を収める「KVキャッシュ」も一緒に大きくなる。一方、線形アテンション(linear attention)は、過去をすべて循環状態(recurrent state) — サイズが固定された要約メモ帳ひとつ — に押し込めることでこの問題を回避する。文脈がどれだけ長くなってもメモ帳のサイズは変わらない。このメモ帳を毎ステップ少しずつ消して新しく上書きする更新方式をゲート付きDeltaルール(gated Delta-rule)と呼び、Qwen3.8-27B(以下Qwen、構造名GDN)やKimi-Linear-48B-A3B-Instruct(以下Kimi、構造名KDA)のように、この方式と通常のアテンションを混ぜたハイブリッドモデルが最近よく登場する。
ところが「固定サイズ」という長所が、サーバー運用の段階では別のボトルネックとなって返ってくる。同時に入ってくるリクエストごとに、それぞれ専用のメモ帳を別々に抱えておかなければならないからだ。ここにサービングシステムがあらかじめ確保しておく予備の枠まで加わると、文脈が短くても同時リクエストが増えるほど、メモ帳を集めておく「状態プール」のメモリも一緒に膨らむ。実際、公式のSGLangデプロイ基準で見ると、QwenのFP32状態プールは同時リクエスト70件の地点でモデル本体(BF16重み)のメモリを超える。
メモ帳を軽くする道が量子化(quantization)だ。数値をより少ないビットで粗く丸めて表現する圧縮法である。32ビットで書いていた値を6ビットに減らせば桁は一気に縮むが、微細な誤差が生じる。普通はこの誤差が少し溜まってもモデルは耐える。ところが状態をそのまま均一に量子化すると精度が崩れる。Qwenの長文生成タスクの平均が、FP32の80.60%から6ビット均一量子化の45.04%へと半減した。
なぜ状態だけが厄介なのかは、重みと比べると鮮明になる。モデルの重みは、一度撮って終わりの写真のようなものだ。載せるときに一度量子化すれば推論中ずっとその値のままなので、誤差は一枚に固定されるだけで広がらない。一方、循環状態は、毎回塗り重ねて仕上げていく肖像画に近い。ところで、絵の具を節約しようとして毎回薄い色でしか塗り重ねないとしよう。一度の薄い筆づかいは問題ない。だがその上にさらに薄い筆を重ねれば、結局は肖像画全体の色が褪せてしまう。答えを一文字ずつ生み出すデコードステップごとに状態を更新し、その値を再び量子化して保存するため、今回のステップの丸め誤差が次のステップの入力へとフィードバックされて積み重なる。量子化誤差が累積するとは、まさにこの過程のことだ。
出発点はひとつの観察だ。状態に入り込んだ誤差といっても、すべてが同じ重みではない。その影響力は互いに異なる二つの軸に分かれる。どれだけ長く残るか(時間)、そしてどれだけ重要な位置にあるか(空間)。
長く生き残る誤差のほうが大きな問題を引き起こす。だから、こうした「ゾンビ誤差」が生まれそうな場所を集中的に防御する。このアイデアが寿命考慮型ビット配分(Lifetime-aware Bit Allocation)だ。
状態のあるマスはすぐに上書きされて消え、あるマスは長く保存される。長生きするマスに入り込んだ誤差は、数多くのデコードステップにわたってしつこく影響を残す。数式も同じことを語る。状態を更新するとき、新しく入ってきた情報と方向が似ている誤差はすぐに削り取られるが、方向がずれた見当違いの誤差は「忘れる割合」(ゲート)だけに頼ってゆっくりと薄れていく(Proposition 1)。記憶を長く抱えるマスほど、見当違いの誤差がゾンビのように生き残る。測定もこの構図をそのまま描く。記憶マスをわざと粗く圧縮してみると、長く抱えるマスほど累積誤差が大きかった(Fig. 1(b))。
そこで、定められた平均ビット予算の中で、誤差が大きく長生きする単位にビットをより多く振り向ける。各単位の復元歪みと、そのマスが記憶を平均どれだけ長く抱えるかを併せて反映したスコアでビット幅を選ぶ。単位は構造ごとに異なり、Qwenでは記憶マス(ヘッド)ひとつ全体、Kimiではキー行(key row)ひとつになる。どうしても圧縮できない少数の高リスク単位は、FP16のまま残してピンポイント(pivot)として守る。
同じ大きさの誤差でも、状態のどの位置にあるかによって出力に与える衝撃は異なる。そこで、各行が最終出力の誤差にどれだけ寄与するかを行影響スコア(row-impact score)で評価する。検証は単純だ。キー行を影響の順に分け、一束ずつだけ4ビットに落としてみると、影響の大きい束ほどパープレキシティ(モデルが次の文字をどれだけ迷うか、低いほど良い)が悪化した。
観察がもうひとつ加わる。状態行列の中で、とりわけ突出した大きな値が行と列(スプレッドシートの横線・縦線)の両方に同時に現れる。片方の軸だけスケールを合わせても両方は収まらない。従来のLLM量子化がたいてい大きな値は一方の軸にだけ偏ると見て、その一軸だけを狙っていたのと分かれる地点だ。このパターンはデコード2048ステップの間ずっと保たれた。だからこそ、行と列にそれぞれ別のスケールを与えるキー行考慮型二軸フィッティング(Key-Row-Aware Dual-Axis Fitting)へとつながる。
6ビットのSTEPQuantは、両モデルとも実質的に無損失のFP32との差が小数点第二位にとどまった。同じ6ビットでも均一に圧縮すると精度が半減し、事実上別のモデルになる。単に圧縮するのか、それともどこにビットを使うかを見分けて圧縮するのか — そこが結果を分けた。
| 設定(長文生成の平均) | STEPQuant | 均一量子化 | FP32 |
|---|---|---|---|
| 6ビット · Qwen | 80.59% | INT6 45.04% | 80.60% |
| 6ビット · Kimi | 61.47% | INT6 45.70% | 61.52% |
| 4ビット · Qwen | 80.51% | INT8 71.86% | 80.60% |
| 4ビット · Kimi | 58.52% | INT8 56.02% | 61.52% |
より攻めた4ビット予算でも、STEPQuantは2倍のビットを使った均一INT8を上回る。ただしKimi 4ビットはFP32と約3ポイントの差が残る — すべての組み合わせで完勝ではないということだ。短文生成タスクでは、4ビットのSTEPQuantがFP32にQwenで0.15・Kimiで0.25ポイントしか及ばず、重みまで4ビットAWQで抑えた実戦型の設定でも、6ビットのSTEPQuantはQwenで0.05・Kimiで0.33ポイント差にとどまった。重みを圧縮するほど状態がメモリに占める比重が大きくなるので、状態圧縮の価値はこの組み合わせでむしろいっそう明確になる。
効率も複数の角度から確認される。6ビットのSTEPQuantは循環状態をQwenで5.03倍・Kimiで5.08倍に圧縮するが、この圧縮比(特にKimiの5.08倍)は実測の割り当て量ではなく保存フォーマットに基づく理論計算値だ(付録D)。同じメモリ算定基準(重み・予約状態プール・KVキャッシュの合算、一部の構成要素と割り当てのオーバーヘッドは除外)で、Kimiのメモリは53.7%減り、状態の更新は8.48msから4.76msへと1.78倍速くなった(2.91倍はQwenでの値だ)。
この結果はどうして可能だったのか。二つの軸が互いを補い合ってシナジーを生んだおかげだ。構成要素をひとつずつ外してみた実験(Qwen)では、時間・空間を合わせたSTEPQuantが4ビットで84.72%・6ビットで84.51%となり、空間のみ(73.95%・80.19%)や時間のみ(12.87%・75.63%)を使った場合をいずれも上回り、FP32(84.61%)に収束した。どちらか一方の軸だけでは不十分で、特に時間軸だけを単独で使うとかえって崩れる。ピンポイントの効果も大きい。Qwenのヘッドのわずか1.39%をFP16で守っただけで、4ビットの3タスク平均が6.70ポイント、6ビットのAIMEが14.16ポイント上がった。全体の1%台を守り抜く投資が、精度を大きく引き上げたわけだ。
ONTLEは、小規模企業や一人起業家の反復業務を軽くするAIプロジェクトマネージャー(PM)を派遣するサービスだ。数十社の顧客がそれぞれのAI PMを一日中開いておき、各自の記録と会話の文脈を抱えて動かす。コストを抑えようとモデルを自前ホスティングすると、GPUを食う元凶は重みではなく、同時セッションごとに別々に維持される状態プールになりやすい。新規顧客を受け入れるたびに「GPUをもう一枚買わなければならないのか」と悩む状況を思い浮かべてほしい。
もしあなたがONTLEのCTOなら、STEPQuant導入を決める前に三つの問いをまず投げかけるべきだ。第一に、わがサービスは本当に状態プールのせいで息切れしているのか。サービングが重みで詰まっているのか状態プールで詰まっているのかから切り分けて測らなければならない。同時リクエストが少なく低負荷なら優先度は低い。第二に、わが社が使うモデルはこの技術を受けられる構造か。ゲート付きDeltaルール系(GDN・KDA)でなければならず、検証もQwen・Kimiの二モデルに限られている。第三に、モデルを変えるたびに再調整する負担を、わが社のトラフィック規模が相殺するほど大きくなったか。
三つの問いすべてに「イエス」が出たとき、STEPQuantは「一枚のGPUに顧客を何人載せられるか」の天井を引き上げてくれる。新規顧客を受け入れるたびにGPUを増やしていた選択の一部が、圧縮設定に吸収される余地が生まれる。ただしこれは設定一行で終わる話ではない。後で説明する調整とカーネルの作業が一緒についてくる。
実験の核心となる問いはひとつだ。重みは固定したまま状態の量子化だけを変えると、品質はどれだけ損なわれるか。すべての設計がこの問いをきれいに切り分けて測れるように組まれている。評価はQwenとKimiをNVIDIA A800 4枚の上のSGLangで動かし、基準線はFP32状態、比較対象は均一量子化のINT4/6/8だ。タスクを長文生成7種と短文生成6種に分けたのは、それぞれ長い出力での誤差累積と、短い出力での損傷を別々に試すためだ。短文生成タスクも実際に生成された答えで採点したが、STEPQuantが狙う状況が、モデルが一文字ずつ自ら生み出す実際のサービングだからだ。重みをBF16と4ビットAWQの二設定で動かしたのは、状態圧縮が重み圧縮と併用される場合にも成り立つかを確認するためで、調整にはWikiText-2を使った(32区間、各2048トークン)。
オフラインでモデルを動かす前に一度決めておくのは、二軸スケールではなく、ビット配分・FP16ピンポイント・行影響スコアだ。二軸スケール自体は、毎デコードステップごとに更新された状態に合わせて再計算する。行スケールはその行の現在の大きさと影響スコアを併せて秤にかけ、列スケールは影響の大きい行で生じる復元誤差により重いペナルティを与える方向に合わせる。大きな値の行には広い範囲を、重要な行にはより細かい解像度を与えるわけだ。ただしこのスケールフィッティングと圧縮保存は別のCUDAストリームで動かしてデコード経路を塞がず、デコード中に状態を解いて・更新して・書き出す過程はSGLangのカーネルひとつに融合して動かす。性能向上のかなりの部分がこの融合カーネルから出るので、別のサービングスタックを使うならカーネル移植のコストをまず勘定に入れなければならない。
位置づけをどう取ったかも押さえておく価値がある。従来の主流量子化(SmoothQuant・OmniQuantなど)は、大きな値が一軸に偏ると見てその一軸だけを狙った。Mamba向けのQ-Mamba(DSQ)が最も近いが、行影響スコアをスケール選択に引き込んだことが結果を分けた。空間フィッティングだけ取り出しても4ビットで73.95%となり、DSQをそのまま持ってきた7.64%を大きく上回る。混合精度のビット配分自体は新しくないが、そこに「メモリの寿命」という時間軸を加えたことがSTEPQuantの貢献だ。同時期の研究DAMPが困難と規定した8ビット未満の領域でも、FP32に肉薄した。
残る差も明らかだ。Kimi 4ビットの劣勢があり、構造とビット予算の組み合わせによって損失が残る。評価がゲート付きDeltaルール系のハイブリッド二モデルに限られているため、他の線形アテンションの変種や純粋なSSMでも同じ構造が成り立つかは、この論文だけでは断定しにくい。調整にWikiText-2を使ったので、コードや数学のように分布の異なるドメインでピンポイント選定がどれだけ一般化するかも、さらに見守るべき点だ。圧縮した値をメモリに密に詰めて収める設計は実装を複雑にし、モデルを変えるたびに再調整の負担が残る。
ひとつおまけもある。状態を均一量子化で落とすと精度が崩れるだけでなく、出力が上限まで伸びきる過剰生成が現れる。Kimiは4ビット均一量子化でAIME平均6万3400トークン、HMMT 6万4220トークンまで吐き出し、6万5536トークンの上限にほぼ達しながらも精度はゼロに近かった。答えを見つけられず冗長に堂々巡りする崩壊だが、STEPQuantはこの落とし穴を回避する。
理論上は少し削られます。ただしQwen基準でFP16として残す割合がヘッドの1.39%にすぎず、全体の圧縮率に与える影響はごくわずかです。その少ない割合を守り抜く対価として精度が大きく上がるので、損益で見れば残すほうが得です。
品質をほとんど譲れないなら6ビットが安全です。両モデルともFP32との差が小数点第二位にとどまります。圧縮をさらに押し進めなければならない状況なら4ビットも均一INT8より優れますが、特にKimi 4ビットは約3ポイントの損失を覚悟する必要があります。モデル・タスクごとに小標本でまず測ってから決めるのがよいでしょう。
状態プールのボトルネックは文脈の長さではなく同時リクエスト数から来ます。メモ帳のサイズ自体は文脈が長かろうと短かろうと固定なので、短い会話でも同時接続が多ければ状態プールが膨らみます。逆に接続が閑散としていれば、文脈が長くてもこの技術の優先度は低くなります。
代替関係ではありません。KVキャッシュの量子化はトークン数に比例して育つソフトマックスアテンションのキャッシュを狙い、STEPQuantはサイズが固定された循環状態を狙います。圧縮する対象そのものが異なるので、ハイブリッドモデルであれば両手法が狙うメモリ領域は互いに重なりません。