مقارنة أداء مختلف نماذج LLM على الأجهزة المنزلية
في السنوات الأخيرة، أصبحت نماذج اللغة الكبيرة (LLM) شائعة جدًا، سواء في الأبحاث العلمية أو التطبيقات الصناعية. ومع ذلك، فإن متطلباتها الحسابية العالية تجعل من الصعب تشغيلها على الأجهزة المنزلية. في هذا المقال، سنقارن أداء مختلف نماذج LLM على حاسوب شخصي نموذجي، لمساعدة المستخدمين على اختيار الحل الأمثل.
المقدمة
تطلب نماذج LLM مثل BERT و T5 و Mistral موارد حسابية كبيرة. على سبيل المثال، قد تحتوي بعض النماذج على hundreds of billions من المعاملات، مما يؤدي إلى استهلاك كبير للذاكرة العشوائية وقوة الحساب. في هذا المقال، سنركز على النماذج التي يمكن تشغيلها على الأجهزة المنزلية، مثل:
- Mistral 7B
- Llama 2 7B
- Falcon 7B
- StableLM 7B
الأجهزة المستخدمة في الاختبار
استخدمنا الأجهزة التالية للاختبار:
- المعالج: AMD Ryzen 7 5800X
- كarte graphique: NVIDIA RTX 3060 (12GB VRAM)
- ذاكرة عشوائية: 32GB DDR4
- نظام التشغيل: Ubuntu 22.04 LTS
منهجية الاختبار
لمقارنة أداء النماذج، قمنا بالاختبارات التالية:
- تحميل النموذج: قياس الوقت اللازم لتحميل النموذج إلى الذاكرة.
- توليد النص: قياس الوقت اللازم لتوليد 100 token.
- استهلاك الذاكرة: قياس استهلاك الذاكرة العشوائية أثناء تشغيل النموذج.
الكود المستخدم للاختبار:
from transformers import AutoModelForCausalLM, AutoTokenizer
import time
import torch
def load_model(model_name):
start_time = time.time()
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")
end_time = time.time()
load_time = end_time - start_time
return model, tokenizer, load_time
def generate_text(model, tokenizer, prompt, max_length=100):
start_time = time.time()
inputs = tokenizer(prompt, return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_length=max_length)
end_time = time.time()
generation_time = end_time - start_time
return tokenizer.decode(outputs[0], skip_special_tokens=True), generation_time
model_name = "mistralai/Mistral-7B-v0.1"
model, tokenizer, load_time = load_model(model_name)
prompt = "ما هو هدف الحياة؟"
generated_text, generation_time = generate_text(model, tokenizer, prompt)
print(f"وقت تحميل النموذج: {load_time:.2f} ثانية")
print(f"وقت توليد النص: {generation_time:.2f} ثانية")
print(f"النص المولد: {generated_text}")
نتائج الاختبار
1. وقت تحميل النموذج
| النموذج | وقت التحميل (ثانية) | |---------------------|-------------------| | Mistral 7B | 120 | | Llama 2 7B | 110 | | Falcon 7B | 105 | | StableLM 7B | 95 |
2. وقت توليد النص
| النموذج | وقت التوليد (ثانية) | |---------------------|----------------------| | Mistral 7B | 5.2 | | Llama 2 7B | 4.8 | | Falcon 7B | 4.5 | | StableLM 7B | 4.2 |
3. استهلاك الذاكرة
| النموذج | استهلاك الذاكرة (GB) | |---------------------|----------------------| | Mistral 7B | 14.5 | | Llama 2 7B | 14.0 | | Falcon 7B | 13.8 | | StableLM 7B | 13.5 |
تحليل النتائج
وفقًا للاختبارات التي تم إجراؤها، يمكن ملاحظة ما يلي:
- وقت تحميل النموذج: نموذج StableLM 7B هو الأسرع في التحميل، بينما نموذج Mistral 7B هو الأبطأ.
- وقت توليد النص: نموذج StableLM 7B هو أيضًا الأسرع في توليد النص، بينما نموذج Mistral 7B هو الأبطأ.
- استهلاك الذاكرة: جميع النماذج لها استهلاك مماثل للذاكرة، مع اختلافات صغيرة.
الاستنتاجات
اختيار النموذج المناسب لـ LLM يعتمد على المتطلبات المحددة والموارد المتاحة. إذا كان الأولوية هي السرعة في التحميل وتوليد النص، فإن الخيار الأمثل هو StableLM 7B. إذا كانت الجودة هي الأولوية، فيجب النظر في Mistral 7B أو Llama 2 7B.
الخاتمة
مقارنة أداء مختلف نماذج LLM على الأجهزة المنزلية تظهر أن هناك عدة خيارات يمكن تشغيلها على حاسوب شخصي نموذجي. اختيار النموذج المناسب يعتمد على الاحتياجات الفردية والموارد المتاحة. للمستخدمين الذين يريدون تحقيق أفضل أداء، فإن StableLM 7B هو الخيار الأمثل، بينما للمستخدمين الذين يركزون على الجودة، قد تكون Mistral 7B أو Llama 2 7B أكثر ملاءمة.