Büyük dil modeli (LLM) çalıştırmanın gerçek faturası eğitimde değil, çıkarımda (inference) kesilir. Bir modeli bir kez eğitirsiniz; ama onu üretimde, her sorguda, aylarca GPU saati yakarak sunarsınız. Bu yüzden sorgu başına maliyeti (cost-per-query) belirleyen tek değişken, bir GPU'nun aynı anda kaç isteği — kabul edilebilir bir gecikmeyle — taşıyabildiğidir. Kwon ve arkadaşlarının PagedAttention çalışması[1], bu sayının neden olması gerekenden çok daha düşük olduğunu şaşırtıcı bir yerde buluyor: GPU belleğinin büyük bir kısmı, hesaplama yapılmadan, sırf anahtar-değer önbelleğinin (KV cache) beceriksizce yerleştirilmesi yüzünden boşa gidiyor. Çözüm, yeni bir donanım ya da daha küçük bir model değil; klasik işletim sistemi ders kitaplarından alınan, neredeyse kırk yıllık bir fikir: sanal bellek ve sayfalama (paging).
§ 01 — TL;DRÖzet
- Otoregresif LLM çıkarımında her isteğin KV önbelleği, dizi uzadıkça dinamik olarak büyür; geleneksel sistemler bunu bitişik (contiguous) bir bellek bloğu olarak önceden ayırır. Bu, iç ve dış parçalanma (fragmentation) yüzünden GPU belleğinin büyük bölümünü boşa harcar ve yığın (batch) boyutunu — dolayısıyla throughput'u — sınırlar.
- PagedAttention, her isteğin KV önbelleğini sabit boyutlu bloklara ("sayfalara") bölüp bunları bellekte bitişik olmayan fiziksel bloklara haritalar; tıpkı bir işletim sisteminin sanal belleği fiziksel sayfalara eşlemesi gibi. Sonuç: KV önbellek belleğinde sıfıra yakın israf.
- Bu sistemin üzerine kurulan vLLM, aynı gecikme seviyesinde, FasterTransformer ve Orca gibi son teknoloji sistemlere kıyasla popüler LLM'lerin throughput'unu 2-4 kat artırıyor. İyileşme; daha uzun diziler, daha büyük modeller ve daha karmaşık çözümleme algoritmalarında daha da belirginleşiyor.
- vLLM ile Triton Inference Server / TensorRT-LLM arasındaki seçim bir "hangisi daha hızlı" yarışı değil; bellek-verimli çizelgeleme (vLLM'in güçlü yanı) ile çekirdek düzeyinde derlenmiş gecikme optimizasyonu (TensorRT-LLM'in güçlü yanı) arasında, iş yükü profiline bağlı bir denge.
- 3Y için pratik sonuç: işlettiğimiz herhangi bir LLM/VLM uç noktasında, donanımı değiştirmeden yalnızca bellek yönetimini düzelterek aynı GPU rafından kat kat fazla eşzamanlı sorgu almak — yani sorgu başına maliyeti birkaç katına kadar düşürmek — mümkün.
§ 02 — ProblemKV önbelleği, GPU belleğini neden israf eder?
Otoregresif (autoregressive) bir LLM, çıktısını her seferinde tek bir token üreterek oluşturur. Verimli olabilmek için, daha önce üretilmiş her token'ın anahtar (key) ve değer (value) vektörlerini yeniden hesaplamak yerine bir önbellekte saklar; buna KV önbelleği denir. Bu önbellek, çıkarım sırasında GPU belleğinin en büyük ve en hareketli tüketicisidir: model ağırlıkları sabit boyuttayken, KV önbelleği her yeni token'la birlikte büyür.
Sorunun çekirdeği şu basit gözlemdir: bir isteğin üreteceği toplam token sayısı önceden bilinmez. Bir sohbet yanıtı 20 token da olabilir, 2.000 token da. Geleneksel sunum sistemleri bu belirsizlikle başa çıkmak için, her istek başına olası en uzun diziyi (maksimum bağlam uzunluğu) barındıracak kadar bitişik bir bellek bloğunu önceden rezerve eder. Bunun bedeli üç ayrı israf biçimidir[1]:
- İç parçalanma (internal fragmentation): Bir isteğe 2.048 token'lık yer ayrılır ama istek yalnızca 100 token üretir; rezerve edilen alanın çok büyük bir kısmı dolu olmasa da başka hiçbir istek tarafından kullanılamaz. Bu, çıkarım boyunca atıl bekleyen bellektir.
- Rezervasyon israfı (reservation waste): Henüz üretilmemiş gelecekteki token'lar için ayrılan ama o an boş duran alan. İstek daha 100. token'dayken 2.048. token için ayrılmış yer, şu anda hiçbir işe yaramaz.
- Dış parçalanma (external fragmentation): Farklı isteklerin farklı boyutlarda blok talep etmesi, bellekte serpiştirilmiş ama tek başına yeni bir isteğe yetmeyen "delikler" bırakır. Toplamda boş bellek vardır, ama bitişik olmadığı için kullanılamaz.
Bu üç etki birleştiğinde, GPU belleğinin önemli bir kısmı hesaplama yapmadan kilitli kalır. Sonuç doğrudan ekonomiktir: bellek tükendiği için sisteme aynı anda daha fazla istek alınamaz, yani yığın boyutu küçük kalır. LLM çıkarımı pahalı bir matris işlemleri yığını olduğundan ve GPU'lar ancak büyük yığınlarda doyuma ulaştığından, küçük yığın hem GPU'yu aç bırakır hem de sorgu başına maliyeti yukarı çeker.
Temel iddia: LLM sunumunda throughput'u sınırlayan birincil darboğaz çoğu zaman ham hesaplama gücü değil, KV önbelleğinin bellek yönetimidir. Belleği israf etmeyi bırakırsanız, aynı donanımla daha büyük yığınlar kurabilir ve throughput'u katlarsınız.
Bu israfı görmenin en somut yolu, KV önbelleğinin boyutunu yazmaktır. Tek bir istek için önbellek, kabaca
kadar yer kaplar; burada baştaki anahtar ve değer için, katman sayısı, dikkat başlığı (head) sayısı, başlık boyutu, o ana kadar üretilmiş token sayısı ve veri tipinin bayt cinsinden boyutudur (örn. FP16 için 2). Buradaki kritik değişken 'dir: önbellek dizi uzunluğuyla doğrusal büyür. Sistem 'in nihai değerini bilmediği için en kötü durumu rezerve eder; işte iç parçalanmanın matematiksel kaynağı tam da bu "bilinmeyen için en büyük 'i ayırma" zorunluluğudur.
§ 03 — Yöntemİşletim sisteminden ödünç alınan bir fikir: sayfalama
PagedAttention'ın çözümü, problemi bir bellek tahsisi problemi olarak görüp işletim sistemlerinin onlarca yıl önce çözdüğü reçeteyi LLM çıkarımına taşımaktır. Modern bir işletim sistemi, bir sürecin sanal adres uzayını bitişik bir fiziksel bellek bloğuna haritalamaz; bunun yerine belleği sabit boyutlu sayfalara (page) böler, sayfaları fiziksel bellekte herhangi bir yere yerleştirir ve aralarındaki ilişkiyi bir sayfa tablosu (page table) ile tutar. Böylece ne iç parçalanma (sayfa küçük ve sabit) ne de dış parçalanma (her boş sayfa eşit ve yeniden kullanılabilir) ciddi bir sorun olur.
PagedAttention bu fikri birebir LLM'e uyarlar[1]:
1) KV önbelleğini bloklara böl. Her isteğin KV önbelleği, sabit sayıda token'ı tutan KV bloklarına ("sayfalara") parçalanır. Bir blok, örneğin 16 token'ın anahtar ve değer vektörlerini tutar. Önemli olan, bu blokların bellekte bitişik olmak zorunda olmamasıdır.
2) Mantıksal blokları fiziksel bloklara haritalayan bir blok tablosu tut. Her istek için, o isteğin mantıksal KV bloklarını GPU belleğindeki fiziksel bloklara eşleyen bir blok tablosu (block table) tutulur — işletim sistemindeki sayfa tablosunun tam karşılığı. Dikkat (attention) hesabı yapılırken çekirdek, bu tabloyu izleyerek dağınık fiziksel bloklardan ilgili anahtar/değer vektörlerini toplar.
3) Talep üzerine tahsis (on-demand allocation). İstek yeni bir token ürettikçe ve mevcut bloğu dolduğunda, sisteme yalnızca o an yeni bir fiziksel blok atanır. En kötü durum için önden rezervasyon yapılmaz; bellek dizi büyüdükçe büyür, küçüldükçe (istek bittiğinde) serbest bırakılır. İç parçalanma en fazla bir bloğun (örn. 16 token) altında kalır; dış parçalanma ise tüm bloklar eşit boyutlu olduğu için tamamen ortadan kalkar.
Bu dolaylılık katmanının ikinci ve daha az fark edilen kazancı, esnek paylaşımdır. Bloklar fiziksel olarak bitişik olmak zorunda olmadığı ve bir blok tablosu üzerinden referanslandığı için, aynı fiziksel blok birden fazla istek tarafından paylaşılabilir. Bunun iki doğrudan kullanımı vardır: (a) paralel örnekleme (parallel sampling) veya ışın arama (beam search) gibi bir istemden birden çok çıktı üretilen senaryolarda ortak önek (prefix) blokları tek kopya tutulur; (b) çok sayıda isteğin aynı sistem istemini (system prompt) paylaştığı kurumsal senaryolarda, bu ortak önek bir kez saklanıp tüm isteklerce işaret edilir. vLLM bu paylaşımı, işletim sistemlerindeki yazarken kopyala (copy-on-write) mekanizmasına benzer biçimde yönetir: bir blok paylaşıldığı sürece tek kopya, biri onu değiştirmek istediğinde kopyalanır.[1]
vLLM, bu PagedAttention çekirdeğinin üzerine kurulan uçtan uca sunum sistemidir. Bellekte açtığı bu alanı doğrudan throughput'a çevirir: israf ortadan kalkınca, aynı GPU belleğine çok daha fazla istek sığar, yığın büyür, GPU doyuma ulaşır.
Dikkatin kendisinin matematiği değişmez; yalnızca anahtar ve değer vektörlerinin nereden okunduğu değişir. Standart ölçekli nokta-çarpım dikkati (scaled dot-product attention)
biçiminde tanımlıdır; burada , , sırasıyla sorgu, anahtar ve değer matrisleridir ve anahtar boyutudur. PagedAttention'ın yaptığı, bu formülü değiştirmek değil, ve 'yi bellekte bitişik tek bir tampon yerine blok tablosu üzerinden dağınık fiziksel bloklardan toplayacak şekilde uyarlanmış bir GPU çekirdeği yazmaktır. Yani matematik aynıdır; yenilik, onu parçalanmasız bir bellek düzeniyle hesaplayabilen çekirdektir. (Yukarıdaki iki formül, mekanizmayı açıklamak için verilen standart arka plandır; makaleden birebir alıntı değildir.)
§ 04 — BulgularAynı gecikmede 2-4 kat throughput
Çalışmanın manşet sonucu nettir ve dikkatle ifade edilmelidir: vLLM, aynı gecikme seviyesinde, son teknoloji sistemler FasterTransformer ve Orca'ya kıyasla popüler LLM'lerin throughput'unu 2-4 kat artırır.[1] Buradaki "aynı gecikme seviyesinde" niteleyicisi atlanamaz; kazanç, gecikmeyi feda ederek değil, eşit gecikme bütçesi altında elde edilir. Mekanizma da bunu açıklar: bellek israfını ortadan kaldırmak yığını büyütür, büyük yığın GPU'yu doyurur, doyumlu GPU birim zamanda daha çok token üretir — ve bunların hiçbiri tek bir isteğin yanıt süresini uzatmaz.
| Ölçüt / boyut | Geleneksel sistemler (FasterTransformer, Orca) | vLLM (PagedAttention) | Sonuç |
|---|---|---|---|
| Aynı gecikmede throughput | 1× (referans) | 2-4× | +%100 ile +%300 |
| KV önbellek belleği israfı | yüksek (iç + dış parçalanma) | sıfıra yakın | parçalanma çözülür |
| Etkin yığın (batch) boyutu | bellekle sınırlı, küçük | belirgin biçimde büyük | GPU doyuma yakın |
| Uzun dizilerde kazanç | — | daha da belirgin | profil-bağımlı |
| Büyük modellerde kazanç | — | daha da belirgin | profil-bağımlı |
| Karmaşık çözümlemede (beam/parallel) kazanç | — | daha da belirgin | paylaşım sayesinde |
Tablodaki son üç satır, makalenin açıkça vurguladığı bir inceliği yansıtır: iyileşme tek bir sabit sayı değildir, iş yükü profiliyle birlikte büyür. Daha uzun diziler, daha büyük modeller ve daha karmaşık çözümleme algoritmaları (ışın arama, paralel örnekleme) söz konusu olduğunda kazanç daha da belirginleşir.[1] Bunun nedeni sezgiseldir: dizi ne kadar uzunsa KV önbelleği o kadar büyük, dolayısıyla parçalanma israfı o kadar pahalıdır — yani PagedAttention'ın geri kazandığı alan da o kadar değerlidir. Karmaşık çözümlemede ise birden çok çıktı dalının önek bloklarını paylaşabilmesi, geleneksel sistemlerin yinelediği belleği tamamen ortadan kaldırır.
Burada bir doğrulama notu kritiktir. Yukarıdaki sayı — "2-4 kat" — makalenin özetinde birebir bu aralıkla, FasterTransformer ve Orca temelleriyle ve "aynı gecikme seviyesinde" niteleyicisiyle birlikte verilir. Özet sayfası; değerlendirilen modellerin tam listesini, model bazında ayrı kıyas sayılarını, kesin bellek-israf yüzdelerini veya kullanılan donanımı belirtmez. Bu yazıda da o tür uydurma sayılara girilmemiştir; tek güvenli nicel iddia, eşit gecikmede 2-4 kat throughput kazancı ve "sıfıra yakın israf" ifadesidir. (Dikkat: ifade "sıfır israf" değil, "sıfıra yakın israf"tır; aradaki fark, talep-üzerine tahsiste son blokta kalan, en fazla bir blok boyutundaki küçük artıktır.)
§ 05 — SınırlarvLLM vs. Triton / TensorRT-LLM: maliyet-gecikme dengesi
PagedAttention bir bellek yönetimi zaferidir; ama "vLLM mi yoksa Triton/TensorRT-LLM mi" sorusu bundan daha geniştir ve tek boyutlu değildir. İkisini aynı eksende karşılaştırmak yanıltıcı olur; çünkü güçlü yanları farklı yerlerdedir.
- vLLM'in ekseni: bellek-verimli çizelgeleme ve throughput. vLLM'in temel kaldıracı, PagedAttention sayesinde kurabildiği büyük, sürekli yığınlardır (continuous batching). Çok sayıda eşzamanlı isteği yüksek toplam throughput'la, yani düşük sorgu başına maliyetle sunmakta güçlüdür. Açık kaynak olması, hızlı model desteği ve kurulum sadeliği de operasyonel sürtünmeyi düşürür.
- TensorRT-LLM / Triton'un ekseni: çekirdek düzeyinde derlenmiş gecikme. NVIDIA'nın TensorRT-LLM'i, modeli belirli bir GPU mimarisine derler; çekirdek birleştirme (kernel fusion), düşük-bit nicemleme (quantization) ve donanıma özgü optimizasyonlarla tek-istek gecikmesini son damlasına kadar sıkar. Triton Inference Server ise bunu üretim-seviyesi bir sunum katmanıyla (çoklu model, dinamik yığınlama, donanım izleme) sarmalar. Sıkı tek-istek gecikme SLA'sı olan, derleme maliyetini bir kez ödeyip uzun süre sabit bir model çalıştıran senaryolarda avantajlıdır.
Aradaki seçim bir değiş-tokuştur (trade-off), mutlak bir üstünlük değil. Sorgu başına maliyeti en aza indirmek (yüksek eşzamanlılık, değişken/uzun diziler, sık model değişimi) önceliğse, vLLM'in bellek-verimli throughput modeli doğal adaydır. Mutlak en düşük tek-istek gecikmesi ve maksimum donanım sıkıştırması (sabit model, derleme maliyetinin amorti edilebildiği uzun ömür) önceliğse, TensorRT-LLM/Triton yolu daha fazla kazandırabilir. Pratikte iki dünya yakınsamaktadır: sürekli yığınlama ve sayfalı KV önbelleği bugün büyük sunum motorlarında yaygın birer özellik hâline gelmiştir.
PagedAttention'ın kendisinin de bedelleri vardır ve dürüstçe sayılmalıdır:
- Çekirdek karmaşıklığı ve dolaylılık maliyeti. Dikkat hesabını bitişik bir tampon yerine blok tablosu üzerinden dağınık bloklardan toplamak, özel olarak yazılmış bir GPU çekirdeği gerektirir. Bu dolaylılık, blok başına küçük bir ek yük (overhead) getirir; PagedAttention'ın net kazancı, bu ek yükün geri kazanılan bellekten çok daha küçük olmasına dayanır.
- Blok boyutu bir ayar düğmesidir. Çok küçük bloklar dolaylılık ek yükünü ve blok tablosu boyutunu artırır; çok büyük bloklar iç parçalanmayı geri getirir (son blokta kalan artık büyür). Optimal blok boyutu model ve iş yüküne bağlıdır.
- Kazanç iş yüküne duyarlıdır. Makalenin de söylediği gibi, fayda uzun diziler, büyük modeller ve karmaşık çözümlemede en yüksektir. Çok kısa, tek-çıktılı, hafif yüklü bir uç noktada parçalanma israfı zaten küçüktür; orada PagedAttention'ın getirisi mütevazılaşır.
- Özet ötesi iddialar ayrı kaynak ister. vLLM bugün geniş biçimde benimsenmiş bir açık kaynak projesidir; ancak bu ekosistem/benimsenme bağlamı 2023 makalesinin kapsamı dışındadır ve ona atfedilmemelidir. Bu yazıda nicel temel, yalnızca makalenin doğrulanan iddialarıdır.
PagedAttention, mühendislikte en sevdiğimiz türden bir fikir: yeni donanım ya da daha büyük bütçe değil, doğru soyutlamayı doğru yerden — işletim sistemi ders kitabından — ödünç almak. KV önbellek parçalanmasını çözüp aynı gecikmede 2-4 kat throughput çıkarması, doğrudan sorgu başına maliyetin 2-4 kata kadar düşmesi demektir; bu, bir LLM özelliğini üretime almanın ekonomik olarak mümkün olup olmadığını belirleyen türden bir kaldıraçtır. vLLM ile TensorRT-LLM/Triton arasındaki seçimi bir "hız yarışı" gibi sunmuyoruz: bizim için karar kuralı net — yüksek eşzamanlılık ve değişken/uzun dizilerde sorgu başına maliyeti kovalıyorsak vLLM'in bellek-verimli throughput'u; sabit bir modelde mutlak en düşük tek-istek gecikmesini kovalıyorsak TensorRT-LLM'in derlenmiş çekirdekleri. İki yaklaşım da artık sayfalı KV önbelleğine yakınsadığından, asıl alınması gereken ders tekniğin markası değil, belleği israf etmeyi bırakmanın tek başına bir maliyet optimizasyonu olduğudur.
§ 06 — 3Y için anlamıFootfall analitiğinde sorgu başına maliyet
3Y'nin perakende ve footfall analitiği platformunda LLM/VLM'in en olası rolü bir konuşma ve yorum katmanıdır: "geçen hafta sonu AVM girişindeki yaya trafiği bir önceki haftaya göre nasıl değişti, hangi mağaza önünde yoğunlaştı?" gibi doğal-dil sorgularını analitik çağrılarına çevirmek ve dönüşü insan-okur bir özet olarak sunmak; ya da bir VLM ucunda kamera akışından sahne açıklaması üretmek. Bu iş yükünün birkaç belirgin özelliği, PagedAttention'ın en güçlü olduğu bölgeyle birebir örtüşür:
- Uzun, bağlam-yüklü istemler (büyük KV önbelleği): sorgu çoğunlukla şema tanımı, birkaç örnek (few-shot), iş kuralları ve son kullanıcı sorusuyla birlikte gelir. İstem ne kadar uzunsa KV önbelleği o kadar büyük, parçalanma israfı o kadar pahalı — yani PagedAttention'ın geri kazandığı alan o kadar değerlidir.
- Paylaşılan sistem istemi (ortak önek): operatör arayüzündeki tüm sorgular büyük olasılıkla aynı sistem istemini, aynı şema açıklamasını ve aynı iş kurallarını paylaşır. vLLM'in blok paylaşımı (copy-on-write), bu ortak öneki her istek için yinelemek yerine tek kopya tutarak belleği daha da boşaltır; bu, doğrudan bizim çok-kullanıcılı senaryomuza hitap eder.
- Yüksek eşzamanlılık, sıkı maliyet: birden çok operatör/mağaza aynı anda sorgu attığında, GPU rafından alınabilen eşzamanlı sorgu sayısı doğrudan altyapı faturasını belirler. Sorgu başına maliyeti 2-4 kata kadar düşürebilecek bir bellek yönetimi, ROI hesabını doğrudan değiştirir.
Pratik çıkarımlarımız:
- Önce bellek yönetimi, sonra donanım. LLM/VLM ucunu ölçeklerken ilk hamle yeni GPU eklemek değil, sunum motorunun sayfalı KV önbelleği (PagedAttention/vLLM ya da onu benimsemiş bir motor) kullandığından emin olmak olmalı. Çoğu zaman tek başına bu, aynı raftan kat kat fazla eşzamanlı sorgu çıkarır.
- Doğru yığın için doğru motor. Yüksek eşzamanlılık ve değişken/uzun dizilerde sorgu başına maliyeti hedefliyorsak vLLM; sabit bir modelde mutlak en düşük tek-istek gecikmesi (örn. canlı bir VLM uyarı yolunda) hedefliyorsak TensorRT-LLM/Triton yolunu değerlendirmeliyiz. Karar, "hangisi hızlı" değil "hangi maliyet eksenini optimize ediyoruz" sorusuyla verilmeli.
- Paylaşılan istemi bir varlık olarak görmek. Ortak sistem istemini ve şema bağlamını tüm sorgularda sabit tutmak yalnızca kalite için değil, bellek ekonomisi için de avantajdır: blok paylaşımı bu sabitliği doğrudan kapasiteye çevirir. Mimariyi bu paylaşımı en üst düzeye çıkaracak şekilde tasarlamak, throughput'u bedavaya artırır.
- Kazancı kendi profilimizde ölçmek. "2-4 kat" iş yüküne bağlı bir banttır; gerçek değer, kendi istem-uzunluğu dağılımımız ve eşzamanlılık seviyemizde ölçülmelidir. Kapasite planını "saniyede token" yerine "SLA içinde tamamlanan eşzamanlı sorgu başına maliyet" üzerinden kurmak, gerçek ekonomiyle hizalanır.
Sonuç olarak PagedAttention, bizim için doğrudan bir ürün reçetesinden çok bir öncelik kuralı sunuyor: bir LLM özelliğinin üretim maliyetini düşürmenin ilk ve en ucuz yolu, daha güçlü bir GPU satın almak değil, sahip olduğumuz GPU'nun belleğini israf etmeyi bırakmaktır. İşletim sistemlerinin kırk yıl önce öğrendiği bu dersi LLM sunumuna taşımak, sorgu başına maliyeti — donanımı hiç değiştirmeden — birkaç katına kadar iyileştirebilir.
§ 07 — ReferanslarKaynakça
- W. Kwon, Z. Li, S. Zhuang, Y. Sheng, L. Zheng, C. H. Yu, J. E. Gonzalez, H. Zhang, I. Stoica, "Efficient Memory Management for Large Language Model Serving with PagedAttention", arXiv:2309.06180, SOSP 2023. https://arxiv.org/abs/2309.06180
- A. Vaswani, N. Shazeer, N. Parmar, et al., "Attention Is All You Need", NeurIPS 2017.
- R. Pope, S. Douglas, A. Chowdhery, et al., "Efficiently Scaling Transformer Inference", MLSys 2023.
- G.-I. Yu, J. S. Jeong, G.-W. Kim, et al., "Orca: A Distributed Serving System for Transformer-Based Generative Models", OSDI 2022.
- Y. Zhong, S. Liu, et al., "DistServe: Disaggregating Prefill and Decoding for Goodput-optimized Large Language Model Serving", OSDI 2024.
- A. Agrawal, N. Kedia, et al., "Taming Throughput-Latency Tradeoff in LLM Inference with Sarathi-Serve", OSDI 2024.