Spekülasyon Yoluyla Sonar'ı Hızlandırmak
Spekülatif kod çözme, taslak model doğrulaması aracılığıyla Sonar LLM'lerini hızlandırır
Spekülatif kod çözme (speculative decoding), daha büyük hedef model tarafından doğrulanan tamamlama adayları üretmek için hızlı ve küçük bir taslak model kullanarak Büyük Dil Modellerinin (LLM) üretim hızını artırır. Bu düzende, maliyetli hedefin tek bir belirteç (token) üretmesi yerine, tek bir adımda birden fazla belirteç yayılır. Burada, Sonar modellerindeki belirteçler arası gecikmeyi azaltmak için Perplexity'de uygulanan çeşitli spekülatif kod çözme türlerinin uygulama detaylarını sunuyoruz.
Spekülatif Kod Çözme
Spekülatif Kod Çözme, belirteç üretimini hızlandırmak için doğal dillerin yapısından ve transformer'ların otoregresif doğasından yararlanır. Llama-70B gibi daha büyük modeller, Llama-1B gibi daha küçük modellere göre daha fazla bilgi barındırsa da bazı basit görevlerde benzer performans gösterirler. Bu örtüşme, belirli dizilerin daha az maliyetli modeller tarafından daha iyi üretildiğini, karmaşık problemleri ise daha büyük modellere bıraktığını göstermektedir. Buradaki zorluk, hangi tamamlama işlemlerinin daha iyi olduğunu ve küçük modelin üretim kalitesinin büyük modelinkiyle aynı olup olmadığını belirlemektir.
Neyse ki LLM'ler otoregresif transformer'lardır: kendilerine bir belirteç dizisi verildiğinde, bir sonraki belirtecin olasılık dağılımını çıktılarlar. Ek olarak, girdi dizisindeki belirteçlerle ilişkili ara özelliklerden elde edilen logit'ler de modelin tam olarak bu belirteçleri verme olasılığını gösterir. Bu özellik spekülasyona olanak tanır: bir belirteç dizisi bir girdi önekinden başlayarak daha küçük bir model tarafından üretildiyse, hedef modelle ne kadar iyi uyum sağladığını belirlemek için daha büyük modelden geçirilebilir. Adayların her bir öneki bir olasılıkla puanlanır ve kabul eşiğinin üzerindeki en uzun olanı seçilir. Ek bir avantaj olarak, hedef model ayrıca ücretsiz olarak sonradan bir belirteç sağlar: bir taslak model n belirteç ürettiyse, tek bir adımda n + 1 adede kadar belirteç yayılabilir.
Çıkarım aşamasında, spekülatif örnekleme süreci kaba taslakla 4 aşamaya ayrılabilir:
Ön dolgu (Prefill): KV önbellek girdilerini doldurmak için hem hedef hem de taslak modeller girdi dizisi üzerinde çalıştırılmalıdır. Medusa gibi bazı şemalar tahmin için daha basit yoğun katmanlar kullanırken, bu yazıda kendi KV önbelleklerine ihtiyaç duyan transformer tabanlı taslaklara odaklanıyoruz.
Taslak üretimi: Taslak model, belirli sayıda sabit belirteç üretmek için yinelenir. Taslak dizi doğrusal olabilir veya model belirli bir derinliğe kadar ağaç benzeri bir yapıyı keşfedebilir (EAGLE, Medusa). Burada doğrusal dizilere odaklanıyoruz.
Kabul: Hedef model, taslak dizi üzerinde çalışarak her taslak belirtece karşılık gelen logit'ler oluşturur. Kabul edilebilir en uzun dizinin uzunluğu belirlenir.
Hedef üretimi: Hedef, logit'ler ürettiğinden, uyumsuz konumda veya dizinin kuyruk ucunda logit'ler sonraki bir belirtece karşılık gelir. Bu logit'ler, diziyi sonlandırarak hedeften sağlam bir belirteç sağlamak için örneklenebilir.
Spekülatif kod çözmeyi uygulamak için çeşitli yöntemler mevcuttur. Bu yazıda, şirket içi 1B modeli kullanarak Sonar modellerini hızlandırmak için kullandığımız şemalara ve DeepSeek ölçeğindeki modelleri hızlandırmak için oluşturduğumuz tahmin mekanizmalarına odaklanacağız.
Hedef-Taslak (Target-Draft)
Spekülatif kod çözme, aday diziler üretmek için hedef modele taslak model olarak mevcut küçük bir LLM'yi bağlayarak elde edilebilir. Üretimde, hedefle aynı veri kümesi üzerinde ince ayar yapılmış bir Llama-1B modeli kullanarak Sonar'ı hızlandırdık. Bu yaklaşım sıfırdan bir taslak eğitilmesini gerektirmezken, küçük model yine de önemli ölçüde KV önbellek kapasitesi kullanır ve hafif bir ön dolgu ek yükü getirerek TTFT'yi artırır.
Bu şema altında kod çözücü, yalnızca kod çözme odaklı toplu işlerde (batch) spekülasyon yapar ve ön dolgu sırasında veya karışık ön dolgu-kod çözme toplu işlerinde standart örnekleme yoluyla belirteçler üretir. Ön dolgu aşamasında, hedef logit'ler, taslak KV önbelleğindeki yeni üretilen belirteci de önceden doldurmak için hemen örneklenir. Taslak henüz örneklenmemiştir, ancak ürettiği logit'ler kod çözme aşamasına aktarılır.
Kod çözme aşamasında taslak model ilerletilir ve her aşamada en üstteki belirteç örneklenir. İstenen taslak uzunluğuna ulaşıldıktan sonra belirteçler, örnekleyicinin kabul edilen dizi uzunluğunu belirlediği logit'leri üretmek için hedef modelden geçirilir. Kabul, taslak ve hedeften gelen tam olasılık dağılımlarının karşılaştırılmasıyla belirlenir. Hedef her zaman kabul edilen taslak dizisini takip eden bir dizi logit çıktısı verdiğinden, ek bir çıktı üretmek için bu logit örneklenir. Taslak model henüz kabul edilen bu belirteci görmediğinden, bir sonraki kod çözme adımına hazırlık olarak ilgili KV önbellek girdilerini doldurmak için yeniden çalıştırılır ve logit'ler tekrar taşınır.
EAGLE
EAGLE, olası taslak belirteçlerin ağaç benzeri bir geçişi yoluyla oluşturulan birden fazla taslak dizisini araştıran spekülatif kod çözme şemesidir. Sabit (EAGLE) veya dinamik şekilli (EAGLE-2) bir ağaç, doğrusal bir dizideki en yüksek puanlı belirteci takip etmek yerine her düğümdeki En İyi K (Top-K) adayları dikkate alarak, taslak belirteçlerin arka arkaya yürütülmesiyle araştırılır. Diziler daha sonra puanlanır ve hedef ek bir belirteç de eklenerek devam etmek için en uygun olanı seçilir.
Daha doğru tahmin elde etmek için, bir EAGLE taslak modeli yalnızca token'lara dayanarak değil, aynı zamanda hedef modelin hedef özelliklerini (son katman gizli durumları) kullanarak da tahmin yapar. EAGLE'ın dezavantajı, düşük gecikme bütçesi içinde uygun adaylar üretecek kadar doğru özel ve küçük taslak modelleri eğitme gereksinimidir. Genellikle bir taslak model, özgün modelin bir çözümleyici katmanına özdeş tek bir transformer katmanıdır ve gömlemelerine ve lm_head projeksiyonlarına bağlanarak hedef modelle sıkı şekilde eşleştirilir. Bu, daha az KV önbellek kapasitesi gerektirdiğinden, EAGLE'ın bellek ayak izi daha düşüktür.
Hedef modeldeki ağaç benzeri dizileri doğrulamak için özel dikkat maskeleri kullanılmalıdır. Ne yazık ki, bütün bir dizi için özel bir dikkat maskesi kullanmak, gerçekçi girdi uzunlukları için dikkati önemli ölçüde yavaşlatır (%50'ye kadar) ve spekülasyon yolu ile elde edilebilir hızlanmanın bir kısmını geçersiz kılar. Bu nedenle henüz tam ağaç keşfini üretime almadık ve bunun yerine DeepSeek-V3 Teknik Raporunda sunulan MTP benzeri şemalar aracılığıyla tek belirteçli tahmin özel durumuna odaklanıyoruz.
MTP
Bu şema, tahmin için belirteçlerin yanı sıra gizli durumların da kullanılması istisnası dışında taslak-hedef kod çözmeye benzer. Düzenli taslak-hedef spekülasyonuna kıyasla hem ön dolgu hem de kod çözme aşamalarında biraz daha fazla çalışma yapılmalıdır. Taslak model hem belirteçleri hem de gizli durumları kullanır: t_{i+1} belirteci, sırayla gizli H_i durumlarından türetilen t_i belirtecine karşılık gelen L_i logit'lerinden örneklenir. Sonuç olarak, girdi belirteç arabellekleri, hedefin çıktısı olan gizli durum vektörlerine göre bir adım sola kaydırılmalıdır. Aşağıdaki şekil, eğitim için kullanılan yazışmaların yanı sıra çıkarım sırasındaki kaymayı da işaretler.
Kod çözme akışı, hem gizli durumların hem de logit'lerin aktarılması istisnası dışında taslak-hedef kod çözmeye oldukça benzer. Uygulamamız ilgili tüm örnekleme ve logit işleme logit'lerini paylaşır, yalnızca model ileri çağrılarını özelleştirir. Birden fazla belirteç tahmin edildiğinde taslak model, tahmin için taslak gizli durumlarını kullanır ve ayrıca kendi özelliklerine dayalı olarak KV önbellek girdilerini doldurur. Uzun vadede bu durum doğruluk kaybına neden olabilir. Daha sonra, hedef tahmin için KV önbellek girdisini doldurmak üzere taslak modeli çalıştırırken, daha doğru hedef gizli durumlarını girdi olarak alarak tüm dizi üzerinde çalıştırırız. Bu taslak modeller küçük olduğundan, ek belirteçleri işlemenin ek maliyeti ihmal edilebilir düzeydedir.
MTP Kafalarını Eğitmek
MTP'den yararlanmak için, 8xH100 cihazlı tek bir düğümde çalışan, Perplexity'nin veri kümeleri üzerinde ince ayar yapılmış modellerimize eklenen MTP kafalarını eğitmek için gereken altyapıyı oluşturduk. Yaklaşık bir gün içinde Llama-1B'den Llama-70B'ye ve DeepSeek V2-Lite'a kadar değişen modeller için kafalar oluşturabiliriz. Daha büyük modeller için ince ayar sürecinde oluşturulan MTP kafalarına güveniyoruz.
MTP eğitiminin hedefi, taslak gizli durumlarını ve hedef gizli durumlarından ekstrapole edilen logit'leri, hedefin bir sonraki belirteç logit'leri ve gizli durumları ile eşleştirmektir. Gizli durumlar için çıkarım maliyetli olduğundan, eğitim sırasında kullanılmak üzere hedef modelin çıkarım için optimize edilmiş uygulamasını kullanarak bunları önceden hesaplarız. Bununla birlikte, çıkarım MTP uygulamasını doğrulamak ve nicelemeden veya optimizasyonlardan kaynaklanan sayısal farkların sonuçları engellememesini sağlamak için, doğrulama kaybı ve doğruluk tahmini için hem hedef hem de taslak modellerin çıkarım uygulamasını tamamen yeniden kullanırız.
Orijinal makalede kullanılan ShareGPT veri kümesinden daha büyük örneklere ölçekleme yaparken, EAGLE makalesinde özetlenen ve uygulanan MTP kafa mimarisinin 70B boyutundaki modeller için eğitilemediğini fark ettik. Daha fazla sayıda daha kısa dizi içeren ShareGPT'nin aksine, önemli ölçüde daha uzun olan biraz daha az sayıda komut istemi üzerinde eğitim yapıyoruz. Orijinal EAGLE kafaları yapı olarak tipik bir transformer'dan biraz farklı olduğundan, kaldırılmış olan bazı RMS Normalizasyon katmanlarını yeniden ekledik. Bunun yalnızca eğitimin yakınsamasına izin vermekle kalmayıp, aynı zamanda kafaların doğruluğunu birkaç yüzde puanı artırdığını bulduk.
Katman normları yalnızca eğitimi kolaylaştırmakla kalmaz, normları yeniden eklemek matematiksel olarak da sezgiseldir. MTP kafaları, boyut olarak önemli olabileceğinden (Llama 70B için yaklaşık 2 GB) hedef modelin gömmelerini ve logit projeksiyonlarını yeniden kullanır. Eğitim sırasında bunlar dondurulur ve MTP katmanının, orijinal modelin projeksiyon katmanının eğitim sırasında öğrendiği ile aynı vektör uzayına tahminler gömmeyi öğrenmesi beklenir. Normlar atılarak, tek bir MLP'nin bir normun ardından gelen bir MLP ile aynı işlevi öğrenmesi beklenir, bu da taslak ile hedef modellerin gizli durumları arasındaki eşleşmeyi engeller.
Spekülatif Kod Çözme ile Çıkarım
Çıkarım motorunda, girdi dizileri için belirteçler üretmek amacıyla, öncelikle makul büyüklükte toplu işlerde gruplandırılmaları, ardından sonraki belirteçler için KV önbelleğinde sayfaların ayrılması gerekir. Girdi belirteçleri ve KV sayfa bilgisi daha sonra modeli çalıştıran tüm paralel derecelere yayınlanan bir arabellekte paketlenir. Son olarak meta veriler GPU belleğine kopyalanır ve bir sonraki belirtecin örnekleneceği logit'leri üretmek için model yürütülür.
Taslak ve hedef çıkarım sunucusunu aralarındaki istekleri koordine eden bir sarmalayıcı (wrapper) aracılığıyla gevşek bir şekilde birleştiren belirli uygulamaların aksine, taslak-hedef çiftlerimiz sıkı bir şekilde birleştirilmiştir ve üretim boyunca birlikte adım atar. Toplu iş planlaması ve KV sayfa tahsisi, her türlü spekülatif kod çözme için modeller arasında paylaşılır: bu, hepsinin aynı arayüzü sunması nedeniyle bir modeli kapsamlı çıkarım sunucusuna bağlayan mantığı birleştirir.
Perplexity'deki çıkarım çalışma zamanı (runtime), dikkat çekirdeğini (attention kernel) yapılandırmak ve planlamak için oluşturulması gereken meta verileri belirleyen FlashInfer etrafında şekillendirilmiştir. Bir toplu iş oluşturan bazı girdi dizileri verildiğinde; ön dolgu, kod çözme veya doğrulama için, ara arabellekleri ayırmak ve dikkatin içinde kullanılan belirli sabit arabellekleri doldurmak üzere CPU tarafında çalışma yapılmalıdır. Bu çalışma, GPU kullanımını en üst düzeye çıkarmak için gizlenmesi gereken gecikmelere de neden olan toplu iş planlaması ve KV sayfa tahsisi maliyetine ek olarak yapılır.
Spesifikasyonsuz çıkarım için CPU tarafı ve GPU tarafı çalışmalarını tamamen paralel hale getirirken, spekülatif kod çözme için CPU-GPU dengesinin daha karmaşık olduğunu gördük. Ana zorluk, kabul edilen belirteç sayısının sonraki bir çalıştırma için dizi uzunluğunu belirlemesi ve kaçınılması zor bir GPU-CPU senkronizasyon noktası getirmesinden kaynaklanmaktadır. CPU çalışmasının gecikmesini en iyi şekilde gizlemek için farklı planlama şemaları denedik.
Hedef-Taslak Planlaması (Draft-Target Schedule)
Bir hedef modelden daha küçük olmasına rağmen, tüm bir LLM taslak olarak kullanıldığında hala GPU üzerinde hatırı sayılır bir gecikme süresi ortaya çıkarır ve pahalı CPU işlemlerini gizlemek için biraz başlık boşluğu sağlar. Küçük modeller tensör paralelliğinden yararlanmadığından, hedefin ve taslak işlendiği sıra sayısı arasında bir uyumsuzluk vardır. Uygulamamızda taslak model yalnızca bir TP grubunun lider derecesinde çalışır.
Daha önce belirtildiği gibi, bir kod çözme adımı logit'leri bir sonraki çalıştırmaya aktarır. Bu, taslak modelin bir yürütülmesini CPU tarafı toplu iş planlama çalışmasıyla örtüştürmemize olanak tanır. Toplu iş bir araya getirildikten sonra, örnekleyiciye ve taslağa yapılan tekrar eden çağrılar taslak belirteçlerini üretir. Paralel olarak, doğrulama için toplu iş hedef model için bir araya getirilir ve paralel çalışanlarla senkronize edilir. Hedef logit'ler doğrulanır ve kabul edilen dizi uzunluklarını belirlemek için örneklenir. Bu noktada, sonraki dizi uzunluklarını belirlemek için GPU-CPU senkronizasyonu gereklidir. Taslak model yalnızca lider düğüm üzerinde çalıştığından, toplu işi sırayla ayarlanır ve hedefin ürettiği ek belirteçle KV önbellek girdilerini doldurmak için yürütülmesi başlatılır. Bu taslak çalıştırma tarafından üretilen logit'ler, sonraki çalıştırmada ilk taslak belirteci örneklemek için kullanılacaktır. En önemlisi, taslak çalışırken bir sonraki toplu iş planlanabilir.
Tek Bir Belirteç için MTP Planlaması
Çalışma zamanı henüz Eagle tarzı taslak ağaç keşfi sağlamasa da, tek bir transformer çözücü katmanı boyutunda bir model tarafından üretilen doğrusal bir taslak belirteç dizisini göz önünde bulundurarak bu şemanın özel bir durumunu uyguladık. Bu şema, DeepSeek R1'in açık kaynaklı ağırlıklarını kullanarak taslak tahmini için kullanılabilir. Tek bir belirteç tahmin etme alt durumu ilgi çekicidir, çünkü büyük MTP katmanları ek yüklerini haklı çıkaracak kadar yüksek kabul oranlarına ulaşır.
Taslak model çok daha hızlı olduğundan ve daha az CPU tarafı gecikmesi gizlediğinden MTP planlaması biraz daha karmaşıktır. Ek olarak taslak, hedef modelle birlikte parçalanır (sharded) ve toplu iş bilgisi için paylaşılan bellek aktarımları gerektirir. Bir çalıştırma, önceki şemaya benzer şekilde toplu iş bilgisinin aktarılması ve taşıma logit'lerinden ilk belirtecin örneklenmesiyle başlar. Sonraki adreste, D'nin kod çözme toplu iş boyutu olduğu 2 * D belirteci işleyerek belirteçleri doğrulamak için hedef çalıştırılır. Bu, toplu iş iki yarıya eşit olarak bölündüğünden, InfiniBand gibi daha yavaş ara bağlantılar üzerinden Uzman Karışımı (MoE) modellerinde mikro gruplama için idealdir. Hedefin gizli durumları bir sonraki taslak çalıştırmaya aktarılırken, logit'ler doğrulama için örnekleyiciye iletilir.
GPU üzerinde sınırlı miktarda ek çalışma gerçekleştirerek, taslak dizi kabulünden sonra CPU-GPU senkronizasyonundan kaçınırız. Hedeflerin girdi belirteçleri kaydırıldıktan sonra bir çekirdek (kernel), sonraki hedef belirteçlerini ilgili konumlarına takar. Taslak daha sonra hedeflenenle aynı toplu iş bilgisi ile yeniden çalıştırılarak KV önbellek girdileri doldurulur ve sonraki çalıştırma için logit'ler ile gizli durumlar oluşturulur, kabul edilmeyen belirteçler üzerinde bazı gereksiz çalışmalar yapılır. Bu durumlarda, kullanılmayan çalışmanın gecikmesi, taslak modelin küçük boyutu nedeniyle neredeyse hiç ölçülemez. Taslak çalıştırmaya paralel olarak dizi uzunlukları CPU üzerinde belirlenir ve GPU çalışmasının sonlanması beklenmek zorunda kalınmadan bir sonraki toplu işin planlanması başlatılır.
Taslak katmandaki ek çalışmanın ek yükü dikkat çekmese de MLP katmanları daha sorunludur. Matris çarpımı yönergeleri, belirteç sayısı boyutu boyunca 64'lük bir sınıra kadar doldurulduğundan, ikiye katlama önemli ölçüde daha fazla blok gerektirmiyorsa ek yük gizlenir. Daha uzun taslak diziler için ek yük daha pahalıdır ve normal taslak hedef modeller için kullanılan şema daha iyi çalışır.
Kaynakça
Katman Normalizasyonu (Layer Normalization)
DeepSeek-V3 Teknik Raporu (DeepSeek-V3 Technical Report)
Alıntı
@online{perplexity2025AcceleratingSonarThroughSpeculation,
author = {{Perplexity} and Nandor Licker and Erin McKnight},
title = {{Accelerating Sonar through speculation}},
date = {2025-06-10},
url = {https://perplexity.coolkeypoint.com/hub/blog/accelerating-sonar-through-speculation}
}