هوش مصنوعی

Quantization و فشرده‌سازی مدل‌ها

Quantization و فشرده‌سازی مدل‌ها — راهنمای فارسی از مجموعهٔ «هوش مصنوعی» در وبلاگ آیرا. بازنویسی‌شده با تمرکز روی کاربر ایرانی و روایت شناخت پیوسته.

نوشتهٔ به‌روزرسانی: ۳ دقیقه مطالعه
تصویر مقالهٔ Quantization و فشرده‌سازی مدل‌ها

اگه تا حالا سعی کردی یه مدل زبانی بزرگ رو روی لپ‌تاپ شخصیت اجرا کنی، احتمالاً با خطای «حافظه کافی نیست» یا سرعت حلزونی مواجه شدی. Quantization دقیقاً برای همین مشکل اومده — و فهمیدنش به کاربر ایرانی که می‌خواد مدل‌های open-source اجرا کنه، کمک مستقیم می‌کنه.

مشکل اصلی: مدل‌های بزرگ، سخت‌افزار محدود

یه مدل زبانی مثل LLaMA 3 با ۷۰ میلیارد پارامتر، اگه با دقت کامل float32 ذخیره بشه، حدود ۲۸۰ گیگابایت RAM نیاز داره. این یعنی برای اجرای خانگی عملاً غیرممکن. حتی float16 هم ۱۴۰ گیگابایت می‌خواد.

اینجاست که Quantization وارد می‌شه: به جای اینکه هر وزن شبکه رو با ۳۲ یا ۱۶ بیت نشون بدیم، اونو به ۸ بیت، ۴ بیت، یا حتی ۲ بیت تبدیل می‌کنیم. نتیجه؟ همون مدل ۷۰B حالا با ۴ بیت تبدیل می‌شه به حدود ۳۵ گیگابایت — قابل اجرا روی یه کامپیوتر با ۴۰ گیگ RAM یا حتی دو تا GPU معمولی.

انواع Quantization که باید بشناسی

GGUF / llama.cpp: رایج‌ترین فرمت برای اجرای محلی روی CPU+GPU. وقتی رو Ollama یا LM Studio مدل دانلود می‌کنی، معمولاً فایل‌هایی با پسوند .gguf و نام‌هایی مثل Q4_K_M یا Q8_0 می‌بینی.

GPTQ: یه روش quantization بعد از آموزش (post-training) که مخصوص GPU طراحی شده. کیفیت بهتری نسبت به روش‌های ساده داره ولی اجرای اون روی CPU سخت‌تره.

AWQ (Activation-aware Weight Quantization): نسل جدیدتری از GPTQ که با در نظر گرفتن فعال‌سازی‌های مهم‌تر، افت کیفیت کمتری داره. مدل‌های AWQ روی HuggingFace با پسوند -AWQ معمولاً علامت‌گذاری می‌شن.

bitsandbytes: کتابخانه‌ای که توسط HuggingFace توسعه پیدا کرده و quantization 4-bit و 8-bit رو در زمان بارگذاری مدل انجام می‌ده. با تنظیم load_in_4bit=True در کد Python قابل استفاده‌ست.

کد عملی: اجرای مدل quantized با Ollama

ساده‌ترین راه برای کاربر ایرانی که می‌خواد مدل محلی اجرا کنه، Ollama هست:

# دانلود مدل Llama 3 با quantization 4-bit
ollama pull llama3:8b-instruct-q4_K_M

# یا نسخه 8-bit با کیفیت بهتر
ollama pull llama3:8b-instruct-q8_0

تفاوت Q4_K_M و Q8_0 اینه که Q4 حدود ۴.۵ گیگابایت می‌شه ولی Q8 حدود ۸.۵ گیگابایت — کیفیت Q8 به float16 خیلی نزدیک‌تره.

چه مقدار کیفیت از دست می‌دیم؟

این سوال کلیدیه. جواب صادقانه اینه: بستگی داره.

برای کارهای روزمره مثل خلاصه‌سازی، پاسخ به سوال، و نوشتن ساده، تفاوت بین Q4 و Q8 اغلب قابل تشخیص نیست. ولی برای:

  • استدلال ریاضی پیچیده: Q4 می‌تونه بیشتر خطا کنه
  • کدنویسی دقیق: Q8 یا بالاتر توصیه می‌شه
  • فارسی: مدل‌هایی که از اول با فارسی آموزش ندیدن، حتی با quantization کم هم ممکنه فارسی‌شون خوب باشه — چون مشکل اصلی پایه آموزش بوده نه quantization

یه قانون کاربردی: اگه مدل با precision کامل جواب بدی می‌ده، Q8 کمتر از ۱٪ افت داره. Q4_K_M معمولاً ۲-۵٪ افت داره که در بیشتر کاربردها قابل قبوله.

اصطلاح‌های داخل نام فایل GGUF

وقتی روی سایت‌هایی مثل HuggingFace یا Ollama Hub به مدل‌های GGUF نگاه می‌کنی، اسم‌هایی مثل Q4_K_M, Q5_K_S, IQ3_XXS می‌بینی. خوندنشون اینطوریه:

  • عدد اول (مثل ۴): تعداد بیت برای quantization
  • K: نوع روش (K-quant که دقت‌تری داره)
  • M/S/L: اندازه «مقیاس» (M=medium, S=small, L=large) — M معمولاً بهترین تعادل سرعت/کیفیته

چه وقت Quantization لازم نیست؟

اگه از API سرویس‌هایی مثل OpenAI، Anthropic یا Gemini استفاده می‌کنی، quantization اصلاً دغدغه‌ات نیست — اون‌ها خودشون مدل رو با هر روشی که مناسب ببینن سرو می‌کنن. Quantization وقتی مهمه که:

۱. مدل رو محلی روی سخت‌افزار خودت اجرا کنی ۲. یه مدل open-source رو fine-tune کنی و بعد deploy کنی ۳. بخوای مدل رو روی edge device (مثل موبایل یا Raspberry Pi) بذاری

ربط به کاربر ایرانی

برای کاربر ایرانی که به خاطر تحریم‌ها به API‌های خارجی دسترسی محدود داره، اجرای مدل‌های open-source به صورت محلی یه گزینه جدیه. Quantization این مسیر رو ممکن می‌کنه — مدل‌هایی مثل Mistral 7B یا Llama 3 8B با Q4 روی یه لپ‌تاپ با ۱۶ گیگ RAM کار می‌کنن.

البته یه نکته مهم: مدل‌های open-source کنونی هنوز در زبان فارسی به اندازه GPT-4 یا Claude مسلط نیستن — این موضوع مستقل از quantization هست. اگه کیفیت فارسی اولویت اصلیه، API ابری با واسط ایرانی فعلاً گزینه بهتریه. آیراچت که روی مدل‌های قوی ابری بنا شده، برای کاربر ایرانی همین مسیر رو طی می‌کنه.

همچنین بخوان

#هوش مصنوعی

ادامهٔ مسیر

همهٔ مقاله‌ها ←

بیشتر در «هوش مصنوعی»