Transformers documentation
Yardımcı çözümleme
Yardımcı çözümleme
Assisted decoding, yardımcı modelin ana modelin aday token'ları onaylamasından önce bunları önermesine izin vererek metin üretimini hızlandırır. Ana model, aday token'ları tek bir ileri geçişte doğrular. Yardımcı model hızlı ve ucuzdur ve ana modelin onlarca daha pahalı ileri geçişinin yerini alabilir.
Bu kılavuz, Transformers'ta destekli çözümleme (assisted decoding) yöntemlerini kapsar.
Spekülatif çözümleme
Speculative decoding, aday token taslaklarını oluşturmak için daha küçük bir asistan model kullanır. Ana model bu tokenları tek bir geçişte kontrol eder. Doğrulanmış tokenlar nihai çıktıya eklenirken, reddedilen tokenlar standart örneklemeyi tetikler. Ana model daha az pahalı ileri geçiş çalıştırdığı için üretim daha hızlıdır.
Yöntem, asistan modeli ana modelden belirgin şekilde daha küçük olduğunda ve aynı tokenizer'ı kullandığında en iyi şekilde çalışır. Speculative decoding, greedy search ve sampling'i destekler ancak toplu (batched) girdileri desteklemez.
assistant_model parametresini generate() fonksiyonuna iletin. Token doğrulaması başarısız olursa yeniden örneklemeyi etkinleştirmek için do_sample=True değerini ayarlayın.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM-1.7B")
model = AutoModelForCausalLM.from_pretrained("HuggingFaceTB/SmolLM-1.7B", dtype="auto")
assistant_model = AutoModelForCausalLM.from_pretrained("HuggingFaceTB/SmolLM-135M", dtype="auto")
inputs = tokenizer("Hugging Face is an open-source company", return_tensors="pt")
outputs = model.generate(**inputs, assistant_model=assistant_model)
tokenizer.batch_decode(outputs, skip_special_tokens=True)
'Hugging Face is an open-source company that provides a platform for developers to build and deploy machine'assistant_model argümanı, Pipeline API'sinde de kullanılabilir.
import torch
from transformers import pipeline
pipeline = pipeline(
"text-generation",
model="meta-llama/Llama-3.1-8B",
assistant_model="meta-llama/Llama-3.2-1B",
dtype="auto"
)
pipeline("Hugging Face is an open-source company, ", max_new_tokens=50, do_sample=False)Rastgeleliği kontrol etmek için temperature değerini ayarlayın. Daha düşük sıcaklıklar genellikle gecikmeyi iyileştirir.
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM-1.7B")
model = AutoModelForCausalLM.from_pretrained("HuggingFaceTB/SmolLM-1.7B", dtype="auto")
assistant_model = AutoModelForCausalLM.from_pretrained("HuggingFaceTB/SmolLM-135M", dtype="auto")
inputs = tokenizer("Hugging Face is an open-source company", return_tensors="pt")
outputs = model.generate(**inputs, assistant_model=assistant_model, do_sample=True, temperature=0.5)
tokenizer.batch_decode(outputs, skip_special_tokens=True)
'Hugging Face is an open-source company that is dedicated to creating a better world through technology.'Prompt arama kodlaması
Prompt lookup decoding bir asistan modeline ihtiyaç duymaz. Prompt içindeki örtüşen n-gram'ları bularak aday tokenlar önerir. Eşleşme yoksa normal otoregresif çözüme düşer. Özetleme ve çeviri gibi girdiye dayalı görevler için uygundur çünkü aday tokenlar genellikle kaynak metindeki yerel kalıpları yansıtır.
prompt_lookup_num_tokens değerini generate() fonksiyonuna iletin. Bu, algoritmanın tekrar eden bir desen algıladığında promptun önceki kısımlarından kaç token kopyalamaya çalışacağını belirler.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM-1.7B")
model = AutoModelForCausalLM.from_pretrained("HuggingFaceTB/SmolLM-1.7B", dtype="auto")
inputs = tokenizer("Hugging Face is an open-source company", return_tensors="pt")
outputs = model.generate(**inputs, prompt_lookup_num_tokens=5)
tokenizer.batch_decode(outputs, skip_special_tokens=True)
'Hugging Face is an open-source company that provides a platform for developers to build and deploy machine learning models. It offers a variety of tools'import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM-1.7B")
model = AutoModelForCausalLM.from_pretrained("HuggingFaceTB/SmolLM-1.7B", dtype="auto")
inputs = tokenizer("Hugging Face is an open-source company", return_tensors="pt")
outputs = model.generate(**inputs, prompt_lookup_num_tokens=5, do_sample=True, temperature=0.5)
tokenizer.batch_decode(outputs, skip_special_tokens=True)
'Hugging Face is an open-source company that provides a platform for developers to build and deploy machine learning models. It offers a variety of tools'Kendinden spekülatif çözümleme
Self-speculative decoding, bir modelin ara katmanlarını aday tokenlar öneren asistan olarak kullanır. Öneri eşleşirse, model erken çıkar ve kalan katmanlar tokenları doğrular veya düzeltir.
Tümü tek bir model olduğu için ağırlıklar ve önbellekler paylaşılır; bu da ek bellek yükü olmadan hızı artırır. Bu teknik yalnızca ara katmanlardan erken çıkış logitleri üretmeye yönelik olarak eğitilmiş modellerde işe yarar.
Çıkış katmanını ayarlamak için assistant_early_exit parametresini generate() fonksiyonuna iletin.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("facebook/layerskip-llama3.2-1B")
model = AutoModelForCausalLM.from_pretrained("facebook/layerskip-llama3.2-1B", dtype="auto")
inputs = tokenizer("Hugging Face is an open-source company", return_tensors="pt")
outputs = model.generate(**inputs, assistant_early_exit=4, do_sample=False, max_new_tokens=20)
tokenizer.batch_decode(outputs, skip_special_tokens=True)Çoklu jeton tahmini (MTP) katmanı
Çoklu jeton tahmini (MTP) katmanı, ana modelin kendi kontrol noktasından (checkpoint) gelen ek tahmin katmanları ile aday jetonları taslaklar. MTP katmanları, ana modelin gömme (embedding) ve çıktı başlığını yeniden kullanır. Her MTP katmanı bir jeton taslakladığı için, adım başına aday sayısı kontrol noktasındaki MTP katman sayısıyla eşleşir. Ana model, taslakları tek bir ileri geçişte doğrular.
MTP, DeepSeek-V3 ve GLM-4.5 gibi MTP katmanlarıyla eğitilmiş checkpoint'lerle çalışır. Bu checkpoint'ler MTP ağırlıklarını taşır ve yapılandırmalarında num_mtp_layers değerini ayarlar; bu değer config.json dosyasında num_nextn_predict_layers olarak listelenir.
use_mtp=True değerini generate() fonksiyonuna iletin; modelde MTP katmanları yoksa bu bir hata yükseltir. Spekülatif çözümlendirme gibi MTP, açgözlü arama ve örneklemeyi destekler ancak toplu girdileri desteklemez.
Burada MTP, DeepSeek-V3 ve GLM-4.5'te olduğu gibi hedef checkpoint'te yer alan tahmin katmanlarını ifade eder. Gemma 4, MTP çözümleme için ayrı bir asistan checkpoint'i kullanır. Bunu assistant_model olarak iletin (bkz. Multi-token prediction drafter).
text-generation hattı ve generate() her ikisi de use_mtp=True değerini kabul eder.
from transformers import pipeline
pipe = pipeline(
"text-generation",
model="zai-org/GLM-4.5-Air",
device_map="auto",
)
outputs = pipe(
"Hugging Face is an open-source company",
use_mtp=True,
do_sample=False,
max_new_tokens=50,
add_special_tokens=True,
return_full_text=True,
)
[output["generated_text"] for output in outputs]Alternatif olarak, aşağıdaki gibi çıkarım yapabilirsiniz.
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("zai-org/GLM-4.5-Air")
model = AutoModelForCausalLM.from_pretrained("zai-org/GLM-4.5-Air", device_map="auto")
inputs = tokenizer("Hugging Face is an open-source company", return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, use_mtp=True, do_sample=False, max_new_tokens=50)
tokenizer.batch_decode(outputs, skip_special_tokens=True)Çoklu jeton tahmin taslakçısı
MTP taslakçı, ayrı bir kontrol noktasından yüklenen hafif bir asistan modelidir. Hedef modelin doğrulaması için aday jetonlar önerir. Taslakçı, hedef modelin giriş gömme değerlerini kullanır ve KV önbelleğine dikkat eder. Hedef modelin gizli durumlarından başlar, ardından jetonları otoregresif olarak taslaklar. Her bir sonraki jeton için, projeksiyonlanmış gizli durumunu taslakçıya geri besler. Hedef model, spekülatif çözümleme (speculative decoding) gibi, taslaklanan jetonları tek bir ileri geçişte doğrular.
MTP katmanlarının aksine, hedef checkpoint'in bir parçası olan ve çıktı başlığıyla ortaklaşan bu katmanlardan farklı olarak, MTP taslakçı (drafter) ayrı bir asistan modelidir. Hedef modelin girdi gömme değerlerini (input embeddings) ve KV önbelleğini (KV cache) kullanarak token önerir.
from transformers import AutoProcessor, AutoModelForCausalLM
processor = AutoProcessor.from_pretrained("google/gemma-4-E4B-it")
target_model = AutoModelForCausalLM.from_pretrained(
"google/gemma-4-E4B-it",
dtype="auto",
device_map="auto",
)
assistant_model = AutoModelForCausalLM.from_pretrained(
"google/gemma-4-E4B-it-assistant",
dtype="auto",
device_map="auto",
)
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Write a short joke about saving RAM."},
]
inputs = processor.apply_chat_template(
messages,
tokenize=True,
return_dict=True,
return_tensors="pt",
add_generation_prompt=True,
enable_thinking=False
).to(target_model.device)
input_len = inputs["input_ids"].shape[-1]
outputs = target_model.generate(
**inputs,
assistant_model=assistant_model,
max_new_tokens=256,
)
response = processor.decode(outputs[0][input_len:], skip_special_tokens=False)
processor.parse_response(response)Evrensel destekli çözümleme
Evrensel destekli çözümleme (UAD), ana model ile asistan modelin farklı tokenizatorlara sahip olması durumunda bile spekülatif çözümlemeyi mümkün kılar. Bu sayede herhangi bir küçük asistan modelini ana modelle eşleştirebilirsiniz. Aday tokenlar yeniden kodlanır ve algoritma, devamın hizalı kalmasını sağlamak için en uzun ortak alt diziyi hesaplar.
UAD'yi etkinleştirmek için tokenizer, assistant_tokenizer ve assistant_model değerlerini generate() fonksiyonuna iletin.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
assistant_tokenizer = AutoTokenizer.from_pretrained("double7/vicuna-68m")
tokenizer = AutoTokenizer.from_pretrained("google/gemma-2-9b")
model = AutoModelForCausalLM.from_pretrained("google/gemma-2-9b", dtype="auto")
assistant_model = AutoModelForCausalLM.from_pretrained("double7/vicuna-68m", dtype="auto")
inputs = tokenizer("Hugging Face is an open-source company", return_tensors="pt")
outputs = model.generate(**inputs, assistant_model=assistant_model, tokenizer=tokenizer, assistant_tokenizer=assistant_tokenizer)
tokenizer.batch_decode(outputs, skip_special_tokens=True)
'Hugging Face is an open-source company that is dedicated to creating a better world through technology.'Statik ensemble doğrulama
Standart spekülatif çözümlendirme kayıpsızdır — çıktı dağılımının hedef modelle tam olarak eşleşmesini garanti eder. Statik ensemble doğrulama, bu kuralı gevşeterek doğrulamayı hedef ve taslak dağılımlarının karışımına karşı gerçekleştirir; bu sayede kabul oranını artırır (daha hızlı çıkarım) ancak çıktı dağılımının tam hedef dağılım yerine bir karışım olmasına neden olur. Önerilen başlangıç değeri 0.7'dir.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("HuggingFaceTB/SmolLM-1.7B")
model = AutoModelForCausalLM.from_pretrained("HuggingFaceTB/SmolLM-1.7B", dtype="auto")
assistant_model = AutoModelForCausalLM.from_pretrained("HuggingFaceTB/SmolLM-135M", dtype="auto")
inputs = tokenizer("Hugging Face is an open-source company", return_tensors="pt")
outputs = model.generate(**inputs, assistant_model=assistant_model, assistant_ensemble_weight=0.7, do_sample=True)
tokenizer.batch_decode(outputs, skip_special_tokens=True)Bu, asistan modelinden aday logitler gerektirir ve prompt lookup decoding ile desteklenmez.
Kaynaklar
- Metin üretimi gecikmesi ve destekli üretim hakkında daha fazla bağlam için Assisted Generation: a new direction toward low-latency text generation blog yazısını okuyun.