PagedAttention
PagedAttentionがLLMのメモリ管理とKVキャッシュ効率を最適化する方法を学びます。スループットへの影響と、Ultralytics YOLO26のパフォーマンスとの比較を確認します。
PagedAttentionは、大規模言語モデル (LLMs)の推論速度とスループットを最適化するために設計された、非常に効率的なメモリ管理アルゴリズムです。従来のオペレーティングシステムにおける仮想メモリとページングの概念に着想を得たこの手法は、テキスト生成中のキー・バリューキャッシュ(一般にKVキャッシュと呼ばれます)に伴う膨大なメモリ消費に対処します。キャッシュに必要な連続したメモリブロックを、より小さく非連続な「ページ」に分割することで、PagedAttentionは内部および外部のメモリ断片化を効果的に解消します。これにより、AIサーバーは同時に大幅に多くのリクエストをバッチ処理でき、GPU使用率を最大化できます。
PagedAttentionとFlash Attentionの比較#
どちらの手法もニューラルネットワークの性能を最適化しますが、対象とするボトルネックは異なります。Flash Attentionは計算レベルの最適化であり、GPU階層全体における低速なメモリの読み書きを最小限に抑えることで、アテンション機構自体を高速化します。一方、PagedAttentionはメモリ割り当て戦略です。コンテキストウィンドウ用のメモリをどのように構成して格納するかだけに焦点を当て、大規模で無駄なメモリブロックをあらかじめ割り当てることなく、動的にスケーリングできます。
実世界での利用例#
PagedAttentionによって実現したメモリ効率は、大規模な生成モデルを本番環境にデプロイする方法を変革しました。
-
高スループットAPIサービング: GPT-4に類似したモデルを提供する本番システムでは、vLLMなどのフレームワークを介してPagedAttentionを利用しています。異なるユーザーリクエスト間でメモリブロックを共有することで、プロバイダーは同じハードウェア上で最大4倍のユーザーにサービスを提供でき、クラウドベースのAIサービスの運用コストを大幅に削減できます。
-
複雑なデコード戦略: AIモデルが一度に複数の候補応答を生成する場合(ビームサーチや並列サンプリングなど)、PagedAttentionによって、これらの並列シーケンスは同じ基盤メモリページを安全に共有できます。これにより、システムが冗長なメモリを複製するのを防ぎ、複雑な推論タスクを大幅に高速化できます。
コンピュータビジョンにおけるメモリ効率#
PagedAttentionは主に自然言語処理で利用されていますが、厳密なメモリ最適化という基盤原則は、コンピュータビジョン (CV)でも同様に重要です。ハードウェアリソースが限られたエッジデバイスにモデルをデプロイする場合、メモリの肥大化を避けることが不可欠です。Ultralytics YOLO26は、エンドツーエンドのNMS不要アーキテクチャを利用することで、重いキャッシュ管理を必要とせず、ネイティブにリアルタイム推論の効率を実現します。
オブジェクト検出パイプラインのメモリ要件とエクスポート要件をシームレスに処理したい開発者向けに、Ultralytics Platformは、最適なハードウェア実行のためにモデルをパッケージ化する自動デプロイツールを提供しています。
コード例#
PagedAttentionはサービングフレームワークの内部で動作し、標準的なアテンション関数を最適化されたCUDAカーネルに置き換えます。以下は、PyTorchで標準的なアテンションを定義する方法を示す概念例です。vLLMなどのシステムは、モデルのデプロイ時にこれを自動的にインターセプトし、ページングを使用して最適化します。
import torch
import torch.nn.functional as F
# Simulated Key, Query, and Value tensors for a standard attention block
batch_size, num_heads, sequence_length, head_dim = 1, 8, 1024, 64
query = torch.randn(batch_size, num_heads, sequence_length, head_dim)
key = torch.randn(batch_size, num_heads, sequence_length, head_dim)
value = torch.randn(batch_size, num_heads, sequence_length, head_dim)
# Standard attention computation (often replaced by PagedAttention kernels in production LLM servers)
attention_output = F.scaled_dot_product_attention(query, key, value)
print(f"Computed attention shape: {attention_output.shape}")高度なメモリ割り当て戦略を活用することで、AI業界は可能性の限界を押し広げ続け、大規模な基盤モデルを世界中で効率的にスケーリングして利用できるようにしています。









