Local AI

إتقان الاستدلال المحلي لنماذج اللغة الكبيرة: دليل المطوّر إلى llama.cpp

تشغيل نماذج اللغة الكبيرة على البنية التحتية السحابية مريح، لكنه يأتي مع تنازلات كبيرة: زمن الاستجابة، التكلفة، وخصوصية البيانات. بالنسبة للمطوّرين الذين يبحثون عن التحكم في مجموعة أدوات الذكاء الاصطناعي الخاصة بهم، برز llama.cpp كمعيار ذهبي. بدأ الأمر كنسخة C++ لنموذج LLaMA، وقد تطوّر إلى محرك قوي ومتعدد المنصات لتشغيل نماذج اللغة محليًا بكفاءة مبهرة.

لماذا تختار llama.cpp؟

الجاذبية الرئيسية لـ llama.cpp تكمن في اعتمادياته الحدّية وأدائها العالي. على عكس الإطارات التي تعتمد على مكتبات CUDA الثقيلة أو PyTorch، تم تصميم llama.cpp ليكون خفيف الوزن. يدعم عدة واجهات خلفية (Backends)، بما في ذلك المعالج المركزي (CPU)، وCUDA، وMetal (لأجهزة Mac)، وVulkan. هذا يعني أنه يمكنك تشغيل أحدث النماذج على حاسوب محمول قياسي أو خادم GPU مخصص دون متاعب الإعداد المعقدة.

تشمل الميزات الرئيسية ما يلي:

  • دعم التكميم (Quantization): يقلل حجم النموذج بشكل كبير (مثل 4 بت أو 8 بت) مع فقدان ضئيل في الجودة، مما يجعل من الممكن تشغيل النماذج الكبيرة على الأجهزة الاستهلاكية.
  • متعدد المنصات: يعمل على Linux وmacOS وWindows وحتى Raspberry Pi.
  • توافق مع واجهات برمجة التطبيقات (API): يمكنه محاكاة واجهة OpenAI API، مما يتيح دمجًا سهلًا في التطبيقات الحالية.

التثبيت والإعداد

تثبيت llama.cpp عملية مباشرة. إذا كنت تستخدم نظامًا مشابهًا لـ Unix، يمكنك استنساخ المستودع (Repository) وبنائه من المصدر. تأكد من تثبيت CMake ومترجم C++11.


git clone https://github.com/ggml-org/llama.cpp
cd llama.cpp
cmake -B build
cmake --build build --config Release

للمستخدمين الذين يفضلون الملفات الثنائية الجاهزة أو مديري الحزم، يمكنك تثبيته عبر Homebrew على macOS:


brew install llama.cpp

تشغيل أول عملية استدلال

بمجرد التثبيت، تحتاج إلى ملف نموذج بصيغة GGUF. يمكنك تنزيل نماذج مُكمّمة مسبقًا من Hugging Face. لنفترض أن لديك ملف نموذج باسم llama-2-7b-chunked.gguf.

لإنشاء نص تفاعليًا:


./build/bin/llama-cli -m llama-2-7b-chunked.gguf -p "Explain quantum computing in simple terms:" -n 128 -t 8

شرح الأعلام (Flags):

  • -m: المسار إلى ملف النموذج.
  • -p: الموجه (Prompt).
  • -n: عدد الرموز (Tokens) المراد توليدها.
  • -t: عدد الخيوط (Threads) المراد استخدامها (اضبطها بناءً على أنوية المعالج المركزي لديك).

تقديم واجهة برمجة تطبيقات متوافقة مع OpenAI

إحدى أقوى الميزات هي القدرة على تقديم النموذج عبر واجهة HTTP تحاكي واجهة OpenAI. هذا يتيح لك استبدال استدعاءات السحابة باستدعاءات محلية بتغييرات برمجية ضئيلة.


./build/bin/llama-server -m llama-2-7b-chunked.gguf --port 8080 --host 0.0.0.0

يمكنك بعد ذلك إرسال الطلبات باستخدام مكتبات قياسية مثل requests في Python:


import requests

response = requests.post(
    "http://localhost:8080/completions",
    json={
        "prompt": "What is the capital of France?",
        "max_tokens": 50,
        "temperature": 0.7
    }
)

print(response.json()["choices"][0]["text"])

نصائح التحسين للمطوّرين

  1. عدد الخيوط: للاستدلال على المعالج المركزي (CPU)، اضبط عدد الخيوط -t على عدد الأنوية الفيزيائية، وليس المنطقية، لتجنب عبء الخيوط الفائضة (Hyperthreading).
  2. حجم السياق: استخدم العلم -c لضبط حجم نافذة السياق. السياقات الأكبر تستهلك ذاكرة VRAM/RAM أكثر. ابدأ بـ -c 2048 وزد إذا لزم الأمر.
  3. مستوى التكميم: إذا كانت ذاكرتك محدودة، استخدم نموذجًا مُكمّمًا بدقة 4 بت (Q4_K_M). إذا كانت مواردك وفيرة، فإن دقة 8 بت (Q8_0) توفر دقة أفضل.

الخاتمة

يجعل llama.cpp تطوير الذكاء الاصطناعي المحلي في متناول الجميع من خلال توفير محرك سريع ومرن وخفيف الوزن. سواء كنت تبني روبوت محادثة يركز على الخصوصية، أو تجريّب نماذج مُعدّلة (Fine-tuned)، أو تريد ببساطة استكشاف نماذج اللغة دون تكاليف واجهات برمجة التطبيقات، فإن llama.cpp أداة لا غنى عنها في ترسانة المطوّر. ومع نمو النظام البيئي، توقع دعمًا لمزيد من معماريات النماذج وتحسينات الواجهات الخلفية، مما يعزز دورها بشكل أكبر في مشهد الذكاء الاصطناعي المحلي.

Share: