その KV キャッシュベンチマークは「hi hi hi」になっていませんか

標準の KV キャッシュベンチマークは「hi hi hi」という反復テキストを使い、圧縮と転送を実際のワークロードより大幅によく見せてしまいます。

Khawaja Shams headshot Khawaja Shams
KV キャッシュのベンチマークで合成データと現実的なデータのトークン多様性を比較する図

KV キャッシュのオフロードシステムを導入する前に、SLA に十分な余裕を持って収まる性能があるかベンチマークします。優れた圧縮率と低コストの転送が確認できれば、簡単に効果を得られそうに思えます。

しかし標準的な KV キャッシュベンチマークの入力には、問題があります。

LMCache には、KV キャッシュのオフロード性能を測る長文書ベンチマークが付属します。コーパスファイルなしで実行すると、次のように文書を生成します。

warmup_prompts = [
  str(i) + " " + " ".join(["hi"] * args.document_length)
  for i in range(args.num_documents)
]

10,000トークンの文書は、少し拍子抜けする内容になります。

0 hi hi hi hi hi hi hi hi hi hi hi hi hi hi hi …

確かに求めていた10Kトークンですが、現実の10Kトークンのワークロードを表してはいません。

KV キャッシュシステムの動作は、トークン数だけでは決まりません。圧縮率、活性化パターン、転送サイズ、キャッシュの動作は、入力の性質に左右されます。同じ長さの2つの文書が、まったく異なるワークロードになることもあります。

残念ながら、現在の KV キャッシュのエコシステムでは、実際に使われるワークロードとかけ離れた合成入力でベンチマークされることが多くあります。

実態を代表しないベンチマーク

初期設定のベンチマーク文書には、数値の識別子と、何千回も繰り返される「hi」が含まれます。

Transformer は、繰り返されるトークンに同じ活性化を生成するわけではありません。位置エンコーディング、アテンションによる混合、残差接続によって、各位置は異なります。しかし LLM にとって、異なることと多様であることは同じではありません。単一トークンの繰り返しは、多様な文章よりはるかに規則的な活性化パターンを作ります。

変化のないワークロードでは、圧縮率が上がり、転送サイズが小さくなり、キャッシュの動作も予測しやすくなります。ベンチマークは何かを測っていますが、現実的な本番ワークロードは測っていません。

「hi hi hi」で KV キャッシュのオフロードを測るのは、SELECT 1 でデータベースをベンチマークするようなものです。速い数値は返ってきても、実際のワークロードについてはあまりわかりません。

違いはすぐに現れる

私たちは Qwen3-8B-FP8 を使い、初期設定のベンチマーク文書と現実的な医療文書を比較しました。どちらも約10,000トークンです。合成文書のユニークトークンは2つで、トークン多様性は0.02%でした。医療文書では1,329、つまり13.3%でした。トークン数は同じでも、それ以外はすべて異なります。

トークンの多様性は活性化パターンに影響します。活性化パターンはテンソル値の分布に影響し、その分布は圧縮率と転送サイズに影響します。極端に反復的な入力のベンチマークは、現実的な文章による結果と大きく乖離する可能性があります。

圧縮の動作も異なる

この問題に初めて気づいたのは、Valkey をバックエンドとする KV キャッシュコネクターを作っていたときです。LMCache のチュートリアルに従い、ダミーの重みを使うと、圧縮率は非常に良好でした。しかし、学習済みの実際の重みを持つ Qwen3-8B-FP8 に切り替えると、結果は一変しました。

実際のモデルの重みが生成するテンソル値は、エントロピーの高い浮動小数点データに近い性質を持ちます。汎用圧縮にも効果はありますが、ダミーの重みで見えるほど大きくはありません。反復的な入力は、圧縮しやすい規則的な活性化パターンを作り、ベンチマーク結果を実態以上によく見せてしまいます。

より現実的なコーパスを作成

実態を代表する入力で KV キャッシュがどう動くか確認するため、医療・法律分野の長文書30件からなるコーパスを作りました。実際のシステムが処理する文書の構造、書式、語彙、変動性に近づけることが狙いです。

医療文書と法律文書のテキスト例

トークン多様性の平均は、医療文書で14.2%、法律文書で9.4%でした。どちらも、0.02%の合成ベースラインより数百倍多様です。

コーパスは Qwen3-8B-FP8 で生成した300,000トークンを含みます。コーパスと生成スクリプトはオープンソースで公開しています。

実際のワークロードを測る

トークン数を満たすのは簡単ですが、得られる情報は最も少ないかもしれません。システムが扱う文章の多様性、構造、語彙を合わせることで、圧縮率と転送サイズが信頼できる値になります。

まず入力です。キャッシュコネクター、圧縮方式、ストレージバックエンドを順位付けする前に、実際のトラフィックに似た入力で実行してください。「hi hi hi」で比較しても、誰も使わないワークロードで順位を付けているだけです。

次に KV キャッシュのオフロードシステムを評価するときは、「ベンチマーク文書は、自分が実際に動かすワークロードを代表しているか」と確認してください。

あわせて読みたい