Local AI

تسلط بر استنتاج محلی LLM: راهنمای توسعه‌دهندگان برای llama.cpp

اجرای مدل‌های زبانی بزرگ بر زیرساخت ابری راحت است، اما با معضلات مهمی همراه است: تأخیر، هزینه و حریم خصوصی داده. برای توسعه‌دهندگانی که به دنبال کنترل بر استک هوش مصنوعی خود هستند، llama.cpp به عنوان استاندارد طلایی ظاهر شده است. این ابزار که در اصل یک پورت C++ از مدل LLaMA بود، به یک موتور قدرتمند و چندسکویی برای اجرای محلی LLMها با کارایی چشمگیر تکامل یافته است.

چرا llama.cpp را انتخاب کنیم؟

جذابیت اصلی llama.cpp وابستگی‌های حداقلی و عملکرد بالای آن است. برخلاف چارچوب‌هایی که به کتابخانه‌های سنگین CUDA یا PyTorch وابسته هستند، llama.cpp برای سبک‌وزن بودن طراحی شده است. این ابزار از چندین بک‌اند پشتیبانی می‌کند، از جمله CPU، CUDA، Metal (برای مک) و Vulkan. این به این معنی است که می‌توانید مدل‌های پیشرفته را روی یک لپ‌تاپ استاندارد یا یک سرور GPU اختصاصی بدون دردسرهای پیچیده راه‌اندازی اجرا کنید.

ویژگی‌های کلیدی عبارتند از:

  • پشتیبانی از کوانتیزاسیون: کاهش قابل توجه اندازه مدل (مثلاً ۴ بیتی یا ۸ بیتی) با افت حداقلی در کیفیت، که اجرای مدل‌های بزرگ روی سخت‌افزار مصرف‌کننده را ممکن می‌سازد.
  • چندسکویی: کار می‌کند روی Linux، macOS، Windows و حتی Raspberry Pi.
  • سازگاری API: می‌تواند API OpenAI را شبیه‌سازی کند و امکان یکپارچه‌سازی آسان در برنامه‌های موجود را فراهم می‌کند.

نصب و راه‌اندازی

نصب llama.cpp ساده است. اگر روی یک سیستم شبیه Unix هستید، می‌توانید مخزن را کلون کرده و آن را از سورس بسازید. مطمئن شوید که 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

تفکیک پرچم‌ها:

  • -m: مسیر به فایل مدل.
  • -p: پرامپت.
  • -n: تعداد توکن‌هایی که باید تولید شوند.
  • -t: تعداد رشته‌هایی که باید استفاده شوند (بر اساس هسته‌های CPU خود تنظیم کنید).

ارائه یک API سازگار با OpenAI

یکی از قدرتمندترین ویژگی‌ها، توانایی ارائه مدل از طریق یک API 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 را بر اساس تعداد هسته‌های فیزیکی، نه هسته‌های منطقی، تنظیم کنید تا از سربار هایپرتریدینگ جلوگیری شود.
  2. اندازه زمینه: از پرچم -c برای تنظیم اندازه پنجره زمینه استفاده کنید. زمینه‌های بزرگ‌تر VRAM/RAM بیشتری مصرف می‌کنند. با -c 2048 شروع کنید و در صورت نیاز افزایش دهید.
  3. سطح کوانتیزاسیون: اگر حافظه محدودی دارید، از یک مدل کوانتیزه‌شده ۴ بیتی (Q4_K_M) استفاده کنید. اگر منابع کافی دارید، ۸ بیتی (Q8_0) دقت بهتری ارائه می‌دهد.

نتیجه‌گیری

llama.cpp با ارائه یک موتور سریع، انعطاف‌پذیر و سبک‌وزن، توسعه هوش مصنوعی محلی را دموکراتیک می‌کند. چه در حال ساخت یک چت‌بات با اولویت حریم خصوصی باشید، چه در حال آزمایش مدل‌های فاین‌تیون‌شده، یا صرفاً بخواهید LLMها را بدون هزینه‌های API کاوش کنید، llama.cpp ابزاری ضروری در جعبه ابزار توسعه‌دهنده شماست. با رشد اکوسیستم، انتظار می‌رود که حتی معماری‌های مدل و بهینه‌سازی‌های بک‌اند بیشتری پشتیبانی شوند که نقش آن را در چشم‌انداز هوش مصنوعی محلی بیشتر تثبیت می‌کند.

Share: