LLM Sunumunda Yeni Bir Çağ: SGLang ve RadixAttention ile KV Cache Yeniden Kullanımı

LLM Sunumunda Yeni Bir Çağ: SGLang ve RadixAttention ile KV Cache Yeniden Kullanımı
audio-thumbnail
LLM Sunumunda Yeni Bir Çağ: SGLang ve RadixAttention ile KV Cache Yeniden Kullanımı
0:00
/0

LLM Sunumunda Yeni Bir Çağ: SGLang ve RadixAttention ile KV Cache Yeniden Kullanımı

Büyük Dil Modellerinin (LLM) hayatımıza girmesiyle birlikte, bu devasa modelleri üretim ortamında (production) hızlı, ölçeklenebilir ve düşük maliyetle sunmak (LLM serving) en kritik mühendislik problemlerinden biri haline geldi. Yapay zeka uygulamalarında kullanıcı deneyimini doğrudan etkileyen iki temel unsur vardır: İlk Token Zamanı (TTFT - Time To First Token) ve Saniye Başına Oluşturulan Token Sayısı (Throughput).

LLM sunumundaki en büyük performans darboğazlarından biri, girdi metinlerinin (prompt) işlenmesi sırasında yapılan tekrarlı hesaplamalardır. İşte tam bu noktada SGLang ve onun kalbinde yatan RadixAttention mimarisi sahneye çıkıyor.

Bu yazıda, KV Cache (Key-Value Önbelleği) mantığını, geleneksel yöntemlerin sınırlarını, SGLang'in RadixAttention tekniğiyle bu sorunu nasıl çözdüğünü ve vLLM gibi popüler mimarilere kıyasla sunduğu avantajları detaylıca inceleyeceğiz.


LLM Sunumunda Darboğaz: KV Cache Nedir ve Neden Önemlidir?

Bir LLM bir metin üretirken iki temel aşamadan geçer: 1. Prefill (Ön Yükleme) Aşaması: Gelen girdinin (prompt) tamamı paralelleştirilerek tek seferde işlenir ve modelin ilk token'ı üretmesi sağlanır. 2. Decode (Çözümleme) Aşaması: Model, her adımda sadece bir sonraki token'ı üretir (oto-regresif yapı).

Metin üretimi sırasında model, daha önce üretilmiş tüm token'ların Key ve Value matrislerine ihtiyaç duyar. Eğer bu matrisler her yeni token için sıfırdan hesaplansaydı, hesaplama karmaşıklığı üssel olarak artar ve sistem kilitlenirdi. KV Cache, geçmiş token'ların Key ve Value matrislerini GPU belleğinde saklayarak her adımda tekrar hesaplanmalarını önler.

Ancak klasik sistemlerde sorun şudur: Kullanıcı yeni bir istek gönderdiğinde veya aynı sistem istemi (system prompt) tekrar kullanıldığında, KV Cache genellikle sıfırlanır ve aynı ön ekler (prefixes) tekrar tekrar hesaplanır.


Geleneksel Yaklaşımların Sınırları ve Önbellek İsrafı

Geleneksel LLM sunum altyapılarında KV önbelleği genellikle istek bazlı (request-level) yönetilir. Bir istek bittiğinde ona ait KV Cache GPU belleğinden silinir.

Oysa gerçek dünya kullanım senaryolarına baktığımızda muazzam bir veri tekrarı görürüz:

  • Çoklu Tur Sohbetler (Multi-turn Chatbot): Her yeni mesajda, sohbet geçmişinin tamamı tekrar modele gönderilir.
  • LLM Ajanları (Agents): Ajanlar her adımda aynı sistem talimatlarını ve araç (tool) tanımlarını tekrar işler.
  • Az Örnekli Öğrenme (Few-Shot Prompting): Modelin öğrenmesi için verilen örnekler her istekte sabittir.

Bu senaryolarda aynı istem öneklerinin defalarca sıfırdan hesaplanması, hem GPU kaynaklarının israf edilmesine hem de ilk yanıt süresinin (TTFT) ciddi şekilde uzamasına neden olur.


SGLang ve RadixAttention Mimarisi Sahneye Çıkıyor

SGLang (Structured Generation Language), LLM'lerle yapılan karmaşık etkileşimleri ve yapılı veri üretimini hızlandırmak amacıyla geliştirilmiş yeni nesil bir sunum çerçevesidir. SGLang'i rakiplerinden ayıran en büyük yenilik ise RadixAttention adı verilen önbellek yönetim mekanizmasıdır.

Radix Tree (Radix Ağacı) Nedir ve Nasıl Çalışır?

RadixAttention, KV önbelleğini geleneksel düz diziler yerine bir Radix Ağacı (Radix Tree) veri yapısında saklar.

Radix Tree (Kök Ağacı): Metin veya token dizilerinde ortak ön ekleri (common prefixes) tek bir dalda birleştirerek belleği optimize eden bir ağaç yapısıdır.

SGLang, GPU belleğindeki KV Cache bloklarını bir Radix Ağacı ile eşleştirir:

  1. Düğümler (Nodes): Token dizilerini ve bu dizilere karşılık gelen GPU'daki KV Cache bellek adreslerini temsil eder.
  2. Kenarlar (Edges): Token dizilerinin alt kümelerini tutar.
       [Kök (Root)]
         /      \
    (System P1)  (System P2)
       /            \
  (User Q1)      (User Q2)
     /
(Model Ans1)

Bir kullanıcı sisteme yeni bir istek gönderdiğinde, SGLang bu isteğin token'larını Radix Ağacı'nda arar. Ağaçtaki En Uzun Ortak Önek (Longest Common Prefix) bulunur.

  • Eğer Eşleşme Varsa: Model, ön ekin bulunduğu noktaya kadar olan KV Cache'i doğrudan GPU belleğinden yeniden kullanır. Prefill aşaması sıfır hesaplama maliyetiyle geçilir!
  • Eğer Eşleşme Yoksa veya Kısmi İse: Sadece eksik kalan token'lar hesaplanır ve ağaca yeni bir dal olarak eklenir.

SGLang vs. vLLM: RadixAttention, PagedAttention'a Karşı

LLM sunum dünyasının standart belirleyicilerinden biri olan vLLM, bellek fragmantasyonunu çözen PagedAttention mimarisiyle devrim yaratmıştı. Ancak iki mimari arasında yaklaşım farkı bulunmaktadır:

Özellik vLLM (PagedAttention) SGLang (RadixAttention)
Temel Odak Sanal bellek yönetimi ve fragmantasyon önleme Otomatik ve dinamik KV Cache yeniden kullanımı
Veri Yapısı Sayfa Tablosu (Page Table) Radix Ağacı (Radix Tree)
Önbellek Ömrü İstek tamamlandığında genellikle silinir (Varsayılan) İstekler arasında otomatik olarak ağaçta saklanır
Çoklu Tur Sohbetler Önbellek paylaşımı sınırlıdır veya ekstra yapılandırma gerektirir Doğal olarak maksimum KV önbellek paylaşımı sağlar
Ajan Mimarileri Tekrarlayan sistem istemlerinde yüksek Prefill maliyeti Neredeyse anında (0 ms'ye yakın) Prefill süresi

Not: vLLM de son sürümlerinde "Automatic Prefix Caching (APC)" özelliğini tanıtmıştır ancak SGLang, bu mimariyi en başından beri çekirdek tasarımının merkezine oturtmuş ve Radix Tree altyapısıyla daha esnek ve karmaşık ağaç yapılarını destekleyecek şekilde optimize etmiştir.


Hangi Senaryolarda SGLang Fark Yaratarak Öne Geçer?

SGLang ve RadixAttention mimarisi, özellikle karmaşık ve tekrarlayan LLM iş yüklerinde performans patlaması yaratır:

1. LLM Ajanları (Agentic Workflows)

Ajanlar, kararlar almak için sürekli bir döngü içinde çalışır. Her döngüde sistem yönergeleri, geçmiş eylemler ve araç tanımları sabittir. RadixAttention sayesinde ajan her yeni adım attığında geçmişi tekrar hesaplamaz, yalnızca yeni eklenen bilgiyi işler.

2. Uzun Doküman Tabanlı Soru-Cevap (RAG Mimarileri)

50 sayfalık bir PDF dokümanını sisteme yüklediğinizi düşünün. Bu doküman üzerinden modele 10 farklı soru sorduğunuzda, klasik sistemler 50 sayfayı 10 kez baştan okur. SGLang ise dokümanın KV Cache'ini Radix Ağacı'nda tutar; ilk sorudan sonraki 9 soru anında yanıtlanmaya başlar.

3. Çoklu Tur (Multi-Turn) Sohbet Sistemleri

Kullanıcı sohbet ettikçe sohbet geçmişi büyür. SGLang, her yeni mesajda geçmiş sohbetin KV Cache'ini ağaçtan çekerek kullanır. Bu sayede sohbet uzasa bile yanıt verme başlama süresi (TTFT) sabit kalır.


Bellek Tahsisi ve LRU Tahliye (Eviction) Stratejisi

GPU belleği sınırsız değildir. Peki Radix Ağacı dolduğunda ne olur?

SGLang, ağaç yapısı üzerinde En Son Kullanılan (LRU - Least Recently Used) evrişiğine dayalı akıllı bir bellek tahliye mekanizması çalıştırır. GPU belleği dolmaya başladığında:

  1. Ağaçtaki yaprak düğümlerden (leaf nodes) başlanarak en uzun süredir kullanılmayan KV Cache blokları bellekten serbest bırakılır.
  2. Düğümün kendisi (token bilgisi) ağaçta kalmaya devam edebilir, böylece tekrar ihtiyaç duyulduğunda önbelleğin nerede eksildiği hızlıca tespit edilir.

Bu dinamik yönetim, GPU belleğinin her zaman en yüksek verimle kullanılmasını sağlar.


Sonuç: Neden SGLang ve RadixAttention'ı Düşünmelisiniz?

LLM uygulamalarını üretim ortamına taşırken maliyetleri düşürmek ve gecikmeyi (latency) en aza indirmek kritik önem taşır. SGLang, RadixAttention mimarisi sayesinde:

  • Hesaplama Maliyetlerini Düşürür: Tekrarlayan öneklerin tekrar hesaplanmasını engelleyerek GPU kaynaklarını korur.
  • Gecikmeyi (TTFT) Muazzam Ölçüde Azaltır: Kullanıcılar ilk token'ı görmek için beklemek zorunda kalmaz.
  • Ölçeklenebilirliği Artırır: Aynı GPU donanımı üzerinde daha fazla eşzamanlı (concurrent) isteğe hizmet verilmesini sağlar.

Yapay zeka sistemlerinizde ajan yapıları, RAG mimarileri veya yoğun sohbet akışları kullanıyorsanız, SGLang ve RadixAttention sunum altyapınızı bir sonraki seviyeye taşımak için biçilmiş kaftandır.


Siz LLM sunum altyapınızda hangi araçları kullanıyorsunuz? vLLM ve SGLang deneyimlerinizi yorumlarda paylaşmayı unutmayın!