Ön Doldurma (Prefill)
İş akışıprefill nedir?
Bir dil modeline prompt gönderdiğinde iş iki aşamada döner: önce girdinin tamamı okunup işlenir, sonra cevap kelime kelime üretilir. İlk aşamaya prefill (ön doldurma) denir. Model senin gönderdiğin bütün token'ları aynı anda işler, her biri için iç temsilleri hesaplar ve KV cache'i doldurur. Cevabın ilk token'ı ancak bu aşama bittikten sonra çıkar.
İkinci aşama olan decode ise token'ları teker teker üretir — her yeni token bir önceki adıma bağlıdır, yani sıralı ve daha yavaştır.
Nasıl çalışır?
Prefill sırasında bütün input token'ları paralel işlenebilir, çünkü hepsi zaten elimizdedir. Model her katmanda attention hesaplar ve her token için anahtar (key) ve değer (value) vektörlerini üretip KV cache'e yazar. Bu yüzden prefill hesap açısından yoğundur ama GPU'yu verimli kullanır: yüzlerce token'ı tek seferde çarpıp toplar.
Decode aşamasında ise sadece bir token üretilir, geri kalan bağlam KV cache'ten okunur. Yani prefill "bağlamı kur", decode "cevabı yaz" diye özetlenebilir.
Neden önemli?
Bir modelin cevaba başlama süresi (ilk token gecikmesi) büyük ölçüde prefill'in ne kadar sürdüğüne bağlıdır. Uzun bir prompt gönderdiğinde "neden bu kadar bekledim de cevap başladı" diye düşünüyorsan, cevabın prefill'de: model önce o koca girdiyi baştan sona işlemek zorunda. Prompt ne kadar uzunsa prefill o kadar uzun sürer.
Bu yüzden prompt caching gibi teknikler değerli — aynı uzun bağlamı tekrar tekrar prefill etmek yerine bir kez işleyip cache'lersin.
Kullanım alanları
Prefill kavramı LLM serving (model sunma) altyapılarının kalbindedir. vLLM, TGI gibi inference motorları prefill ve decode aşamalarını ayrı ayrı optimize eder; chunked prefill, continuous batching gibi teknikler tam olarak bu aşamayı hızlandırmak için var. API üzerinden model kullanan biri için de anlamlı: uzun sistem promptlarının maliyeti ve gecikmesi doğrudan prefill ile ilgilidir.
