Local AI

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

دموکراتیزه‌سازی مدل‌های زبانی بزرگ (LLMs) فراتر از دیتاسنترهای عظیم به حاشیه شبکه‌های ما رسیده است. برای توسعه‌دهندگان و علاقه‌مندان، توانایی اجرای مدل‌های پیشرفته هوش مصنوعی بر روی سخت‌افزارهای محدود مانند رزبری پای یا گوشی‌های هوشمند امروزی، نمایانگر یک جهش بزرگ در حریم خصوصی و کاهش تأخیر است. در قلب این انقلاب، llama.cpp قرار دارد؛ پیاده‌سازی C++ از معماری LLaMA متا که بر کارایی و قابلیت حمل اولویت می‌دهد.

معماری استنتاج در لبه شبکه

اجرای یک مدل با ۷ میلیارد پارامتر بر روی دستگاهی با ۴ گیگابایت رم، با دقت شناور استاندارد امکان‌پذیر نیست. اینجاست که کوانتیزه‌سازی (Quantization) حیاتی می‌شود. llama.cpp از فایل‌های GGUF (فرمت یکپارچه تولید شده توسط GPT) استفاده می‌کند که اجازه می‌دهند مدل‌ها با حداقل افت دقت فشرده شوند. با استفاده از تکنیک‌هایی مانند Q4_K_M (کوانتیزه‌سازی ۴ بیتی)، می‌توانیم اندازه مدل را نسبت به نمایش شناور ۱۶ بیتی اصلی آن، حدود چهار تا پنج برابر کاهش دهیم.

برای دستگاه‌های لبه شبکه، انتخاب بک‌اند (Backend) نیز به همان اندازه مهم است. در رزبری پای، بهره‌گیری از دستورات ARM NEON یا رجیسترهای VFPv4 می‌تواند ضرب ماتریسی را به طور قابل توجهی تسریع کند. در سخت‌افزارهای موبایل، یکپارچه‌سازی مدل در یک برنامه بومی اندروید یا iOS از طریق پل‌های JNI یا Objective-C، امکان شتاب‌دهی سخت‌افزاری از طریق GPU یا NPU دستگاه را فراهم می‌کند.

آماده‌سازی محیط بر روی رزبری پای

نصب llama.cpp بر روی رزبری پای (Pi 4 یا Pi 5) نیاز به کامپایل کد منبع دارد تا برای معماری ARM خاص بهینه‌سازی شود. اگرچه باینری‌های از پیش کامپایل شده وجود دارند، اما ساخت از روی سورس کد تضمین می‌کند که از تمام هسته‌های CPU و بهینه‌سازی‌های کامپایلر استفاده شود.

ابتدا مطمئن شوید که سیستم شما به‌روز است و ابزارهای ساخت ضروری را نصب کنید:

sudo apt update
sudo apt install build-essential git wget

مخزن را کلون کرده و باینری را با پرچم‌های خاص برای بهینه‌سازی ARM کامپایل کنید. دستور زیر OpenMP را برای چندرشته‌ای فعال می‌کند که برای عملکرد بلادرنگ بر روی پردازنده‌های چند هسته‌ای Pi حیاتی است:

git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
make -j$(nproc) LLAMA_OPENMP=1

پس از کامپایل، شما یک باینری main خواهید داشت. برای اجرای استنتاج، به یک فایل مدل GGUF نیاز دارید. می‌توانید آن را از Hugging Face دانلود کنید یا مدل خود را با استفاده از اسکریپت‌های تبدیل ارائه شده، تبدیل نمایید. یک تعامل ساده به این صورت است:

./main -m models/llama-2-7b-chat.Q4_K_M.gguf -p "Hello, how are you?" -n 128

بهینه‌سازی برای سخت‌افزار موبایل

انتقال به دستگاه‌های موبایل محدودیت‌هایی را در مورد عمر باتری و مدیریت حرارتی ایجاد می‌کند. در اندروید، کتابخانه llama.cpp را می‌توان با استفاده از Android NDK به صورت متقاطع کامپایل کرد. کلید موفقیت در اینجا، کاهش طول زمینه (Context length) و اندازه دسته (Batch size) است تا در حافظه هیپ موجود جا شوند که معمولاً از طریق تماس‌های JNI از یک فرانت‌اند Kotlin یا Java مدیریت می‌شود.

برای توسعه‌دهندگان iOS، یکپارچه‌سازی llama.cpp شامل ایجاد یک بسته Swift یا لینک کردن کتابخانه C++ از طریق هدرهای پل است. همچنین می‌توان از چارچوب Core ML اپل برای تبدیل مدل‌های GGUF به فرمت .mlprogram استفاده کرد تا محاسبات به موتور عصبی منتقل شده و زمان‌های استنتاج تقریباً آنی فراهم شود.

نتیجه‌گیری

استقرار LLMs بر روی دستگاه‌های لبه شبکه دیگر علمی-تخیلی نیست؛ بلکه یک واقعیت عملی برای توسعه‌دهندگان متوسط است. llama.cpp ابزارهای لازم را برای پر کردن شکاف بین مدل‌های سنگین ابری و سخت‌افزارهای سبک لبه شبکه فراهم می‌کند. با تسلط بر کوانتیزه‌سازی و بهینه‌سازی‌های خاص سخت‌افزاری، می‌توانید برنامه‌های هوش مصنوعی حفظ حریم خصوصی و با تأخیر کم بسازید که مستقیماً بر روی دستگاه کاربر اجرا می‌شوند. با ادامه رشد قابلیت‌های سخت‌افزاری، پتانسیل هوش دستگاه‌محور تنها گسترش خواهد یافت و llama.cpp را به ابزاری ضروری در جعبه ابزار توسعه‌دهنده مدرن تبدیل می‌کند.

Share: