کوانتیزه کردن مدل‌ها روی یک GPU لپ‌تاپ ۶ گیگابایتی

من سعی کردم مدل‌های زبانی بزرگ را روی یک GPU لپ‌تاپ RTX 3050 جای دهم. این کارت تنها ۶ گیگابایت VRAM دارد. می‌خواستم ببینم کدام مدل‌ها با کوانتیزاسیون ۴-بیتی کار می‌کنند و کدام‌یک با شکست مواجه می‌شوند.

من از یک اسکریپت واحد برای کوانتیزه کردن سه مدل استفاده کردم:

  • Phi-3.5-mini (3.8B)
  • Llama-3.2-3B
  • Qwen2.5-3B (VibeThinker)

نتایج: Phi و Llama به خوبی کار کردند. حجم Phi در مدت ۳۴ دقیقه از ۷.۶ گیگابایت به ۲.۲ گیگابایت کاهش یافت. Llama و VibeThinker نیز مسیر مشابهی را طی کردند. این مدل‌ها به راحتی جای می‌گیرند.

سپس Qwen2.5-7B را امتحان کردم. شکست خورد. فرآیند در لایه دوم با خطای کمبود حافظه (Out of Memory) متوقف شد.

چرا شکست خورد: کوانتیزاسیون GPTQ برای هر لایه یک ماتریس هسین (Hessian matrix) می‌سازد. برای یک مدل 7B، این محاسبات به حافظه‌ای بیش از آنچه یک کارت ۶ گیگابایتی ارائه می‌دهد، نیاز دارد. من چندین راه حل را امتحان کردم:

  • مجموعه‌داده‌های کالیبراسیون کوچک‌تر: تغییری ایجاد نکرد.
  • انتقال هسین‌ها به CPU: مدت بیشتری دوام آورد اما باز هم کرش کرد.
  • استفاده از AWQ به جای GPTQ: در همان نقطه کرش کرد.
  • استفاده از فقط CPU: کار می‌کند اما بسیار کند است. هر لایه حدود ۱۶ دقیقه زمان می‌برد.

نکات کلیدی برای GPUهای کوچک:

  • انتظار کاهش ۳ برابری در اندازه مدل را داشته باشید.
  • برای کوانتیزاسیون روی GPU، محدودیت ۳ تا ۴ میلیارد پارامتری را هدف قرار دهید.
  • مراقب بودجه KV خود باشید. حتی اگر اندازه فایل‌ها مشابه باشد، حافظه مصرفی در طول استنتاج (inference) متفاوت است.
  • کوانتیزاسیون نسبت به سرویس‌دهی (serving) حافظه بیشتری مصرف می‌کند. در طول فرآیند، RAM سیستم خود را مانیتور کنید.

مقایسه مدل‌ها (W4A16): • Phi-3.5-mini: 2.27 GB | 68.7 tok/s • Llama-3.2-3B: 2.26 GB | 66.0 tok/s • VibeThinker-3B: 2.07 GB | 43.9 tok/s

هر سه مدل پس از کوانتیزاسیون، محاسبات ریاضی پایه و منطق اعداد اول را به درستی انجام دادند.

منبع: https://dev.to/syedazeez/quantizing-three-models-to-fit-a-6-gb-laptop-gpu-and-the-one-that-wouldnt-4pjl

انجمن یادگیری اختیاری: https://t.me/GyaanSetuAi