vLLM FP8 KV-Cache と Attention 量子化のアップデート
vLLM FP8 KV-Cache と Attention 量子化のアップデート
vLLM は、長文脳 LLM サービスにおけるメモリ使用量とインタートークン遅延 (ITL) を大幅に削減するため、FP8 KV-cache と Attention 量子化に関する重要な修正と最適化を実装しました。--kv-cache-dtype fp8 フラグを利用することで、ユーザーは KV-cache ストレージを半分にし、FP8 (e4m3) で Attention 演算を実行できます。これは特にメモリバウンドなデコードワークロードに効果的です。
技術的改善とバグ修正
vLLM の最近のアップデートは、Hopper と Blackwell GPU でのストレステスト中に特定された重大な精度とパフォーマンスの後退に対処しています。
精度のための二段階累積
Hopper GPU での深刻な精度後退(128k ニードルインヘイスタックタスクが BF16 で 91% から FP8 で 13% に低下)を解決するため、vLLM は二段階累積戦略を導入しました。このアプローチでは、部分的に累積された結果を実際の FP32 レジスタに書き込み、収縮次元が 100k 以上になる Tensor Core の精度損失を軽減します。この修正により精度は 89% に回復しました。
ハイブリッド Attention とレイヤー スキップ
ハイブリッド Attention アーキテクチャ(例えば GPT-OSS)のモデルでは、一部のレイヤーが小さなウィンドウ(例えば 128 トークン)を使用するスライドウィンドウ Attention を採用しています。この場合、FP8 量子化のオーバーヘッドがメモリの利点を上回ることがよくあります。vLLM には now --kv-cache-dtype-skip-layers sliding_window フラグが含まれており、これらの特定のレイヤーを BF16 のままに保つことでデコード速度を向上させます。
カーネルと融合の最適化
- Per-Head Scales: Flash Attention 3 (FA3) カーネルは、FP8 量子化のためのスケールの配列をサポートするようになりました。各スケールは 1 つの KV-head に対応します。
- Query Quantization Fusion: Query 量子化は、
torch.compileが融合できる torch 実装に移動され、固定の per-token オーバーヘッドがなくなりました。 - Tiling 設定:
head_dim = 64とhead_dim = 128のプリフィル tiling は、二段階累積によるレジスタスピルを減らすように調整されました。
パフォーマンス ベンチマーク
KV-cache を BF16 から FP8 に量子化すると、Attention ステップごとのメモリトラフィックが半分になり、これが直接 ITL スロープ(入力長に伴う遅延増加率)を減少させます。
シングルリクエスト遅延
H100 GPU で Llama-3.1-8B を使用した場合、ITL スロープは 4.37e-05 から 2.37e-05 ms/token に低下しました(54% の削減)。これにより、デコードのブレークイーブンポイントは約 7k トークンまで下がりました。gpt-oss-20b については、skip-SW バリアントを使用することで ITL スロープが BF16 ベースラインの 71% に減少しました。
負荷下のスループット
高負荷シナリオ(並行度 8、約 20k 入力トークン)では、FP8 によって以下の向上が得られました:
- Llama-3.1-8B: 出力スループットが 14.9% 向上し、総ランタイムが 13.0% 高速化。
- gpt-oss-20b: 出力スループットが 4.8% 向上(
skip-SWバリアント使用)。
アーキテクチャ固有の結果
- Blackwell (B200): FlashInfer バックエンドを使用すると、Llama-3.1-8B の ITL スロープは BF16 の 54% に減少し、ブレークイーブンポイントは約 4k トークンとなります。Blackwell では、Hopper で見つかった精度問題が存在しないため、二段階累積は必要ありません。
- Hopper (H100) 大きな Head 次元:
head_dim = 256のモデル(例えば gemma-4-E2B)では、プリフィル性能(TTFT)が BF16 より遅くなります(長いコンテキストでは約 1.6x 遅い)。これは二段階累積によるレジスタ圧力の増加によるものです。
精度と検証
評価は、パフォーマンスの下限を確立するために未校正の量子化スケール(scale = 1.0)を使用して行われました。
推論と長文脳タスク
- 推論: Qwen3-30B-A3B-Thinking-2507 と Qwen3.5-27B において、FP8 KV-cache と Attention 量子化による精度損失は無視できる程度で、通常は 0 から 2 ポイントの間です。
- 長文脳 (MRCR): Llama-3.3-70B-Instruct はベースラインの AUC@128k の 97-98% を回復しました。Qwen3.5-27B は集約された AUC@1M メトリックを完全に回復し、極端な長さのコンテキストでも安定していることを示しています。
キャリブレーションを使用するタイミング
未校正の FP8 はしばしば十分ですが、一部のモデルでは体系的な劣化が見られます。例えば、Kimi-K2.5 は FlashMLA バックエンドを使用すると、シーケンス長にわたって精度が一貫して下移する傾向があります。そのような場合、vLLM は llm-compressor を介したスケールキャリブレーションまたは per-attention-head 量子化スケールをサポートします。
使用推奨事項のまとめ
| シナリオ | 推奨事項 |
|---|---|
| デコードヘビー、メモリバウンドなワークロード | --kv-cache-dtype fp8 を使用 |
| ハイブリッド Attention モデル | --kv-cache-dtype fp8 --kv-cache-dtype-skip-layers sliding_window を使用 |
| 短いコンテキスト (< 7k トークン) | 小さな FP8 オーバーヘッドを避けるために BF16 を継続使用 |
head_dim = 256 でプリフィル優先 |
BF16 を継続使用または二段階累積を無効化(精度検証が必要) |
| 持続的な精度損失 (< 95%) | llm-compressor を使用してキャリブレーションを適用 |