Speculative Decoding LLM Çıkarım Optimizasyonu GPU vLLM Yapay Zeka

Speculative Decoding Nedir? LLM Çıkarımını Hızlandırma Tekniği

person Yapay Zeka Uzmanı
list_altİçindekilerexpand_more
  1. 01Otomatik Regresyon ve Yavaşlık Problemi
  2. 02Speculative Decoding Nasıl Çalışır?
  3. 03Drafter (Taslak) Modeli
  4. 04Verifier (Doğrulayıcı) Modeli
  5. 05Token Kabul ve Reddetme Mekanizması
  6. 06Neden Bu Kadar Hızlı?
  7. 07Hangi Modeller Speculative Decoding Kullanıyor?
  8. 08Token Kabul Oranı (Acceptance Rate)
  9. 09Speculative Decoding’in Sınırları
  10. 10Medusa, SpecInfer ve Diğer Yaklaşımlar
  11. 11Geliştirici Perspektifinden Speculative Decoding
  12. 12HuggingFace Transformers
  13. 13vLLM’de Speculative Decoding
  14. 14Hangi Durumlarda Kullanmamak Gerekir?

Speculative Decoding: drafter ve verifier modellerinin birlikte çalıştığı LLM çıkarım mimarisi

Bir ChatGPT ya da Claude konuşmasında uzun bir yanıt beklerken, metnin tek tek ekrana geldiğini fark etmişsinizdir. Bu yavaşlık tesadüf değil; büyük dil modellerinin temel yapısından kaynaklanıyor. Speculative decoding, bu kısıtı aşmak için geliştirilen ve üretim ortamlarında 2x ile 3,5x arasında hız artışı vaat eden bir çıkarım tekniğidir.

Teknik ilk olarak 2023’te Google DeepMind’ın “Accelerating Large Language Model Decoding with Speculative Sampling” makalesiyle geniş bir kitleye duyuruldu. Aynı dönemde birbirinden bağımsız ekipler benzer fikre vardı. Bugün OpenAI, Google ve Anthropic bu tekniği production sistemlerinde çalıştırıyor.

Otomatik Regresyon ve Yavaşlık Problemi

Bir LLM her yanıt ürettiğinde aynı döngüyü izler: mevcut bağlamı al, bir sonraki tokeni hesapla, üretilen tokeni bağlama ekle, tekrar hesapla. Bu süreç otomatik regresyon (autoregressive decoding) olarak adlandırılır. Her token, kendinden önceki diziye koşullu olarak üretilmek zorundadır; paralel üretim mümkün değildir.

Token nedir, nasıl hesaplanır konusuna aşina iseniz şunu bilirsiniz: 1000 kelimelik bir yanıt genellikle 1300-1500 token demektir. Her token için modelin tüm parametrelerini, yani milyarlarca ağırlığı, GPU belleğinden okumak gerekir.

Burada gerçek darboğaz hesaplama değil, bellek bant genişliğidir (memory bandwidth bottleneck). Modern GPU’lar yüksek paralel hesaplama kapasitesine sahiptir, ama ardışık token üretiminde bu kapasite tam kullanılamaz. Bir A100 GPU saniyede yaklaşık 2 terabayt veri okuyabilir; 70B parametreli bir modeli her token adımında bellekten yüklemek bu bant genişliğinin büyük bölümünü tüketir, ama tensor core’lar yalnızca küçük bir süre aktif kalır. Hesaplama donanımının büyük kısmı veri transferini bekler.

Bunu pratik bir kurala indirgeyebilirsiniz: daha büyük model, daha yavaş token/sn. Kullanıcı bekleme süresi parametre sayısıyla yaklaşık doğrusal büyür.

Speculative Decoding Nasıl Çalışır?

Speculative decoding bu kısıtı iki aşamalı bir stratejiyle aşar: önce küçük ve hızlı bir model birkaç taslak token üretir, ardından büyük model bu tokenlerin tamamını tek bir paralel geçişte doğrular. Şaşırtıcı olan şu: bu paralel doğrulama matematiksel olarak standart üretimle özdeş sonuç verir.

Technical diagram showing speculative decoding architecture: small draft model generating 5 candidate tokens (shown as light blue boxes with token symbols), large verifier model receiving all tokens in parallel (shown as larger dark blue neural network), accept/reject decision arrows, clean white background, minimalist technical illustration style, purple and blue color palette

Drafter (Taslak) Modeli

Drafter, asıl büyük modelin çok daha küçük bir versiyonudur. Aynı tokenizer’ı paylaşır, aynı kelime dağarcığıyla çalışır; parametre sayısı ise genellikle 10-50 kat daha azdır.

Örnek kombinasyonlar:

  • Verifier: Llama 3.1 70B → Drafter: Llama 3.2 3B
  • Verifier: Claude Sonnet → Drafter: Claude Haiku
  • Verifier: Gemini Pro → Drafter: Gemini Flash

Drafter, büyük modelin üretmesi olası k tokeni (genellikle 4-7) sırayla üretir. Bu adım hızlıdır çünkü drafter’ın parametreleri GPU belleğine çok daha hızlı yüklenebilir.

Küçük dil modelleri rehberimizde hangi modellerin drafter adayı olabileceğini inceleyebilirsiniz.

Verifier (Doğrulayıcı) Modeli

Drafter’ın ürettiği k token hazırlandıktan sonra asıl büyük model devreye girer. Ama çalışma biçimi standart token üretiminden farklıdır: büyük model k tokeni tek tek sırayla değil, hepsini paralel olarak değerlendirir.

Bu tek bir forward pass demektir. Büyük modelin k+1 pozisyon için logit hesaplaması, aynı modelin k kez sırayla çalıştırılmasından çok daha kısa sürede tamamlanır. Bellek bant genişliği tek seferde etkin biçimde kullanılır.

Token Kabul ve Reddetme Mekanizması

Her token için verifier, drafter’ın seçimini olasılıksal bir kriter üzerinden değerlendirir.

Drafter’ın seçtiği token büyük modelin olasılık dağılımıyla uyumluysa kabul edilir. Büyük model farklı bir token tercih ediyorsa drafter’ın önerisi reddedilir ve büyük modelin kendi seçimi alınır. Reddedilen noktadan sonraki tüm taslak tokenlar atılır; yeni bir drafter turu başlar.

Mekanizmanın kritik özelliği şu: speculative decoding ile standart autoregressive decoding tamamen aynı çıktı dağılımını üretir. Kalite kaybı yoktur. Drafter yanlış tahminler yapabilir, ama büyük modelin doğrulama adımı çıktının bütünlüğünü garantiler. Bu matematiksel eşdeğerlik, tekniğin production’da güvenle kullanılmasını mümkün kılar.

Neden Bu Kadar Hızlı?

Modern infographic comparing LLM inference speed: left side shows autoregressive decoding with tokens appearing one by one sequentially (slow, red indicator), right side shows speculative decoding with batch token verification (fast, green indicator, 2.5x speedup badge), dark navy background, clean data visualization style

Hız kazanımını somutlaştırmak için iki senaryoyu karşılaştıralım. Diyelim ki yanıt 20 token içeriyor.

Standart autoregressive decoding: 20 ayrı forward pass, her biri tüm modeli bellekten yükler. Toplam maliyet 20 tam model geçişi.

Speculative decoding (k=5): 4 drafter turu (5’er token) artı 4 büyük model doğrulama geçişi. Her doğrulama geçişi 5 tokeni paralel işler. Toplam 4 x (küçük drafter maliyeti + tek büyük model geçişi).

Kazanım, büyük modelin bellek bant genişliğinin paralel token doğrulamada çok daha verimli kullanılmasından gelir. Gerçek hız artışı doğrulama oranına göre değişir; ama tipik koşullarda kod üretiminde 2,5x ile 3,5x, teknik metinde 2x ile 3x, yaratıcı metinde 1,5x ile 2x görülür.

Google DeepMind’ın orijinal makalesinde Chinchilla 70B için XSum benchmark’ta 2x-3x kazanım raporlandı. Anthropic, Claude’un bazı konfigürasyonlarında Haiku’yu Sonnet için drafter olarak kullandığını kamuya açıkladı.

Quantization ve diğer optimizasyon teknikleri ile speculative decoding birbirini tamamlar: quantize edilmiş bir drafter daha az bellek kullanırken hızlı taslak üretebilir.

Hangi Modeller Speculative Decoding Kullanıyor?

Production ortamında kullanım yaygın, ama çoğu şirket teknik ayrıntıları açıklamıyor.

Google DeepMind (Gemini): Google mühendisleri speculative decoding üzerine kapsamlı yayınlar çıkardı. Gemini 1.5 Flash’ın Gemini 1.5 Pro için drafter olarak çalıştığı kamuya duyuruldu.

Anthropic (Claude): Haiku’nun Sonnet ve Opus için drafter olarak kullanıldığı Anthropic’in kendi teknik belgelerinde belirtiliyor. Latency-optimized modlarda tekniğin aktif olduğu ifade ediliyor.

Meta (Llama): Açık kaynak Llama ekosistemi için speculative decoding uygulamaları HuggingFace Transformers ve vLLM üzerinden erişilebilir. Meta, resmi Llama çıkarım araçlarında tekniği belgeledi.

OpenAI (GPT-4 Turbo): Doğrudan bir açıklama yok, ama GPT-4 Turbo’nun eski GPT-4’e kıyasla belirgin latency düşüşü, benzer bir tekniğin kullanıldığını düşündürüyor.

Token Kabul Oranı (Acceptance Rate)

Speculative decoding’in gerçek hız kazanımını belirleyen en kritik değişken token kabul oranıdır. Bu oran, drafter’ın önerdiği tokenlerin kaçının büyük model tarafından onaylandığını gösterir.

Görev TürüTipik Kabul OranıBeklenen Hız Kazanımı
Python kod üretimi%75-852,5x - 3,5x
Teknik açıklama%65-752x - 3x
Matematik / mantık%70-802x - 3x
Yaratıcı yazarlık%50-601,5x - 2x
Çok dilli metin%55-701,5x - 2,5x

Neden görev türüne göre bu kadar farklı? Kod ve teknik metinlerde olası devamlar belirli kalıplara uyar; küçük drafter büyük modelin ne yazacağını yüksek doğrulukla tahmin edebilir. Yaratıcı yazarlıkta ise devamlar çok daha geniş bir uzaya dağılmış olduğundan drafter sık yanılır.

Drafter-verifier uyumunu ölçmenin pratik bir yolu: küçük bir test seti üzerinde her iki modeli de çalıştırın ve token seçimlerinin örtüşme oranını hesaplayın. %60’ın altı, büyük ihtimalle yanlış drafter seçildiğine işaret eder.

Speculative Decoding’in Sınırları

Her durumda kazanım vaat etmeyen bir teknik. Bilinmesi gereken kısıtlar:

İki modeli aynı anda bellekte tutmak gerekiyor. 70B verifier artı 7B drafter kombinasyonu yaklaşık 160 GB VRAM gerektirir; production ortamlarında bu ek donanım maliyeti anlamına gelir.

Mimari uyumluluk zorunlu. Drafter ve verifier aynı tokenizer’ı kullanmak zorundadır. Farklı ailelerden (örneğin Mistral drafter, Llama verifier) oluşan kombinasyonlar teknik açıdan mümkün, ama verimlilikleri düşer.

Yüksek trafikte avantaj azalır. Tek kullanıcı için yanıt üretirken speculative decoding ciddi kazanım verir; ama yüzlerce paralel istek işlenirken GPU’nun paralel kapasitesi zaten dolu olduğundan kazanım erir. Büyük batch yükü altında çalışan sistemlerde fark pratikte azalır.

Yüksek çeşitlilik gerektiren görevlerde sınırlı. Beyin fırtınası veya açık uçlu yaratıcı yazım gibi işlerde drafter’ın düşük kabul oranı, speculative decoding’i standart autoregressive decoding’den daha yavaş bile yapabilir.

Yüksek temperature’da etkisi düşer. Sampling sırasında yüksek rastgelelik kullanıldığında drafter’ın doğru tahmin yapma olasılığı önemli ölçüde azalır.

Medusa, SpecInfer ve Diğer Yaklaşımlar

Standart speculative decoding’in ötesinde, aynı fikri farklı biçimlerde uygulayan çeşitli araştırmalar var.

Medusa: Stanford ve Cornell araştırmacıları tarafından geliştirilen bu yaklaşımda ayrı bir drafter modeli yok. Büyük modelin üstüne birden fazla ek “kafa” (head) ekleniyor; her kafa bir sonraki tokendan farklı mesafedeki tokenleri tahmin ediyor. Tek model yüklemesi yeterli olduğundan bellek açısından çok daha verimli.

SpecInfer: Ağaç tabanlı spekülasyon uygular. Drafter yalnızca tek bir token dizisi değil, birden fazla aday dizi üretir; büyük model bu ağacı tek geçişte değerlendirir. Kabul oranı düşük görevlerde standart yaklaşımdan daha iyi sonuç verebilir.

EAGLE (Efficient Augmented Generative LLM for Efficiency): Drafter’ı büyük modelin gizli durum vektörlerini (hidden states) girdi olarak alacak şekilde eğitir. Drafter büyük modelin iç temsillerine erişebildiğinden daha doğru tahminler üretir; bu da kabul oranını belirgin biçimde artırır.

Self-Speculative Decoding: Ayrı drafter modeli gerektirmeyen bir varyant. Büyük modelin alt katmanları erken çıkış (early exit) yaparak taslak token üretir; üst katmanlar doğrulama yapar. Tek model yüklemesiyle speculative decoding avantajı elde etmek mümkün.

Knowledge distillation tekniğiyle özel drafter modelleri oluşturmak da yaygın bir yaklaşım: büyük modelden damıtılan küçük model, genel amaçlı modellerden daha yüksek kabul oranı verebilir.

Geliştirici Perspektifinden Speculative Decoding

Peki pratikte nasıl kullanılır?

HuggingFace Transformers

transformers kütüphanesi generate() fonksiyonuna speculative decoding desteği ekledi. Minimum kod değişikliğiyle etkinleştirilebilir:

from transformers import AutoModelForCausalLM, AutoTokenizer

# Büyük model (verifier)
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.1-8B-Instruct",
    device_map="auto",
    torch_dtype="auto"
)

# Küçük drafter modeli
assistant_model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.2-1B-Instruct",
    device_map="auto",
    torch_dtype="auto"
)

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B-Instruct")

inputs = tokenizer("Transformer mimarisi nedir?", return_tensors="pt").to("cuda")

# Speculative decoding aktif
outputs = model.generate(
    **inputs,
    assistant_model=assistant_model,
    max_new_tokens=200,
    do_sample=False
)

print(tokenizer.decode(outputs[0], skip_special_tokens=True))

assistant_model parametresi drafter’ı belirtir. Transformers bu ikili düzeni otomatik yönetir: drafter token önerir, verifier doğrular.

vLLM’de Speculative Decoding

vLLM, production ortamları için speculative decoding desteği sunar. Komut satırından etkinleştirmek için:

python -m vllm.entrypoints.openai.api_server \
    --model meta-llama/Llama-3.1-70B-Instruct \
    --speculative-model meta-llama/Llama-3.2-3B-Instruct \
    --num-speculative-tokens 5 \
    --speculative-draft-tensor-parallel-size 1

--num-speculative-tokens parametresi drafter’ın her turda kaç token önerdiğini belirler. Yüksek kabul oranı beklenen görevlerde bu değeri 6-8’e çıkarmak daha fazla hız getirebilir; düşük kabul oranında 3-4’te bırakmak daha verimli kalır.

Drafter seçimi throughput üzerinde doğrudan etkilidir. Verifier’ın aynı ailesinden küçük bir model çoğunlukla en yüksek kabul oranını verir; farklı ailelerden seçilen drafter’lar daha düşük uyum gösterir.

Hangi Durumlarda Kullanmamak Gerekir?

Speculative decoding her senaryoya uygun değil.

Düşük trafik veya yetersiz VRAM varsa, iki modeli aynı anda bellekte tutma maliyeti karşılanamaz; teknik pratik değil. Yoğun batch yükünde, yüzlerce eş zamanlı istek işlenirken GPU paralel kapasitesi zaten dolu; ek karmaşıklık verim artışı getirmiyor. Çok kısa yanıtlarda (50 token altı) drafter-verifier koordinasyonunun başlangıç maliyeti kazanımı sıfıra indirebilir. Yüksek temperature veya sampling kullanımında drafter’ın doğru tahmin yapma olasılığı düşer; kabul oranı %50’nin altına indiğinde tekniği kapatmak daha mantıklı.

Teknik bir modelin içini değiştirmiyor, yalnızca modeli nasıl çalıştırdığınızı değiştiriyor. Verifier’ın çıktı kalitesi korunuyor: son kullanıcı açısından sonuç aynı, yanıt çok daha hızlı geliyor. Büyük modeli küçük modelle tahmin yaptırıp büyük modelle doğrulamak, bir tür hesaplamayı öne alma stratejisi. GPU’nun boşta kalan paralel kapasitesini token doğrulamaya yönlendirmek, mevcut donanımdan çok daha fazla verim çıkarmanın en temiz yollarından biridir.

auto_stories İlgili Makaleler