Transformers documentation
Sohbet temelleri
Sohbet temelleri
Chat modelleri, bir mesaj gönderip yanıt alabileceğiniz sohbet modelleridir. 2023 ortalarından itibaren geliştirilen dil modellerinin çoğu chat modelidir ve “instruct” veya “instruction-tuned” modeller olarak anılabilir. Chat desteklemeyen modeller genellikle “base” veya “pretrained” modeller olarak adlandırılır.
Daha büyük ve yeni modeller genellikle daha yeteneklidir, ancak belirli alanlarda (tıbbi, hukuki metinler, İngilizce dışı diller vb.) uzmanlaşmış modeller bu daha büyük modelleri sıklıkla geride bırakabilir. Kullanım senaryonuza en uygun modeli belirlemenize yardımcı olmak için OpenLLM ve LMSys Chatbot Arena gibi liderlik tablolarını deneyin.
Bu kılavuz, komut satırından Transformers ile sohbet modellerini nasıl hızlıca yükleyeceğinizi, bir sohbeti nasıl oluşturup biçimlendireceğinizi ve TextGenerationPipeline kullanarak nasıl sohbet edeceğinizi gösterir.
chat CLI
Transformers kütüphanesini kurduktan sonra, bir modelle doğrudan komut satırından sohbet edebilirsiniz. Aşağıdaki komut, modelle etkileşimli bir oturum başlatır ve oturumun başında birkaç temel komut listelenir.
Aşağıdaki komutlar için
transformers serve'in çalıştığından emin olun.
transformers chat Qwen/Qwen2.5-0.5B-Instruct

CLI'yi, arg_1=value_1 arg_2=value_2 ... biçiminde, keyfi generate bayraklarıyla başlatabilirsiniz.
transformers chat Qwen/Qwen2.5-0.5B-Instruct do_sample=False max_new_tokens=10
Tüm seçeneklerin listesi için aşağıdaki komutu çalıştırın.
transformers chat -h
Sohbet, AutoClass üzerine inşa edilmiştir ve metin üretimi ile sohbet araçlarını kullanır. Arka planda transformers serve CLI'ını kullanır (belgeler).
TextGenerationPipeline
TextGenerationPipeline, “sohbet modu” içeren yüksek düzeyde bir metin üretme sınıfıdır. Konuşmacı bir model algılandığında ve sohbet istemi doğru biçimlendirildiğinde sohbet modu etkinleştirilir.
Sohbet modelleri, girdi olarak bir mesaj listesini (sohbet geçmişini) kabul eder. Her mesaj, role ve content anahtarlarına sahip bir sözlüktür.
Sohbeti başlatmak için tek bir user mesajı ekleyin. Modelin nasıl davranması gerektiğine dair yönergeler vermek için isteğe bağlı olarak bir system mesajı da dahil edebilirsiniz.
chat = [
{"role": "system", "content": "You are a helpful science assistant."},
{"role": "user", "content": "Hey, can you explain gravity to me?"}
]TextGenerationPipeline oluşturup chat parametresini ona iletin. Büyük modeller için device_map=“auto” ayarını yapmak, modelin daha hızlı yüklenmesine yardımcı olur ve onu otomatik olarak en hızlı kullanılabilir cihaza yerleştirir.
import torch
from transformers import pipeline
pipeline = pipeline(task="text-generation", model="HuggingFaceTB/SmolLM2-1.7B-Instruct", dtype="auto", device_map="auto")
response = pipeline(chat, max_new_tokens=512)
print(response[0]["generated_text"][-1]["content"])Bu işlem başarıyla çalışırsa, modelden bir yanıt görmelisiniz! Sohbeti sürdürmek istiyorsanız, sohbet geçmişini modelin yanıtıyla güncellemeniz gerekir. Bunu, metni chat listesine ekleyerek (assistant rolünü kullanarak) veya en son yanıtı da içeren tam sohbet geçmişini barındıran response[0]["generated_text"] değerini okuyarak yapabilirsiniz.
Modelin yanıtını aldıktan sonra, sohbet geçmişine yeni bir user mesajı ekleyerek konuşmaya devam edebilirsiniz.
chat = response[0]["generated_text"]
chat.append(
{"role": "user", "content": "Woah! But can it be reconciled with quantum mechanics?"}
)
response = pipeline(chat, max_new_tokens=512)
print(response[0]["generated_text"][-1]["content"])Bu süreci tekrarlayarak, modelin bağlam penceresi dolana veya belleğinizin tükenene kadar sohbeti istediğiniz kadar sürdürebilirsiniz.
Performans ve bellek kullanımı
Transformers, modelleri varsayılan olarak tam float32 hassasiyetinde yükler ve 8B'lik bir model için bu ~32GB bellek gerektirir! Bellek kullanımınızı azaltmak için, genellikle bununla eğitilen modellerde bfloat16 kullanan torch_dtype="auto" argümanını kullanın.
Farklı kuantizasyon geri uçları hakkında daha fazla bilgi için Quantization belgelerine başvurun.
Bellek kullanımını daha da düşürmek için modeli bitsandbytes ile 8-bit veya 4-bit olarak kuantize edebilirsiniz. İstediğiniz kuantizasyon ayarlarıyla bir BitsAndBytesConfig oluşturun ve bunu pipeline'ın model_kwargs parametresine iletin. Aşağıdaki örnek bir modeli 8-bit olarak kuantize eder.
from transformers import pipeline, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
pipeline = pipeline(task="text-generation", model="meta-llama/Meta-Llama-3-8B-Instruct", device_map="auto", model_kwargs={"quantization_config": quantization_config})Genel olarak, model boyutu ve performans doğrudan korelasyon içindedir. Daha büyük modeller, her üretilen token için her aktif parametrenin bellekten okunması gerektiğinden, daha fazla bellek gerektirmesinin yanı sıra daha yavaştır. Bu, LLM metin üretimi için bir darboğazdır ve üretim hızını iyileştirmek için ana seçenekler, bir modeli kuantize etmek veya daha yüksek bellek bant genişliğine sahip donanım kullanmaktır. Daha fazla hesaplama gücü eklemek anlamlı bir fayda sağlamaz.
speculative decoding gibi teknikleri de deneyebilirsiniz; bu yöntemde daha küçük bir model, daha büyük model tarafından doğrulanan aday token'ları üretir. Aday token'lar doğruysa, daha büyük model bir seferde birden fazla token üretebilir. Bu, bant genişliği darboğazını önemli ölçüde hafifletir ve üretim hızını artırır.
Update on GitHubMixtral, Qwen2MoE ve GPT-OSS gibi Mixture-of-Expert (MoE) modelleri çok sayıda parametreye sahiptir, ancak her token'ı üretmek için bunların yalnızca küçük bir kısmını “aktif” hale getirir. Sonuç olarak MoE modelleri, genel olarak çok daha düşük bellek bant genişliği gereksinimleri taşır ve aynı boyuttaki standart bir LLM'den daha hızlı olabilir. Ancak spekülatif çözümleme gibi teknikler MoE modellerinde etkisizdir, çünkü her yeni speküle edilen token ile birlikte daha fazla parametre aktif hale gelir.