Küçük bir model büyük olanı nasıl hızlandırır?
Spekülatif kod çözmede küçük bir model birkaç kelime ilerisini tahmin ederken büyük model hepsini tek seferde doğrular. Canlı şekiller metnin neden değişmediğini, ne kadar hızlanabileceğini ve ne zaman işe yaramadığını gösterir.
Bir sohbet botuna soru sorun ve yanıtın gelişini izleyin: birkaç kelimelik adımlarla geliyor. Bir dil modeli metni her seferinde bir token yazar: şimdiye kadar yazılanların hepsini okur, sıradaki tokeni seçer ve yeniden başlar. (Token, metnin küçük bir parçasıdır; çoğu zaman bir kelime ya da kelimenin bir kısmı. Şekillerde “kelime” diyoruz.)
Bu adımların her biri modelin içinden tam bir geçiştir ve büyük bir model için bir geçiş çok sayıda sayıya dokunmak demektir. Spekülatif kod çözme (speculative decoding), büyük modelin yazdığı şeyin olasılıklarını değiştirmeden tek geçişte birkaç token yazmasını sağlayan bir yöntemdir. 2022’de Leviathan, Kalman ve Matias tarafından, 2023’te de yakın bir biçimde Chen ve arkadaşları tarafından tanımlandı.
Şekillerin içindeki her şey bir oyuncaktır: olasılıklar uydurmadır, süreler uydurmadır ve hiçbir makinede ölçülmemiştir. Yöntem ve formüller makalelerinkidir; makalelerden gelen her sayı onların sayısı olarak belirtilir.
Bu yazının sonunda şunları bileceksiniz:
- bir token yazmanın neden tam bir geçişe mal olduğunu, var olan birkaç tokeni doğrulamanın ise yaklaşık bir geçişe mal olduğunu;
- küçük bir modelin tahminlerinin tek seferde nasıl doğrulandığını ve metnin neden aynı olasılıkları koruduğunu;
- hızlanmayı nasıl tahmin edeceğinizi ve ne zaman küçük, hatta negatif olduğunu.
Her seferinde bir token
#Büyük bir model çok uzun bir sayı listesidir:
Şekildeki her kutu bir geçiştir: mavi şerit taşınan ağırlıklar, taramalı şerit hesaplamadır ve kutu ikisinden uzun olan kadar sürer. “Beş token yaz”a, sonra “Beşini birden doğrula”ya basın.
Bu şekil JavaScript gerektirir. Beş tokeni ele almanın iki yolunu örnek sürelerle karşılaştırır. Beş token yazmak, büyük modelin art arda beş geçişini alır. Zaten yazılmış beş tokeni doğrulamak ise tek geçiş alır ve tek bir yazmadan yalnızca biraz uzun sürer; çünkü bir geçişin uzun kısmı (modelin ağırlıklarının bellekten taşınması), geçişin neyi içerdiğinden bağımsız olarak aynıdır. Makine, her biri beş token doğrulayan çok sayıda başka isteğe de hizmet verirken hesaplama büyür ve yaklaşık on iki başka istekten sonra beşini doğrulamak beşini yazmak kadar maliyetli olur.
Beş token yazmak için beş geçiş, aynı beş tokeni doğrulamak için bir geçiş. Beş tokeni okumak yaklaşık bir geçişe mal olur, yazmak ise beş geçiş alır. Bir model, zaten var olan tokenleri okuyabilir; çünkü bir metnin her konumunda sıradaki token için olasılıklarını aynı anda hesaplar. İsteminizi okuma biçimi de budur.
Şimdi kaydırıcıyı sürükleyin. Her diğer istek, geçişi de beş token doğrulayan başka bir kullanıcıdır; bu yüzden hesaplama büyür: birkaçıyla doğrulama artık ağırlıkların gölgesinde kalmaz, yaklaşık on ikiden sonra beşini doğrulamak beşini yazmak kadar tutar. Gerçek bir etkinin karikatürü bu: meşgul bir makinede boşta hesaplama yoktur ve vLLM belgeleri tekniğin faydasını yüksek istek hızlarında daha düşük değerlendiriyor.
Önce tahmin, sonra doğrulama
#Doğrulamak ucuzsa, neyi doğrulayacağız? Aday sağlayacak çok daha küçük ikinci bir model olabilir: taşıyacağı ağırlık çok daha az olduğundan her geçişi ucuzdur ve çoğu zaman büyük modelin yazacağı kelimeyi o da tahmin eder. Plan:
Küçük model art arda birkaç token ilerisini tahmin eder.Büyük model tahminlerin hepsini tek geçişte okur ve her konumda ne yazacağını hesaplar.- Tahminler, ilk
reddedilene kadarkabul edilir . Orada büyük modelkendi tokenini yazar ve ondan sonraki tahminler atılır.
Bu şekil, kesin kuralı (sonraki bölümde) on kelimelik bir metinde çalıştırıyor. “Küçük model tahmin eder”e, sonra “Büyük model doğrular”a basın ve sayaçlara bakın: büyük model geçişleri, yazılan tokenler ve küçük model çalışmaları; çünkü her tahmin bir çalışmaya mal olur. Sonra öbür metni, öbür küçük modeli, daha çok ya da az tahmini ve “Yeni zarlar”ı deneyin. Sayaçların altındaki satır binlerce çalıştırmanın ortalamasıdır; yani tek bir şanslı çalıştırma bir şey kanıtlamaz. Bir uyarı: burada bir konumdaki olasılıklar öncesinde seçilen kelimeleri yok sayar; gerçek bir modelin olasılıkları kendisinden önceki her şeye bağlıdır.
Bu şekil JavaScript gerektirir. Uydurma olasılıklarla yaklaşık on kelimelik bir oyuncak metin üzerinde spekülatif kod çözmeyi adım adım gösterir. Her turda küçük bir model birkaç kelime ilerisini tahmin eder ve büyük modelin tek geçişi tahminleri ilk reddedilene kadar kabul eder, o noktada kendi kelimesini yazar ve gerisini atar. Öngörülebilir bir yanıtta iyi bir küçük modelle on token, çok sayıda zar atışı boyunca ortalama yaklaşık 2,6 büyük model geçişi alır; açık uçlu bir cümlede zayıf bir küçük modelle dokuz token yaklaşık 5,3 geçiş alır. Sıradan kod çözme token başına bir geçiş ister.
Tur başına dört tahminde, iyi tahminci öngörülebilir yanıttaki on kelimesini ortalama yaklaşık 2,6 büyük model geçişinde yazdı; açık uçlu cümlede zayıf tahminci dokuz kelime için yaklaşık 5,3 geçişe ihtiyaç duydu. Reddedilen bir tahmin size yalnızca ondan sonraki tahminlere mal olur, başka bir şeye değil; çünkü o geçiş yine bir token yazdı, sıradan kod çözme de bunu yapardı. Ama atılan her tahmin bir küçük model çalışmasıydı.
Bir turda küçük model dört kelime tahmin ediyor. Büyük model ilk ikisini kabul ediyor, üçüncüyü reddediyor ve oraya kendi kelimesini yazıyor. Bu tur, tek büyük model geçişiyle kaç token yazmış olur?
- İki: yalnızca kabul edilen tahminler yazılır, gerisi atılır.
- Üç: kabul edilen iki tahmin ve büyük modelin bir kelimesi.
- Dört: büyük model dört tahmini de okur ve hepsini yazar.
Yanıtı göster
Üç. Her tur büyük modelin bir kelimesiyle biter: ilk reddedilen tahminin yerine yazdığı kelime ya da bütün tahminler kabul edildiğinde fazladan yazdığı bir kelime.
A değil: büyük modelin kendi kelimesi de yazılır.
C değil: reddedilen tahmin ve ondan sonraki atılır.
Yanıt aynı mı?
#Kural tam da bunun olmaması için kurulmuş. Söz, olasılıklar hakkında: çıkan kelimeler, büyük model metni tek başına yazmış gibi, tam olarak büyük modelin olasılıklarını izler. Aynı zarlarla aynı metin çıkması değil bu (sıradan kod çözme de her seferinde farklıdır). Aynı kalan şey dağılımdır. Tek bir konum için büyük modelin bir kelimeye verdiği olasılığa p, küçük modelinkine q diyelim:
- Küçük model kendi olasılıklarından, yani q’dan, bir tahmin çeker.
- Büyük model tahmini min(1, p/q) şansla kabul eder: kelimeyi küçük model kadar ya da daha çok seviyorsa her zaman, aksi halde oranında.
- Tahmin kabul edilmezse büyük model, geriye kalandan bir yedek çeker: küçük modelden daha çok sevdiği kelimelerden, ne kadar daha çok seviyorsa o oranda.
(Bir turdaki bütün tahminler kabul edildiğinde, aynı geçiş büyük modelin kendi olasılıklarından çekilen bir kelime daha verir.)
Tek konum, beş kelime. Üstteki bölmede her kelimenin iki çubuğu var:
Bu şekil JavaScript gerektirir. Beş olası kelimeli tek bir konumu gösterir. Büyük modelin olasılıkları yüzde 42, 26, 16, 10 ve 6; küçük model yüzde 20, 45, 10, 5 ve 20 ile başlar, yani bir tahmin zamanın yüzde 67’sinde kabul edilir. İlk kelime için büyük modelin 42’si, kabul edilen tahminlerin sağladığı 20 ile yedeklerin sağladığı 22’nin toplamıdır. Kabul et ya da değiştir kuralıyla binlerce çekilişten sonra çıkan kelimeler yaklaşık bir puan içinde büyük modelin olasılıklarına oturur; küçük model tek başına kendi olasılıklarında kalır ve bir kelimede 22 puana kadar uzaklaşır. Küçük modelin olasılıklarını değiştirmek, çıkan şeyi değil, tahminlerin ne sıklıkla kabul edildiğini değiştirir.
Dalga kelimesini alın: büyük model ona yüzde 42, küçük model yüzde 20 veriyor. Tahminlerin o yüzde 20’si her zaman kabul edilir, çünkü büyük model kelimeyi daha çok seviyor; kalan 22’yi yedekler sağlar. Tahminler zamanın yüzde 33’ünde reddedilir ve yedekler, büyük modelin küçük modelden daha çok sevdiği kelimelere gider: dalga 22 puan, martı 6, bulut 5; toplam 33. Tekne için küçük model onu fazla sık tahmin ediyor (26’ya karşı 45); bu yüzden tahminlerinin yalnızca 26’sı hayatta kalıyor ve hiç yedek olmuyor: 26 + 0 = 26. Fazla tahmin edilen kelimeler kırpılır, az tahmin edilenler tamamlanır ve ikisi her zaman birbirini götürür. İlk makale bunu herhangi bir model çifti için kanıtlıyor; ikinci makale de kendi biçimi için aynısını kanıtlıyor.
10.000 çekilişten sonra mavi çubuklar yaklaşık bir puan içinde çizgilerin üzerinde duruyor ve üstteki bölmenin söylediği gibi bölünmüş; taramalı kehribar çubuklar küçük modeli izliyor ve çizgileri ıskalıyor. Bir çubuğu oynatın, mavi olanlar yerinde kalır; değişen şey “kabul” satırıdır ve onunla birlikte ne kadar zaman kazandığınız.
Çok daha kötü bir küçük model takıyorsunuz. Kurala göre, büyük modelin ürettiği metinde ne değişir?
- Kötüleşir, çünkü küçük modelin hatalarından daha çoğu kabul edilir.
- Küçük modelin üslubuna daha çok benzer, çünkü önce onun tahminleri gelir.
- Hiçbir şey: daha çok tahmin reddedilir; bedel yalnızca zaman.
Yanıtı göster
Kelimeler, küçük model ne olursa olsun, büyük modelin olasılıklarını izlemeye devam eder; daha kötü bir model daha seyrek kabul edilir, bu yüzden daha çok tahmin boşa gider. Yukarıdaki şekilde kehribar çubukları çok uzağa sürükleyin ve “kabul” satırı düşerken mavi çubukların yerinde kaldığını izleyin.
A değil: bir tahmin yalnızca büyük modelin kendi olasılıklarının izin verdiği sıklıkta kabul edilir.
B değil: çok sayıda çekilişten sonra üslup büyük modelin üslubudur, bir karışım değil.
İki sınır. Kanıt tam aritmetik için geçerli; makaleler ve vLLM belgeleri, gerçek yazılımda sonucun yalnızca sayısal duyarlılık sınırına kadar geçerli olduğunu söylüyor. Ayrıca “aynı dağılım”, büyük modelin doğru olup olmadığı hakkında bir şey söylemez.
Ne kadar hızlanır?
#Hızlanmayı iki sayı belirler: bir tahminin ne sıklıkla kabul edildiği, makalelerin alfa (α) dediği; ve küçük modelin bir çalışmasının bir büyük model geçişine göre maliyeti, c dedikleri (c yüzde 5 ise yirmi küçük çalışma bir büyük geçiş eder). γ (gama) tahminli bir tur 1 + γc geçişe mal olur. En az bir token yazar; ilk tahmin kabul edildiyse (α şansla) ikincisini, ilk ikisi kabul edildiyse (α²) üçüncüsünü yazar ve böyle devam ederek γ + 1’e kadar çıkar. Yani büyük model geçişi başına beklenen token 1 + α + α² + … + αγ, bu da (1 − αγ+1) / (1 − α) eder; sıradan kod çözmeye göre hız bunun 1 + γc’ye bölünmesidir.
Bunlar ilk makalenin formülleri ve varsayımları: her tahmin ötekilerden bağımsız olarak aynı şansla kabul edilir ve γ + 1 konumu doğrulamak her γ için tek geçiş tutar. Gerçekte kabul oranı konuma göre değişir ve gerçek doğrulamalar on iki tokenden çok önce ucuz olmaktan çıkar (ilk şekil); bu yüzden gerçek eğriler daha erken tepe yapabilir.
İlk kaydırıcıyı, “Tur başına tahmin”i sürükleyin: mavi nokta eğri üzerinde kayar, kesikli halka da diğer iki ayar için en iyi tahmin sayısını işaretler. Sonra o ikisini değiştirin ve “Zayıf ve pahalı bir küçük model deneyin”e basın.
Bu şekil JavaScript gerektirir. İlk makalenin formüllerini çizer. Bir tahminin kabul edilme şansı yüzde 70 ve küçük modelin bir çalışması bir büyük geçişin yüzde 10’una mal olurken, tur başına iki tahmin sıradan kod çözmenin yaklaşık 1,8 katı hız verir, dört tahmin en iyi sonucu, yaklaşık 2,0 katını verir, on iki tahmin ise yaklaşık 1,5 katına geri düşer. Yüzde 30 şans ve yüzde 50 maliyetle dört tahmin yaklaşık 0,48 kat verir: sıradan kod çözmeden yavaş. Kazanç için bir tahminin kabul edilme şansının maliyetinden yüksek olması gerekir.
Yüzde 70 ve yüzde 10’da tek bir tahmin bile sıradan kod çözmenin 1,5 katı hız verir, dört tahmin en iyisini verir, 2 katın biraz altında. Sonra eğri düşer: ek bir tahmin ancak ondan önceki bütün tahminler kabul edildiyse işe yarar, bu da giderek azalan bir olasılıktır, ve her seferinde aynı maliyete sahiptir.
Son düğme uyarıdır: zamanın yüzde 30’unda kabul edilen ve yarım büyük geçişe mal olan bir küçük model, sıradan kod çözmenin yaklaşık yarı hızında çalışır. Bir tahminin kabul edilme şansı maliyetinden yüksek değilse hiçbir tahmin sayısı işe yaramaz. Ölçek için yazarların bildirdikleri: T5-XXL’de, yani çeviri ve özetleme için bir modelde, aynı çıktı dağılımıyla, tek bir hızlandırıcıda ve bir seferde tek istekle iki ile üç kat (ilk makale); on altı hızlandırıcıdaki çok büyük bir dil modelinde iki ile iki buçuk kat (ikinci makale). Bu sayılar o modellere, görevlere ve makinelere aittir, başkalarına değil.
Küçük bir model zamanın yüzde 30’unda kabul ediliyor ve çalıştırması yarım büyük model geçişine mal oluyor. Tur başına dört tahminle formüller ne diyor?
- Sıradan kod çözmeden yavaş: yaklaşık yarı hızında.
- Yaklaşık 1,4 kat hızlı, çünkü her geçiş yaklaşık 1,4 token yazıyor.
- Yaklaşık 3 kat hızlı, çünkü bir geçişte en fazla beş token yazılabilir.
Yanıtı göster
Yavaş. Bir tur ortalama 1 + 0,3 + 0,09 + 0,027 + 0,008 ≈ 1,43 token yazar, ama maliyeti yarımşar olan dört küçük çalışma artı bir büyük geçiştir: 3 geçişlik zaman. 1,43’ün 3’e bölümü yaklaşık 0,48.
B değil: 1,4 geçiş başına tokendir. Turun dört küçük model çalışmasının bedelini de ödediğini unutuyor.
C değil: beş, bir turun yazabileceği en yüksek sayıdır ve bütün tahminlerin kabul edilmesini gerektirir.
Ne zaman işe yarar, ne zaman yaramaz
#Spekülatif kod çözme, büyük modelin geçişlerinden tasarruf etmek için boştaki hesaplamayı ve ikinci, daha ucuz bir modeli harcar. Tek bir metin akışına ya da birkaçına hizmet verirken, küçük model büyük modelle çoğu zaman aynı fikirdeyken (benzer metinler, aynı kelime dağarcığı), metin öngörülebilirken (hazır kalıplar, kod, soruyu tekrar eden yanıtlar) ve küçük model ucuzken en çok işe yarar. Makine meşgulken, küçük model göreve uymuyorken (ikinci makale kabul oranının alanlar arasında değiştiğini bildiriyor), ikinci bir model için yer yokken ve bir tahmin maliyetinden daha seyrek kabul edilirken çok az işe yarar ya da zarar verir.
Türevler tahmini başka yollarla yapar ve farklı şeyler arasında ödünleşim yapar; çıktının değişmediğinin kanıtlanmış olup olmadığı birinden ötekine farklıdır, bu yüzden her makalenin kendi iddiasını okuyun:
- Prompt lookup decoding (istemde arama): ikinci model yok; istemde son birkaç tokenin ardından gelenleri kopyalar. README’si bir belgeyi özetlemeyi ve belge hakkındaki soruları yanıtlamayı ölçmüş, kod düzenlemenin de işe yarayacağını bekliyor, kopyalanacak bir şey olmayan yerde az kazanç buluyor. Kaynaklarını anan bir RAG yanıtı istemini tekrar eder (RAG yanıtları nasıl bulur?).
- Kendi kendine spekülatif kod çözme: büyük model bazı katmanlarını atlayarak kendisi tahmin eder; ikinci modele ya da ek eğitime gerek yok. Yazarları bir model ailesinde yaklaşık 2 kata kadar bildiriyor.
- Medusa: büyük modele ek tahmin başlıkları. Yazarları yalnızca başlıklar eğitildiğinde 2,2 katın üzerini, başlıklar ve model birlikte eğitildiğinde 2,3 ile 3,6 katı bildiriyor; bu da modeli değiştirir.
- EAGLE: büyük modelin iç özelliklerinden tahmin eder. Yazarları bir sohbet modelinde 2,7 ile 3,5 kat ve değişmeyen bir metin dağılımı bildiriyor.
Yerel bir modelle sohbet eden bir kişi, ilk şeklin tek akış durumudur. Belirli bir programın bunu destekleyip desteklemediği, sizin modelinizle hangi küçük modeli eşleştireceği ve metninizi ne kadar hızlandıracağı varsaymak yerine ölçmeniz gereken şeylerdir. Bu yazı hiçbir RuneLab modeli hakkında bir iddia taşımıyor: Hati ya da Sköll’ün spekülatif kod çözme kullandığını söylemiyor ve ikisi için de bir hız vermiyor.
Kaynaklar ve ileri okuma
#Dışarıdan alınan her sayının ve iddianın kaynağı, 2026-10-14’te göründüğü haliyle (vLLM sayfası yaşayan bir belgedir).
- Yaniv Leviathan, Matan Kalman ve Yossi Matias, “Fast Inference from Transformers via Speculative Decoding” (2022): kural, kanıt (ek A.1), formüller, T5-XXL.
- Charlie Chen, Sebastian Borgeaud, Geoffrey Irving, Jean-Baptiste Lespiau, Laurent Sifre ve John Jumper, “Accelerating Large Language Model Decoding with Speculative Sampling” (2023): Teorem 1, on altı hızlandırıcı.
- GitHub deposu prompt-lookup-decoding ve README’si.
- Jun Zhang ve arkadaşları, “Draft & Verify: Lossless Large Language Model Acceleration via Self-Speculative Decoding” (2023).
- Tianle Cai ve arkadaşları, “Medusa: Simple LLM Inference Acceleration Framework with Multiple Decoding Heads” (2024).
- Yuhui Li, Fangyun Wei, Chao Zhang ve Hongyang Zhang, “EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty” (2024).
- vLLM projesinin belgesi Speculative Decoding.
Aklınızda kalsın
#Birkaç tokeni okumak, bir tane yazmak kadar maliyetlidir; çünkü tek bir metin akışında bir geçiş çoğunlukla ağırlıkları taşımakla geçer. Küçük bir model tahmin eder, büyük model tahminleri tek geçişte doğrular ve kabul et ya da değiştir kuralı, çıkan kelimelerin büyük modelin kendi olasılıklarını izlemesini sağlar. Kötü bir küçük modelin bedeli kalite değil zamandır; makine meşgulken de kazanç kaybolur.
- Hızlanmayı manşetteki bir sayıdan değil, kendi metninizde ve donanımınızda sorun.
- Küçük modelin işe uyduğunu kontrol edin: aynı kelime dağarcığı, benzer metinler, ucuz çalışma.
- “Metin değişmez” ifadesini kuralın bir özelliği olarak, yuvarlamaya kadar geçerli olarak okuyun.