Büyük dil modellerini üretime taşıdığınızda ilk sürpriz gecikme süresidir. Yüksek parametreli bir modelden uzun bir yanıt ürettiriyorsunuz; tokenler tek tek, saniyede 20-30 adet geliyor. GPU’da ağırlıklar yüklü, işlem kapasitesi teoride çok daha yüksek. Peki nerede takılıyor?
Sorun otoregresif yapıda. Transformer tabanlı bir dil modeli her yeni token için tüm ağı baştan sona çalıştırır. 70 milyar parametreli bir modelde bu, GPU belleğinden her adımda gigabaytlarca veri okumak anlamına gelir. GPU çekirdeği kapasitesi ile bellek bant genişliği arasında ciddi bir uçurum vardır; matris çarpmaları her token adımında tam kapasitede çalışmaz, GPU çoğunlukla veriyi bekler. Buna “memory-bandwidth-bound” darboğaz denir. Hesaplama değil, bellek okuma kısıtlayıcıdır.
Bir A100 GPU’nun teorik FP16 kapasitesi 312 TFLOP/s, bellek bant genişliği yaklaşık 2 TB/s’dir. Otoregresif üretimde bir token başına kullanılan işlem kapasitesi bu rakamın çok altında kalır. Bellek okuma verimsizliği gecikmenin asıl kaynağıdır; hesaplama kapasitesini artırmak ya da model boyutunu küçültmek bu sorunu doğrudan çözmez. Speculative Decoding bu boşluktan yararlanmanın bir yoludur.
Speculative Decoding nedir?
Temel fikir 2023’te DeepMind ve Google Research tarafından birbirinden bağımsız yayınlandı. Her iki grup da benzer matematiksel çerçeveye ulaştı; teknik bir süre sonra vLLM ve TensorRT-LLM gibi üretim motorlarının standart bir parçası haline geldi.
İki model birlikte çalışır: küçük bir “draft” (taslak) model ve büyük bir “target” (hedef) model. Draft model 7 milyar parametreli, hızlı ama daha sınırlı bir modeldir. Target model 70 milyar parametreli, asıl kaliteli çıktıyı üreten modeldir.
Akış şöyle:
- Draft model K adet token üretir. Spekülatif tahmindir; doğru da olabilir yanlış da.
- Target model bu K tokeni ve önceki bağlamı tek bir forward pass ile değerlendirir.
- Target modelin olasılık dağılımları draft modelin tahminleriyle karşılaştırılır.
- Her token kabul ya da reddedilir. Kabul edilenler çıktıya eklenir; ilk reddedilen noktada target modelin dağılımından yeni bir token örneklenir, süreç başa döner.
Önemli olan şu: target modelin kalitesi çıktıda korunur. Süreç deterministik bir reddetme örneklemesi kullandığından çıktı dağılımı, yalnızca target modeli çalıştırmakla matematiksel olarak eşdeğerdir. Hız kazanırsınız, kaliteden ödün vermezsiniz.
Çalışma mekanizması
Acceptance rate (kabul oranı) bu sistemde her şeyi belirler. Draft model target modelin üreteceklerini ne kadar doğru tahmin ederse, tek bir target forward pass’te o kadar çok token onaylanır.
Matematik şöyle işler: x_t tokeni için draft modelin olasılığı q(x_t), target modelin olasılığı p(x_t) olsun. p(x_t) ≥ q(x_t) ise token her koşulda kabul edilir. Aksi halde p(x_t)/q(x_t) olasılıkla kabul edilir, kalan olasılıkla reddedilir.
Bu ret mekanizması target modelin olasılık dağılımını korur. Draft modelin çıktıları tamamen rastgele bile olsa doğrulama adımı geçerli çıktı üretir; sonuç her zaman target modelin dağılımından örneklenmiş bir dizidir. Draft model kalitesi yalnızca hızı etkiler, çıktının doğruluğunu değil.
Pratikte bu matematiksel garanti çok önemlidir. Bir LLM deployment’ında “hızlandırma tekniği kullandım, ama çıktı kalitesi değişti mi?” sorusu her zaman geçerlidir. Speculative decoding’de bu sorunun cevabı nettir: değişmedi. Kabul/ret örneklemesi tam anlamıyla lossless bir hız optimizasyonudur.
Draft model → [t1, t2, t3, t4] (spekülatif)
Target model → [t1✓, t2✓, t3✗, yeni_t3] (tek forward pass)
Sonuç: [t1, t2, yeni_t3] (2 kabul + 1 yeniden üretim)

Neden hızlanma oluşur?
Her otoregresif adım küçük bir matris çarpmasıdır; GPU büyük bölümünü boşa geçirir. Target modelin tek bir forward pass’te K+1 pozisyonu paralel hesaplaması ise GPU’yu çok daha verimli kullanır.
K+1 pozisyonu aynı anda hesaplamak, K+1 ayrı forward pass’ten daha az bellek bant genişliği tüketir. Ağırlıklar bellekten bir kez okunur, birden fazla token için işlenir.
Bu fark en çok batch size 1, yani tek istek işlendiğinde belirginleşir. Batch size arttığında klasik otoregresif üretim GPU’yu zaten daha iyi doldurur; speculative decoding’in katkısı görece azalır. Bu nedenle teknik özellikle interactive chatbot ve API servislerinde, yani tek kullanıcıya düşük gecikme ile yanıt verilmesi gereken senaryolarda değer üretir.
Pratikte bu, draft model iyi tahmin ürettiğinde 2x-4x gecikme azalması anlamına gelir. Kod tamamlama gibi tahmin edilebilir görevlerde acceptance rate yüksek çıkar, kazanım da büyür.
Acceptance rate birkaç faktöre bağlıdır: iki modelin dağılım yakınlığı, giriş türü ve K değerinin seçimi. Geniş ölçekli üretim ortamlarında doğal dil üretimi için %70-85 kabul oranı elde edildiği bildirilmektedir; bu da teorik 3-4x hızlanmayı gerçekçi kılar.
Draft model seçimi kritik bir tasarım kararıdır. İdeal draft model, target modelle aynı aileden gelen, küçük ama makul doğrulukta bir modeldir. 350M parametreli çok küçük bir model hızlı çalışır ama kabul oranı düşer; çok büyük bir model kendi başına kaynak tüketir. Çoğu üretim kurulumunda target modelin 5-10 katı küçük bir draft model iyi bir denge noktası oluşturur.
Varyantlar ve alternatif yaklaşımlar
Standart speculative decoding üzerine birkaç farklı yöntem geliştirildi.
Medusa: Tek bir büyük model üzerine birden fazla ek “decoding kafası” (head) ekler. Bu kafalar bir sonraki, iki sonraki, üç sonraki token için paralel tahminler üretir. Ayrı bir draft model gerekmez; tek model bellekte tutulur ve birden fazla head ile spekülatif üretim yapılır. Kafalar hedef modelin iç temsillerini kullandığından yüksek acceptance rate elde etmek görece kolaydır. Medusa-2, kafalara öğretilebilir katmanlar ekleyerek kabul oranını artırmayı hedefler; ayrı draft modelin getirdiği bellek baskısını da ortadan kaldırır.
Lookahead Decoding: Jacobi iteration kavramından esinlenir. Paralel n-gram zincirleri oluşturulur; örtüşen kısımlar doğrulama aşamasında kullanılır. Ek model gerekmez; tek model içinde çoklu yol keşfi yapılır. Sözlük büyüklüğü ve içerik türüne göre değişken performans gösterir.
Self-Speculative Decoding: Modelin erken katmanları tahmin üretir, son katmanlar doğrular. Tek model iki rol üstlenir; ek model yüklenmez, bellek ayak izi değişmez.
SpecInfer ve REST: Ağaç yapısı kullanır. Draft model olası devam yollarının ağacını üretir; target model bu ağacı paralel tek pass ile değerlendirir. Yüksek acceptance rate potansiyeli vardır ama uygulama karmaşıklığı artar.
Bu varyantların hangisinin seçileceği büyük ölçüde operasyonel kısıtlamalara bağlıdır. İkinci bir model yükleyemiyorsanız Medusa veya Self-Speculative daha uygun olur. Mevcut bir 70B modeliniz varsa ve küçük bir Llama modelini ekleyebiliyorsanız standart speculative decoding en az operasyonel sürtüşmeyle en iyi başlangıç noktasıdır.
Üretimde kullanım: vLLM entegrasyonu
vLLM speculative decoding’i doğrudan destekler. Birkaç ek parametre yeterlidir:
vllm serve meta-llama/Llama-3.1-70B-Instruct \
--speculative-model meta-llama/Llama-3.2-1B-Instruct \
--num-speculative-tokens 5
70B model target, 1B model draft rolünü üstlenir. --num-speculative-tokens her döngüde kaç spekülatif token üretileceğini belirler. Düşük K daha az risk ama daha az kazanım; yüksek K, acceptance rate yüksek senaryolarda büyük kazanım, düşük acceptance rate senaryolarda overhead getirir.
Draft ve target modelin aynı aileden gelmesi acceptance rate için kritiktir. Llama-3.1-70B ile Llama-3.2-1B aynı tokenizer ve benzer eğitim dağılımını paylaştığından iyi bir eşleşme oluşturur. Farklı mimariden gelen bir draft model düşük kabul oranıyla net kazanım üretemeyebilir.
TensorRT-LLM ve Google Cloud AI Platform da bu optimizasyonu kendi altyapılarına ekledi. Açık kaynak ve kapalı kaynak inference motorlarının büyük bölümünde artık standart bir seçenek olarak yer alıyor.
Kazanım uzun çıktılarda daha belirgindir: yüzlerce token uzunluğundaki yanıtlarda veya döküman özetlemede kümülatif hız artışı gerçekten hissedilir. Kısa yanıtlarda overhead bazen bu avantajı ezer.
vLLM ayrıca --speculative-draft-tensor-parallel-size parametresiyle draft modelin kaç GPU’da paralel çalışacağını ayrıca yapılandırmanıza olanak tanır. Büyük kurulumlar için draft ve target modeli farklı GPU gruplarına dağıtmak da mümkündür; bu sayede throughput optimizasyonu ile gecikme azaltma ayrı ayrı ayarlanabilir.
Diğer optimizasyon teknikleriyle ilişkisi
Speculative decoding ve quantization farklı boyutlarda etkir, birbirini dışlamaz. Quantization ağırlıkların hassasiyetini düşürerek bellek kullanımını azaltır ve bazı işlemleri hızlandırır. Speculative decoding ise çıkarım döngüsünün mimarisini değiştirir. İkisi birlikte kullanılabilir: quantize edilmiş küçük bir draft model spekülatif üretimde verimli çalışır.
KV Cache ile ilişki tamamlayıcıdır. KV Cache, attention hesaplamalarını saklayarak tekrar işlemeyi önler. Speculative decoding bu altyapının üzerinde çalışır; doğrulama sırasında draft tokenlerin KV cache girişleri dikkatle yönetilmesi gerekir. vLLM gibi modern inference motorları bunu otomatik yapar.
Continuous Batching farklı bir şeyi optimize eder: birden fazla istek arasında GPU’nun boş kalmamasını hedefler. Speculative decoding ise tek bir istek içindeki token üretimini hızlandırır; ikisi aynı anda etkin olabilir.
Akıl yürüten modeller gibi uzun düşünce zinciri gerektiren sistemlerde speculative decoding işe yarar. Yüzlerce token uzunluğundaki chain-of-thought çıktılarında acceptance rate yüksek kalabilir ve kümülatif kazanım belirginleşir.
Bir noktanın altını çizmek gerekir: quantization model ağırlıklarını kalıcı olarak değiştirir, fine-tuning üzerinde belirli etkileri olabilir. Speculative decoding ise ağırlıklara hiç dokunmaz; yalnızca inference döngüsünü değiştirir. Bu açıdan deployment esnekliği sunar: mevcut bir modeli yeniden eğitmeden, ağırlık formatını değiştirmeden üretim gecikmelerini düşürmek mümkündür.
Sınırlamalar
Bazı senaryolarda speculative decoding beklenen kazanımı üretemez.
Düşük acceptance rate: Draft model sistematik olarak yanlış tahmin ediyorsa her döngüde az token kabul edilir. Her döngü hem draft hem target forward pass maliyeti taşır ama çok az token çıktıya eklenir; standart otoregresif üretimden yavaş çalışabilir.
İki model belleği: Her iki modelin GPU belleğine yüklenmesi gerekir. 70B modeli güçlükle tutan bir kurulumda 7B’lik draft için yer bulmak güçleşir. 1B-3B arası küçük bir draft model yaygın çözümdür; quantize draft modeller bellek baskısını daha da azaltır.
Tokenizer uyumluluğu: Draft ve target modelin aynı tokenizer’ı kullanması şarttır. Olasılık dağılımlarını karşılaştırmak için aynı kelime dağarcığı gerekir; farklı tokenizer mimarisine sahip iki model pratikte birleştirilemez.
Kısa yanıtlar: Speculative decoding uzun çıktılarda en fazla kazanımı üretir. Birkaç kelimelik yanıtlarda döngünün maliyeti net hız artışını ortadan kaldırabilir.
Üretime almadan önce hedef görev üzerinde acceptance rate ölçümü yapmak yerinde olur. Bunun için vLLM’in sunduğu --disable-log-stats kapalıyken üretilen loglar kullanılabilir; token başına kabul/ret oranı doğrudan izlenebilir. Kabul oranı %50’nin altında kalıyorsa knowledge distillation gibi alternatifler daha verimli bir başlangıç noktası olabilir.
Üretim altyapısındaki yeri
Speculative decoding LLM gecikme sorununa somut bir yanıt sunar: çıktı kalitesini, ağırlıklarını ya da fine-tuning’ini değiştirmeden, çıkarım mimarisindeki paralellikten kazanım elde eder. 2024 sonrasında vLLM ve TensorRT-LLM’de olgunlaştı, birkaç parametre ile etkinleştirilebilir hale geldi.
LLM’in nasıl çalıştığını ve vLLM’in inference motoru mimarisini anlayanlar için speculative decoding, bu parçaların üzerine oturan bir hız katmanıdır. Kaliteden taviz vermeden gecikme sürelerini kısaltmak isteyenler için somut bir seçenektir.