Transformers documentation
أساسيات الدردشة
أساسيات الدردشة
نماذج الدردشة هي نماذج محادثة يمكنك إرسال رسالة إليها واستلام رد. معظم نماذج اللغة منذ منتصف عام 2023 هي نماذج دردشة وقد يُشار إليها بنماذج "التوجيه" أو "المُحسَّنة بالتوجيه". النماذج التي لا تدعم الدردشة غالبًا ما يُشار إليها بنماذج "الأساسية" أو "المسبقة التدريب".
النماذج الأكبر والأحدث عادةً ما تكون أكثر قدرة، لكن النماذج المتخصصة في مجالات معينة (النصوص الطبية، النصوص القانونية، اللغات غير الإنجليزية، إلخ) يمكنها غالبًا أن تتفوق على هذه النماذج الأكبر. جرّب لوحات الصدارة مثل OpenLLM وLMSys Chatbot Arena لمساعدتك في تحديد أفضل نموذج يناسب حالتك.
يُظهر لك هذا الدليل كيفية تحميل نماذج الدردشة بسرعة في Transformers من سطر الأوامر، وكيفية بناء وتنسيق محادثة، وكيفية الدردشة باستخدام TextGenerationPipeline.
واجهة سطر الأوامر للدردشة
بعد أن ثبّتّ Transformers، يمكنك الدردشة مع نموذج مباشرةً من سطر الأوامر. يُطلق الأمر أدناه جلسة تفاعلية مع نموذج، مع سرد بعض الأوامر الأساسية في بداية الجلسة.
بالنسبة للأوامر التالية، يرجى التأكد من أن
transformers serveقيد التشغيل.
transformers chat Qwen/Qwen2.5-0.5B-Instruct

يمكنك تشغيل واجهة سطر الأوامر بأعلام generate اختيارية، بالصيغة arg_1=value_1 arg_2=value_2 ...
transformers chat Qwen/Qwen2.5-0.5B-Instruct do_sample=False max_new_tokens=10
للاطلاع على القائمة الكاملة للخيارات، نفّذ الأمر أدناه.
transformers chat -h
يُنفَّذ الدردشة فوق AutoClass، مستخدماً أدوات من text generation وchat. ويعتمد في جوهره على واجهة سطر الأوامر transformers serve (التوثيق).
TextGenerationPipeline
TextGenerationPipeline هو فئة عالية المستوى لتوليد النص تتضمن “وضع المحادثة”. يتم تفعيل وضع المحادثة عند اكتشاف نموذج محادثة وأن يكون موجه المحادثة منسقًا بشكل صحيح.
تستقبل نماذج المحادثة قائمةً بالرسائل (سجل المحادثة) كمدخل. كل رسالة هي قاموس بمفتاحَي role وcontent.
لبدء المحادثة، أضف رسالة user واحدة. يمكنك أيضًا تضمين رسالة system اختيارية لتوجيه النموذج حول كيفية التصرف.
chat = [
{"role": "system", "content": "You are a helpful science assistant."},
{"role": "user", "content": "Hey, can you explain gravity to me?"}
]أنشئ TextGenerationPipeline ومرّر chat إليه. بالنسبة للنماذج الكبيرة، يساعد تعيين device_map=“auto” في تحميل النموذج بشكل أسرع ويضعه تلقائياً على أسرع جهاز متاح.
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"])إذا نجح هذا، يجب أن ترى ردًا من النموذج! إذا كنت ترغب في مواصلة المحادثة،
فستحتاج إلى تحديث سجل المحادثة برد النموذج. يمكنك القيام بذلك إما بإضافة النص
إلى chat (باستخدام دور assistant)، أو بقراءة response[0]["generated_text"]، والذي يحتوي
على سجل المحادثة الكامل، بما في ذلك أحدث رد.
بمجرد حصولك على استجابة النموذج، يمكنك مواصلة المحادثة عن طريق إضافة رسالة user جديدة إلى سجل المحادثة.
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"])من خلال تكرار هذه العملية، يمكنك مواصلة المحادثة طالما شئت، على الأقل حتى يستنفد النموذج نافذة السياق أو حتى تنفد الذاكرة.
الأداء واستهلاك الذاكرة
تحمّل مكتبة Transformers النماذج بدقة float32 الكاملة افتراضياً، ولنموذج بحجم 8B، يتطلب ذلك حوالي 32GB من الذاكرة! استخدم الحجة torch_dtype="auto"، والتي تستخدم عادةً bfloat16 للنماذج التي تم تدريبها بهذه الدقة، لتقليل استهلاك الذاكرة.
راجع وثائق Quantization لمزيد من المعلومات حول أنظمة الكمية المختلفة المتاحة.
لخفض استهلاك الذاكرة بشكل أكبر، يمكنك تكميم النموذج إلى 8 بت أو 4 بت باستخدام bitsandbytes. أنشئ BitsAndBytesConfig بإعدادات التكميم المطلوبة وقم بتمريره إلى معامل model_kwargs الخاص بالخطوط الأنابيب. يكمم المثال أدناه النموذج إلى 8 بت.
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})بشكل عام، توجد علاقة طردية مباشرة بين حجم النموذج وأداؤه. النماذج الأكبر حجمًا تكون أبطأ، فضلًا عن أنها تتطلب ذاكرة أكبر، لأن كل معامل نشط يجب قراءته من الذاكرة لكل رمز يتم توليده. يُعد هذا عنق زجاجة في توليد النصوص بواسطة نماذج اللغة الكبيرة (LLM)، والخيارات الرئيسية لتحسين سرعة التوليد هي إما تكميم النموذج (quantize) أو استخدام أجهزة ذات عرض نطاق ذاكرة أعلى. إضافة المزيد من قوة الحوسبة لا تساعد بشكل جوهري.
يمكنك أيضًا تجربة تقنيات مثل التفكيك التخميني، حيث يولّد نموذج أصغر رموزًا مرشحة يتم التحقق منها بواسطة النموذج الأكبر. إذا كانت الرموز المرشحة صحيحة، يمكن للنموذج الأكبر توليد أكثر من رمز في كل مرة. وهذا يخفف بشكل كبير من عنق الزجاجة في عرض النطاق الترددي ويحسن سرعة التوليد.
Update on GitHubتتميز نماذج مزيج الخبراء (Mixture-of-Expert) مثل Mixtral وQwen2MoE وGPT-OSS بعدد كبير من المعاملات، لكنها تُفعّل جزءًا صغيرًا منها فقط لتوليد كل رمز. ونتيجةً لذلك، تتطلب نماذج MoE عمومًا عرض نطاق ذاكرة أقل بكثير، وقد تكون أسرع من نموذج لغة كبير عادي بنفس الحجم. ومع ذلك، فإن تقنيات مثل فك التشفير التخميني (speculative decoding) غير فعالة مع نماذج MoE، لأن عدد المعاملات المُفعّلة يزداد مع كل رمز تخميني جديد.