في هذه المدونة، سنستعرض قرارات التصميم وراء النموذج، وكيف يكون النموذج تنافسيًا فيما يتعلق بنماذج SoTA الأخرى الموجودة، وكيفية استخدامه ضمن النظام البيئي Hugging Face.
أول نموذج مامبا نقي واسع النطاق للأغراض العامة
المحولات، القائمة على آلية الانتباه، هي البنية السائدة المستخدمة في جميع أقوى نماذج اللغات الكبيرة اليوم. ومع ذلك، فإن آلية الانتباه محدودة بشكل أساسي في معالجة التسلسلات الكبيرة بسبب زيادة تكاليف الحوسبة والذاكرة مع طول التسلسل. حاولت العديد من البنى البديلة، ولا سيما نماذج لغة الفضاء الحكومية (SSLMs)، معالجة قيود قياس التسلسل ولكنها تراجعت في الأداء مقارنة بمحولات SoTA.
مع Falcon Mamba، أثبتنا أنه يمكن بالفعل التغلب على قيود قياس التسلسل دون خسارة في الأداء. يعتمد Falcon Mamba على بنية Mamba الأصلية المقترحة في عام مامبا: نمذجة التسلسل الزمني الخطي مع مساحات الحالة الانتقائية، مع إضافة طبقات تسوية RMS إضافية لضمان تدريب مستقر على نطاق واسع. يضمن هذا الاختيار للهندسة المعمارية أن Falcon Mamba:
- يمكنه معالجة تسلسلات ذات طول عشوائي دون أي زيادة في سعة تخزين الذاكرة، على وجه الخصوص، تركيبها على وحدة معالجة الرسومات A10 واحدة بسعة 24 جيجابايت.
- يستغرق إنشاء رمز مميز جديدًا وقتًا ثابتًا، بغض النظر عن حجم السياق (راجع هذا القسم)
التدريب النموذجي
تم تدريب Falcon Mamba باستخدام حوالي 5500GT من البيانات، والتي تتألف بشكل أساسي من بيانات RefinedWeb مع إضافة بيانات فنية عالية الجودة وبيانات التعليمات البرمجية من المصادر العامة. لقد استخدمنا معدل التعلم الثابت في معظم فترات التدريب، متبوعًا بمرحلة تناقص معدل التعلم القصيرة نسبيًا. وفي هذه المرحلة الأخيرة، أضفنا أيضًا جزءًا صغيرًا من البيانات المنسقة عالية الجودة لتعزيز أداء النموذج بشكل أكبر.
التقييمات
نقوم بتقييم نموذجنا وفقًا لجميع معايير إصدار لوحة المتصدرين الجديدة باستخدام lm-evaluation-harness الحزمة ثم قم بتطبيع نتائج التقييم من خلال تطبيع نقاط Hugging Face.
model name |
IFEval |
BBH |
MATH LvL5 |
GPQA |
MUSR |
MMLU-PRO |
Average |
|---|---|---|---|---|---|---|---|
| نماذج SSM نقية | |||||||
Falcon Mamba-7B |
33.36 | 19.88 | 3.63 | 8.05 | 10.86 | 14.47 | 15.04 |
TRI-ML/mamba-7b-rw* |
22.46 | 6.71 | 0.45 | 1.12 | 5.51 | 1.69 | 6.25 |
| نماذج SSM الهجينة | |||||||
recurrentgemma-9b |
30.76 | 14.80 | 4.83 | 4.70 | 6.60 | 17.88 | 13.20 |
Zyphra/Zamba-7B-v1* |
24.06 | 21.12 | 3.32 | 3.03 | 7.74 | 16.02 | 12.55 |
| نماذج المحولات | |||||||
Falcon2-11B |
32.61 | 21.94 | 2.34 | 2.80 | 7.53 | 15.44 | 13.78 |
Meta-Llama-3-8B |
14.55 | 24.50 | 3.25 | 7.38 | 6.24 | 24.55 | 13.41 |
Meta-Llama-3.1-8B |
12.70 | 25.29 | 4.61 | 6.15 | 8.98 | 24.95 | 13.78 |
Mistral-7B-v0.1 |
23.86 | 22.02 | 2.49 | 5.59 | 10.68 | 22.36 | 14.50 |
Mistral-Nemo-Base-2407 (12B) |
16.83 | 29.37 | 4.98 | 5.82 | 6.52 | 27.46 | 15.08 |
gemma-7B |
26.59 | 21.12 | 6.42 | 4.92 | 10.98 | 21.64 | 15.28 |
نقوم أيضًا بتقييم نموذجنا وفقًا لمعايير الإصدار الأول من LLM Leaderboard باستخدام lighteval.
model name |
ARC |
HellaSwag |
MMLU |
Winogrande |
TruthfulQA |
GSM8K |
Average |
|---|---|---|---|---|---|---|---|
| نماذج SSM نقية | |||||||
Falcon Mamba-7B* |
62.03 | 80.82 | 62.11 | 73.64 | 53.42 | 52.54 | 64.09 |
TRI-ML/mamba-7b-rw* |
51.25 | 80.85 | 33.41 | 71.11 | 32.08 | 4.70 | 45.52 |
| نماذج SSM الهجينة | |||||||
recurrentgemma-9b** |
52.00 | 80.40 | 60.50 | 73.60 | 38.60 | 42.60 | 57.95 |
Zyphra/Zamba-7B-v1* |
56.14 | 82.23 | 58.11 | 79.87 | 52.88 | 30.78 | 60.00 |
| نماذج المحولات | |||||||
Falcon2-11B |
59.73 | 82.91 | 58.37 | 78.30 | 52.56 | 53.83 | 64.28 |
Meta-Llama-3-8B |
60.24 | 82.23 | 66.70 | 78.45 | 42.93 | 45.19 | 62.62 |
Meta-Llama-3.1-8B |
58.53 | 82.13 | 66.43 | 74.35 | 44.29 | 47.92 | 62.28 |
Mistral-7B-v0.1 |
59.98 | 83.31 | 64.16 | 78.37 | 42.15 | 37.83 | 60.97 |
gemma-7B |
61.09 | 82.20 | 64.56 | 79.01 | 44.79 | 50.87 | 63.75 |
للنماذج التي تحمل علامة نجم، قمنا بتقييم المهام داخليًا، بينما بالنسبة للنماذج المميزة باثنين النجوم، تم أخذ النتائج من الورق أو البطاقة النموذجية.
معالجة تسلسلات كبيرة
باتباع نماذج SSM ذات الكفاءة النظرية في معالجة التسلسلات الكبيرة، نقوم بإجراء مقارنة بين استخدام الذاكرة وإنتاجية التوليد بين Falcon Mamba ونماذج المحولات الشائعة باستخدام مكتبة المعيار الأمثل. للحصول على مقارنة عادلة، قمنا بإعادة قياس حجم المفردات لجميع نماذج المحولات لتتناسب مع Falcon Mamba نظرًا لأن لها تأثيرًا كبيرًا على متطلبات الذاكرة للنموذج.
قبل الانتقال إلى النتائج، دعونا أولاً نناقش الفرق بين أجزاء المطالبة (الملء المسبق) والأجزاء التي تم إنشاؤها (فك التشفير) من التسلسل. كما سنرى، فإن تفاصيل التعبئة المسبقة أكثر أهمية بالنسبة لنماذج مساحة الحالة منها بالنسبة لنماذج المحولات. عندما يقوم المحول بإنشاء الرمز المميز التالي، فإنه يحتاج إلى الاهتمام بمفاتيح وقيم جميع الرموز المميزة السابقة في السياق. وهذا يعني القياس الخطي لكل من متطلبات الذاكرة ووقت الإنشاء مع طول السياق. يهتم نموذج مساحة الحالة بحالته المتكررة ويخزنها فقط، وبالتالي لا يحتاج إلى ذاكرة إضافية أو وقت لإنشاء تسلسلات كبيرة. في حين أن هذا يفسر الميزة المزعومة لأجهزة SSM على المحولات في مرحلة فك التشفير، فإن مرحلة التعبئة المسبقة تتطلب جهدًا إضافيًا للاستفادة الكاملة من بنية SSM.
تتمثل الطريقة القياسية للتعبئة المسبقة في معالجة المطالبة بأكملها بالتوازي للاستفادة الكاملة من وحدة معالجة الرسومات. يتم استخدام هذا الأسلوب في مكتبة المعيار الأمثل وسوف نشير إليه على أنه تعبئة مسبقة متوازية. يحتاج الملء المسبق المتوازي إلى تخزين الحالات المخفية لكل رمز مميز في الموجه في الذاكرة. بالنسبة للمحولات، تهيمن ذاكرة التخزين المؤقت KV على هذه الذاكرة الإضافية. بالنسبة لنماذج SSM، لا يلزم وجود تخزين مؤقت، وتصبح الذاكرة المخصصة لتخزين الحالات المخفية هي المكون الوحيد المتناسب مع طول الموجه. ونتيجة لذلك، سيتم قياس متطلبات الذاكرة بطول فوري، وستفقد نماذج SSM القدرة على معالجة تسلسلات طويلة عشوائية، على غرار المحولات.
أحد البدائل للتعبئة المسبقة المتوازية هو معالجة الرمز المميز للمطالبة برمز مميز، وهو ما سنشير إليه باسم التعبئة المسبقة التسلسلية. على غرار التوازي التسلسلي، يمكن أيضًا إجراؤه على أجزاء أكبر من الموجه بدلاً من الرموز الفردية لاستخدام أفضل لوحدة معالجة الرسومات. في حين أن التعبئة المسبقة التسلسلية لا معنى لها بالنسبة للمحولات، إلا أنها تعيد إمكانية معالجة المطالبات الطويلة التعسفية بواسطة نماذج SSM.
مع أخذ هذه الملاحظات في الاعتبار، قمنا أولاً باختبار أكبر طول تسلسلي يمكن احتواؤه على وحدة معالجة رسومات واحدة A10 بسعة 24 جيجابايت، ووضع النتائج في الشكل أدناه. حجم الدفعة ثابت عند 1، ونحن نستخدم دقة float32. حتى بالنسبة للتعبئة المسبقة المتوازية، يمكن لـ Falcon Mamba أن يناسب تسلسلات أكبر من المحول، بينما في التعبئة المسبقة التسلسلية، فإنه يفتح إمكاناته الكاملة ويمكنه معالجة موجه طويل عشوائيًا
بعد ذلك، نقوم بقياس إنتاجية التوليد في إعداد بمطالبة بطول 1 وما يصل إلى 130 ألف رمز مميز تم إنشاؤه، باستخدام حجم الدُفعة 1 ووحدة معالجة الرسومات H100. تم الإبلاغ عن النتائج في الشكل أدناه. نلاحظ أن Falcon Mamba الخاص بنا يقوم بإنشاء جميع الرموز المميزة بإنتاجية ثابتة ودون أي زيادة في ذروة ذاكرة CUDA. بالنسبة لنموذج المحول، تنمو ذروة الذاكرة، وتتباطأ سرعة التوليد مع زيادة عدد الرموز المميزة التي تم إنشاؤها.

كيفية استخدامه ضمن محولات Hugging Face؟
ستكون بنية Falcon Mamba متاحة في الإصدار التالي من مكتبة محولات Hugging Face (>4.45.0). لاستخدام النموذج تأكد من تثبيت أحدث إصدار من محولات Hugging Face أو تثبيت المكتبة من المصدر.
يتوافق Falcon Mamba مع معظم عروض Hugging Face لواجهات برمجة التطبيقات، والتي تعرفها، مثل AutoModelForCausalLM أو pipeline :
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "tiiuae/falcon-mamba-7b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="auto", device_map="auto")
inputs = tokenizer("Hello world, today", return_tensors="pt").to(0)
output = model.generate(**inputs, max_new_tokens=100, do_sample=True)
print(tokenizer.decode(Output[0], skip_special_tokens=True))
وبما أن النموذج كبير، فإنه يدعم أيضًا ميزات مثل bitsandbytes التكميم لتشغيل النموذج على قيود ذاكرة GPU الأصغر، على سبيل المثال:
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
model_id = "tiiuae/falcon-mamba-7b"
tokenizer = AutoTokenizer.from_pretrained(model_id)
quantization_config = BitsAndBytesConfig(load_in_4bit=True)
model = AutoModelForCausalLM.from_pretrained(model_id, quantization_config=quantization_config)
inputs = tokenizer("Hello world, today", return_tensors="pt").to(0)
output = model.generate(**inputs, max_new_tokens=100, do_sample=True)
print(tokenizer.decode(output[0], skip_special_tokens=True))
يسعدنا أيضًا أن نقدم الإصدار المضبوط للتعليمات من Falcon Mamba، والذي تم ضبطه بدقة باستخدام 5 مليارات رمز إضافي من بيانات الضبط الدقيق الخاضعة للإشراف (SFT). يعزز هذا التدريب الممتد قدرة النموذج على أداء المهام التعليمية بدقة وفعالية أفضل. يمكنك تجربة إمكانيات نموذج التعليمات من خلال العرض التوضيحي الخاص بنا، والمتوفر هنا. بالنسبة لقالب الدردشة نستخدم التنسيق التالي:
<|im_start|>user
prompt<|im_end|>
<|im_start|>assistant
يمكنك أيضًا استخدام الإصدار المحول 4 بت مباشرةً من النموذج الأساسي ونموذج التعليمات. تأكد من إمكانية الوصول إلى وحدة معالجة الرسومات (GPU) المتوافقة معها bitsandbytes مكتبة لتشغيل النموذج الكمي.
يمكنك أيضًا الاستفادة من الاستدلال الأسرع باستخدام torch.compile; ببساطة اتصل model = torch.compile(model) بمجرد تحميل النموذج.
شكر وتقدير
يود مؤلفو منشور المدونة هذا أن يشكروا فريق Hugging Face على دعمهم السلس وتكاملهم مع نظامهم البيئي، على وجه الخصوص.
يود المؤلفون أيضًا أن يشكروا Tri Dao وAlbert Gu على تنفيذ هندسة Mamba وفتحها للمجتمع.