
مع تزايد استخدام النماذج اللغوية الكبيرة مفتوحة المصدر (LLMs)، أصبح بإمكاننا الآن تشغيل هذه النماذج بكفاءة على الأجهزة المحلية، مما يمثل ثورة في هذا المجال. في هذا الدليل، سنتعرف على llama.cpp، مكتبة مفتوحة المصدر مكتوبة بلغة C++، تمكنك من تشغيل LLMs مثل Llama 3 محليًا. سواء كنت مطورًا أو شغوفًا بتعلم الآلة، سيساعدك هذا الدليل خطوة بخطوة في بدء استخدام llama.cpp، وهي مكتبة سهلة التثبيت تعمل على تحسين استدلال LLM على جهازك، سواء كان جهاز كمبيوتر مكتبي أو بنية تحتية قائمة على السحابة.
ما الذي تحتاجه للبدء
قبل الخوض في التفاصيل، من المهم التأكد من جاهزية جهازك. للمتابعة مع هذا الدليل، يُوصى بوجود ذاكرة VRAM بحجم 8 جيجابايت على الأقل. ومع ذلك، يوفر llama.cpp مرونة مع التحسينات، خاصة فيما يتعلق بتقليل حجم النموذج، وهو ما سنتحدث عنه لاحقًا.
يعمل هذا الدليل مع نماذج مثل Llama-3–8B-Instruct، لكن يمكنك اختيار نماذج أخرى متاحة على Hugging Face.
فهم llama.cpp
إذًا، ما هو llama.cpp؟ ببساطة، هو مكتبة خفيفة بلغة C++ مصممة لتبسيط عملية تشغيل النماذج اللغوية الكبيرة محليًا. يتيح استدلالًا فعالًا على أنواع مختلفة من الأجهزة، بدءًا من أجهزة الكمبيوتر المكتبية الأساسية وصولًا إلى الخوادم السحابية عالية الأداء.
مع llama.cpp، ستستفيد من عدة ميزات:
- أداء عالي: يوفر استدلالًا متطورًا للنماذج الكبيرة.
- سهولة التثبيت: تثبيت llama.cpp بسيط ولا يتطلب أي تبعيات خارجية.
- دعم لتقليل حجم النموذج: يقلل من حجم النموذج من خلال تحويله إلى دقة أقل، مما يساعد في تشغيل النماذج على الأجهزة التي تحتوي على ذاكرة محدودة.
- التوافق مع الأنظمة المختلفة: يعمل على أنظمة MacOS وWindows وLinux، ويدعم Docker وFreeBSD.
- استخدام فعال للموارد: يستفيد llama.cpp بشكل كامل من موارد وحدة المعالجة المركزية ووحدة معالجة الرسومات، مما يجعل الاستدلال الهجين ممكنًا.
التحديات التي قد تواجهها
بالرغم من أن llama.cpp أداة رائعة، إلا أنه ليس بدون تحديات:
- وثائق محدودة: نظرًا لأنه مفتوح المصدر، قد تكون الوثائق المتاحة في بعض الأحيان غير كافية. ومع ذلك، تُعدّ المجتمع النشط موردًا ممتازًا.
- خبرة تقنية: إعداد وتشغيل النماذج، خصوصًا مع التكوينات المخصصة، قد يكون معقدًا قليلًا، خاصة للمستخدمين الجدد في C++ أو بنية تعلم الآلة.
دليل التثبيت خطوة بخطوة
لنبدأ الآن في عملية التثبيت والإعداد حتى تتمكن من تشغيل llama.cpp والنموذج Llama 3.
1. استنساخ المستودع
أولًا، ستحتاج إلى تنزيل مستودع llama.cpp من GitHub. يمكنك القيام بذلك باستخدام الأوامر التالية:
$ git clone https://github.com/ggerganov/llama.cpp
$ cd llama.cpp
2. بناء llama.cpp
بعد ذلك، ستحتاج إلى بناء المشروع. يختلف عملية البناء قليلاً حسب ما إذا كنت تستخدم MacOS أو Windows.
لنظام MacOS، مع دعم Metal، يمكنك تشغيل الأمر التالي:
$ make llama-server
أو استخدام CMake:
$ cmake -B build
$ cmake --build build --config Release
لنظام Windows، مع دعم CUDA، تكون الأوامر مختلفة قليلاً:
C:\Users\Bob> make llama-server LLAMA_CUDA=1
أو باستخدام CMake:
C:\Users\Bob> cmake -B build -DLLAMA_CUDA=ON
C:\Users\Bob> cmake --build build --config Release
أو قم بتنزيل النسخة الجاهزة من الصفحة الرسمية:
بمجرد الانتهاء، ستكون جاهزًا لبدء استخدام النموذج.
تنزيل وإعداد النموذج
في هذا المثال، سنستخدم النموذج Meta-Llama-3–8B-Instruct، على الرغم من أنك يمكنك تكييف هذا لأي نموذج آخر تفضله.
1. تثبيت CLI Hugging Face
لبدء الأمر، قم بتثبيت واجهة سطر الأوامر الخاصة بـ Hugging Face:
$ pip install -U "huggingface_hub[cli]"
قم بإنشاء حساب على Hugging Face إذا لم يكن لديك واحد، وقم بإنشاء رمز الوصول الخاص بك من صفحة الإعدادات. ستحتاج إلى ذلك للوصول إلى النماذج.
2. تسجيل الدخول إلى Hugging Face
سجل دخولك باستخدام بيانات Hugging Face الخاصة بك:
$ huggingface-cli login
بمجرد تسجيل الدخول، اقبل شروط النموذج Llama-3–8B-Instruct وانتظر الموافقة على الوصول.
3. تنزيل النموذج
لديك خياران رئيسيان عند تنزيل النموذج: غير مقلل الحجم أو GGUF مقلل الحجم.
- الخيار 1: نموذج غير مقلل الحجم
لتنزيل النموذج غير مقلل الحجم:
$ huggingface-cli download meta-llama/Meta-Llama-3-8B-Instruct --exclude "original/*" --local-dir models/Meta-Llama-3-8B-Instruct
بعد التنزيل، ستحتاج إلى تثبيت التبعيات الخاصة بـ Python وتحويل النموذج إلى تنسيق GGUF:
$ python -m pip install -r requirements.txt
$ python convert-hf-to-gguf.py models/Meta-Llama-3-8B-Instruct
- الخيار 2: نموذج مقلل الحجم
إذا كنت تعمل مع قيود الأجهزة، يمكنك تنزيل نسخة مقللة الحجم مباشرةً:
$ huggingface-cli download path_to_gguf_model --exclude "original/*" --local-dir models/Meta-Llama-3-8B-Instruct
استخدام التقليل من حجم النموذج لتحسين الأجهزة
يتيح لك تقليل حجم النموذج تشغيله على أجهزة ذات ذاكرة أقل، مثل الأنظمة التي تحتوي على أقل من 16 جيجابايت من VRAM. من خلال تقليل دقة أوزان النموذج من 16 بت إلى 4 بت، يمكنك توفير الكثير من الذاكرة دون التضحية بالأداء بشكل كبير.
لتحويل النموذج:
$ ./llama-quantize ./models/Meta-Llama-3-8B-Instruct/ggml-model-f16.gguf ./models/Meta-Llama-3-8B-Instruct/ggml-model-Q4_K_M.gguf Q4_K_M
سيقوم هذا بإنشاء نموذج مقلل الحجم جاهز للاستدلال المحلي.
تشغيل خادم llama
بمجرد إعداد النموذج، يمكنك تشغيل خادم llama للتعامل مع طلبات HTTP، مما يسمح لك بالتفاعل مع النموذج باستخدام واجهات برمجة التطبيقات القياسية.
لنظام MacOS:
$ ./llama-server -m models/Meta-Llama-3-8B-Instruct/ggml-model-Q4_K_M.gguf -c 2048
لنظام Windows، استخدم:
C:\Users\Bob> llama-server.exe -m models\\Meta-Llama-3-8B-Instruct\\ggml-model-Q4_K_M.gguf -c 2048
الآن، يمكنك بدء إرسال الطلبات إلى http://localhost:8080
.
إنشاء شات بوت باستخدام Python
يمكنك أيضًا إنشاء شات بوت بسيط بلغة Python للتفاعل مع النموذج. إليك مثال بسيط لإرسال الطلبات إلى خادم llama:
import requests
import json
def get_response(server_url, messages, temperature=0.7, max_tokens=4096, stream=True):
data = {
"messages": messages,
"temperature": temperature,
"max_tokens": max_tokens,
"stream": stream,
}
response = requests.post(f"{server_url}/v1/chat/completions", json=data)
return response.json()
def chatbot(server_url):
messages = [{"role": "system", "content": "You are a helpful assistant."}]
while True:
user_input = input("You: ")
if user_input.lower() == "exit":
break
messages.append({"role": "user", "content": user_input})
print("Assistant: ", get_response(server_url, messages))
if __name__ == "__main__":
chatbot("http://localhost:8080")
ينشئ هذا البرنامج النصي البسيط شات بوت يتواصل مع خادم llama لتوليد الردود.
الخلاصة:
يعد استخدام llama.cpp لتشغيل النماذج اللغوية الكبيرة مثل Llama 3 محليًا حلاً قويًا وفعالًا، خاصة عندما تكون هناك حاجة إلى استدلال عالي الأداء. على الرغم من تعقيده، يوفر llama.cpp مرونة مع دعم متعدد الأنظمة، وتقليل حجم النموذج، وتسريع الأجهزة. على الرغم من أن الأمر قد يمثل تحديًا للمبتدئين، فإن المجتمع المتنامي والميزات الواسعة تجعله خيارًا مثاليًا للمطورين والباحثين على حد سواء.
بالنسبة لأولئك المستعدين للغوص في العمق، يقدم llama.cpp إمكانيات لا حصر لها لاستدلال LLM محليًا أو في السحابة.