LLM KV Cache Size と同時処理数

Posted on
Updated on

LLM 推論の流れ

  • 入力文字列をトークンに分割し、数値化します。
  • トークンをモデルに入力し、最初の出力トークンを生成します。 (Prefill Phase)
  • 出力トークンをモデルに入力し、次の出力トークンを生成します。この処理を繰り返します。 (Decoding Phase)
  • 出力トークンをデコードし、文字列に変換します。

KV Cache とは

KV Cacheは、LLMの推論(Decoding Phase)時に使用されるメモリ領域で、過去のトークンのキーとバリューを保存します。 これにより、モデルは過去のトークンを再計算することなく、新しいトークンを生成できます。

LLM 推論のベンチマーク指標

  • Time to First Token (TTFT): 最初のトークンが生成されるまでの時間
  • Inter Token Latency (ITL): 各トークンが生成されるまでの時間

長い入力はTTFTが長くなり、長い出力はITLの合計が長くなります。

KV Cache の枯渇

LLMへの同時リクエスト数を増やしていくと、レイテンシーがガクッと落ちるポイントがあります。 これは、KV Cacheのサイズが限界に達し、KV Cacheの再計算が発生するためです。

KV Cache サイズの試算

KVsize(bytes) = 2 × B × bytes/param × nlayers × nkv_attention_heads × dattention_heads x context_length

記号意味
2key と value で 2
Bバッチサイズ
bytes/paramKV Cache のデータ型
nlayersレイヤー数
nkv_attention_headsKV Attention Head 数
dattention_headsAttention Head サイズ
context_length入力トークン長

たとえば Qwen 2.5 32B の場合は、以下のように計算できます。

記号備考
22
B1 (とする)
bytes/param2 (16 bit)KV Cache は量子化すると精度がガクッと落ちる
nlayers64num_hidden_layers
nkv_attention_heads8num_key_value_heads
dattention_heads5120 // 40 = 128hidden_size // num_attention_heads
context_length32k (とする)モデルは 128k をサポートしているがメモリ量削減のため
合計8000MB (7.8GB)

同時処理数の試算

GPUメモリは以下の用途で使われます。

  1. モデルのパラメータのロード。モデルパラメータ数 x データ型 (Model Weight)
  2. PyTorch に無関係なオーバーヘッド。GPU型番やGPU数に依存するが、1~2GB程度。 (Non-Torch Memory)
  3. 推論実行時の途中計算結果の保存用。モデルアーキテクチャに依存する。数GB程度。 (PyTorch Acitivation Peak Memory)
  4. KV Cache。

LLM が利用可能なGPUメモリ量から 1. ~ 3. を引いて、 KV Cache サイズで割ることで、同時処理数を試算できます。

参考文献

このBlogの内容は個人の意見に基づくものであり、 所属組織団体の公式見解とは異なる場合があります点、ご了承ください。