Skip to content

PagedAttention: vLLM'in Bellek Sihri

Self-hosted production'da kim aynı GPU'da 100 kullanıcıya hizmet veriyor? vLLM. Nasıl? PagedAttention. Bu derste OS sanal belleğinden esinlenen bu zarif tekniği sezgisel öğreneceksin.

Şükrü Yusuf KAYA
14 min read
Advanced

PagedAttention: KV Cache'i Sayfalara Böl

Problem: Bir GPU'da 100 farklı kullanıcının LLM sorgusunu aynı anda işliyorsun. Her birinin farklı uzunlukta context'i var. Naif yaklaşımla her kullanıcıya maksimum context kadar bellek ayırırsın → %80 boş bellek!
Çözüm: PagedAttention — OS'in sanal belleğinden ilham alarak KV cache'i sabit boyutlu bloklara böl, kullandığın kadarını ata.
Bu, vLLM'nin (open-source production inference engine) temel inovasyonu, 2023'te yayınlandı (Berkeley papersinden). Şimdi neredeyse her serious inference engine kullanıyor.

Naif Yaklaşımın Sorunu#

Düşün: 5 kullanıcı, hepsi farklı sorgu uzunluğu:
User A: 10K context User B: 50K context User C: 5K context User D: 100K context (yarısı output) User E: 30K context
Naif yaklaşım: her birine 128K bellek ayır (max context). Toplam: 5 × 128K = 640K bellek. Gerçek kullanım: 195K. %70 israf.

PagedAttention: Sayfalara Böl#

OS'in sanal belleği bu sorunu nasıl çözer? Pages (sayfalar): 4KB sabit boyutlu bloklar. Programa "sürekli bir bellek varmış gibi" görünür ama altta paçalar.
PagedAttention aynı şeyi KV cache için yapar:
  • Sabit blok boyutu: ör. 16 token / blok
  • Block table: her sequence için "hangi bloklar bana ait" listesi
  • Bellek havuzu: tüm bloklar tek bir pool'dan, kim kullanırsa onun

Block Table Örneği#

User A block table: [1, 3] → tokenlar 0-15: blok 1; tokenlar 16-31: blok 3 User B block table: [2, 4, 5] → tokenlar 0-15: blok 2; 16-31: 4; 32-47: 5
Block table küçük — sadece blok numaraları. Attention compute sırasında "hangi bloğu okumalıyım" lookup.
İlham Kaynağı: OS Sanal Belleği
OS analojisi: Block table = page table. Block = physical page. Sequence = process. KV cache pool = physical memory.

PagedAttention'ın Pratik Etkisi#

vLLM benchmark'ları (orijinal makaleden):
MetrikNaifPagedAttentionİyileşme
Bellek kullanımı%30 verimli%96 verimli3.2×
Throughput (req/s)1002402.4×
Latency p952.5s1.1s2.3×
Aynı GPU, 2.4× daha fazla kullanıcı. Self-hosted inference yapan şirketler için yaşam-ölüm farkı.

Prefix Sharing ile Etkileşim#

PagedAttention'ın bonus özelliği: aynı prefix kullanan iki kullanıcı aynı blokları paylaşabilir.
Örnek: 100 kullanıcı aynı şirket dokümanını sorguluyor (50K context). Her birinin block table'ı aynı 3125 bloku işaret eder (50K / 16 = 3125 blok). Bellek tasarrufu:
  • Naif: 100 × 50K = 5M token KV
  • PagedAttention + shared prefix: 50K + 100 × user-query-tokens = 50K + ~10K = 60K
  • Tasarruf: 83× az bellek
Bonus: Shared Prefix
İşte multi-tenant caching'in vLLM versiyonu. Aynı prefix'i kullanan tüm kullanıcılar otomatik olarak aynı bloklara işaret eder, hiç ekstra mantık yazmana gerek yok.

Block Boyutu Seçimi#

Tradeoff: küçük blok = az fragmentation ama lookup overhead'i fazla; büyük blok = az lookup ama fragmentation.
Block SizeFragmentationLookup CostDefault
1 token~0%Çok yüksek
8 token~%2Orta⚠️
16 token~%4DüşükvLLM default
64 token~%15Çok düşük⚠️ short context için
Modül 10'da vLLM kurarken bu parametreyi göreceğiz.

SGLang RadixAttention: Bir Adım İleri#

vLLM PagedAttention sequence başına block table tutar. SGLang radix tree kullanarak prefix sharing'i daha agresif yapar:
Üç kullanıcı "Merhaba dünya" prefix'ini paylaşıyor → tek blok grubu, üç çocuk. Token-by-token automatic prefix matching.
vLLM şimdi de prefix-caching özelliği eklemiş; ikisi giderek yakınsıyor.

✓ Pekiştir#

Bir Sonraki Derste#

Bu modülün son dersi — modül bitirme sınavı. KV cache'in matematiksel ve pratik tüm yönleri masaya geliyor. 10 soru, %70 ile geç, Modül 3'e devam et.

Frequently Asked Questions

Hayır. vLLM, SGLang, TensorRT-LLM içinde hazır var. Sadece kavramı anlaman yeterli — production'da hazır kütüphane kullan.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

Related Content