اگر امروز قصد دارید مدل Llama-3.1-8B را روی سیستم شخصی اجرا کنید، با یک دیوار سختافزاری مواجه میشوید: نیاز به ۱۶ گیگابایت حافظه ویدیویی (VRAM) برای اجرای مدل در دقت اصلی BF16. اما نسخههای کوانتیده این مدل، مانند llama-3.1-8b-instruct-q4_k_m.gguf که تنها با ۴.۷ گیگابایت فضا اجرا میشوند، همان قدرت استدلال را به لپتاپهای معمولی میآورند. این کاهش شدید حجم اجازه میدهد هوش مصنوعی با عملکرد بالا روی سختافزارهای مصرفکننده اجرا شود، بدون آنکه شاهد یک فروپاشی خطی در سطح هوشمندی مدل باشیم.
بسیاری از کاربران فایلهای با پسوند .gguf یا AWQ را دانلود و اجرا میکنند، بدون آنکه بدانند کوانتش (Quantization) — شبیه به تبدیل یک عکس با کیفیت بسیار بالا به فرمت JPEG برای کاهش حجم بدون تغییر محسوس در ظاهر — در واقع یک مسئله بازسازی است. هدف فنی این است که یک مقدار اعشاری پیوسته $w$ را به صورت یک عدد صحیح کوچک $q$ با استفاده از یک مقیاس $s$ و یک نقطه صفر $z$ ذخیره کنیم. فرمول مورد استفاده به این صورت است: $q = \text{clip}(\text{round}(w / s) + z, q_{\min}, q_{\max})$. مدل هنگام اجرا، وزن را از طریق فرمول $\hat{w} = s * (q - z)$ بازسازی میکند و مقدار اندکی خطا را میپذیرد تا گیگابایتها در فضای حافظه ذخیره شوند. این خطا توسط $s/2$ محدود میشود؛ مقیاس کوچکتر یک شبکه ریزتر و خطای کمتر ایجاد میکند، اما مقیاس باید به اندازه کافی بزرگ باشد تا بزرگترین وزن در گروه را پوشش دهد.
اما این فرآیند یک گرد کردن ساده نیست. یک «وزن پرت» (Outlier) — یعنی مقداری که بهشدت از بقیه اعضای گروهش بزرگتر است — میتواند کل شبکه را به هم بریزد و باعث شود برای تمام وزنهای دیگر یک شبکه درشت و غیردقیق اجبار شود. تصور کنید در ردیفی از ۱۲۸ وزن، ۱۲۷ مورد بین ۱- و ۱ باشند، اما یکی روی عدد ۱۲ قرار بگیرد؛ در این حالت یک کوانتش ساده INT4 مقیاسی در حدود ۱.۷۱ خواهد داشت. این اتفاق باعث میشود ۱۲۷ وزنِ خوشرفتار تنها به سه مقدار ممکن ${-1.71, 0, +1.71}$ تبدیل شوند که عملاً توانایی استدلال مدل را نابود میکند.
همانطور که در تحلیلهای پیشین ما درباره بهینهسازی مدلهای بازمتن اشاره کردیم، مدیریت این نقاط بحرانی، مرز بین یک مدل هوشمند و یک مدل توهمزده است. این بهینهسازیها در مدلهای کوچکتر اثرگذاری بیشتری دارند، مشابه آنچه در برتری مدل ۷ میلیارد پارامتری ZGCM-1 بر مدلهای بسیار بزرگتر مشاهده کردیم که نشان داد معماری هوشمندانه میتواند جایگزین حجم عظیم پارامترها شود.
نبرد علیه وزنهای پرت
برای حل این مشکل، چارچوبهای مختلف استراتژیهای متفاوتی را برای جداسازی این وزنهای مشکلساز به کار میگیرند:
GPTQ (Frantar et al., 2022) بهجای تمرکز بر خطای وزن، روی کمینه کردن خطای خروجی تمرکز میکند. این روش نمیپرسد «$\hat{w}$ چقدر به $w$ نزدیک است؟»، بلکه میپرسد «$\hat{W}X$ روی فعالسازهای واقعی چقدر به $WX$ نزدیک است؟». GPTQ وزنها را ستون به ستون و با استفاده از هسین (Hessian) لایه (انحنای مرتبه دوم) کوانتیده میکند تا اندازهگیری کند که خطا چگونه به خروجی منتقل میشود. پس از کوانتیده کردن یک ستون، ستونهای باقیمانده که هنوز کوانتیده نشدهاند را بهروزرسانی میکند تا خطا را جذب کنند. این فرآیند از یک مجموعه داده کالیبراسیون (معمولاً ۱۲۸ نمونه از C4) برای تأمین فعالسازهای $X$ استفاده میکند. اگرچه کیفیت آن بالاست، اما فرآیند کوانتش آن کند است (برای یک مدل ۱۷۵ میلیارد پارامتری ساعتها زمان میبرد)، فقط روی GPU اجرا میشود و برای استنتاج سریع به کرنل Marlin نیاز دارد.
AWQ (Activation-aware Weight Quantization, Lin et al., 2023) کانالهایی را که فعالسازها (Activations) واقعاً از آنها استفاده میکنند، محافظت میکند. این روش مشاهده کرد که بخش بسیار کوچکی از کانالها (اغلب کمتر از ۱٪) مقادیر فعالساز عظیمی را حمل میکنند. اگر یک کانال فعالسازهایی در حدود ۱۰۰ داشته باشد، خطای ۰.۱ در وزن تبدیل به خطای ۱۰ در خروجی میشود. ترفند AWQ تغییر مقیاس قبل از کوانتش است: $W X = (W \cdot \text{diag}(s)) \cdot (\text{diag}(s)^{-1} X)$. با کوچک کردن مقیاس ستونهای مهم وزن، آنها در یک شبکه متراکمتر جای میگیرند و سپس در زمان اجرا دوباره بزرگ میشوند. این روش کیفیت بهتری نسبت به GPTQ دارد، به نمونههای کالیبراسیون کمتری (۱۲۸ تا ۵۱۲ نمونه) نیاز دارد و وزنهای خالص INT4 را بدون پیچیدگیهای دقت ترکیبی حفظ میکند.
سلسلهمراتب GGUF و K-Quant
برای کسانی که مدلها را روی CPU یا تراشههای اپل (Apple Silicon) اجرا میکنند، GGUF کانتینر اصلی است. این فرمت از خانواده K-quant (از Q2_K تا Q6_K) استفاده میکند که یک سیستم مقیاسبندی سلسلهمراتبی دو سطحی را برای جایگزینی فرمتهای قدیمی مانند Q4_0 به کار میگیرد.
- نسخههای قدیمی (Q4_0): برای هر ۳۲ وزن از یک مقیاس FP16 استفاده میکردند که باعث ایجاد سربار ۰.۵ بیت بر وزن میشد.
- K-quant (Q4_K): از «ابر-بلاکهای» ۲۵۶ تایی استفاده میکند. یک ابر-مقیاس FP16 بر ۸ زیر-بلاک ۳۲ تایی نظارت دارد. هر زیر-بلاک یک زیر-مقیاس ۶ بیتی و یک زیر-حداقل ۶ بیتی برای کوانتش نامتقارن دریافت میکند.
این معماری سربار را به حدود ۰.۴ بیت بر وزن کاهش داده و برازش محلی را بهبود میبخشد. همچنین اجازه میدهد از سیاستهای دقت ترکیبی مانند Q4_K_M (Medium) استفاده شود. در این ساختار، اکثر تنسورها ۴ بیتی هستند، اما لایههای حساس به دقت بالاتری ارتقا مییابند:
- Q4_K: برای
attn_q،attn_k،ffn_gateوffn_up - Q6_K: برای
attn_v،attn_outputوffn_down(اینها در جریان باقیمانده یا residual stream قرار دارند جایی که خطاها جمع میشوند) - F16: برای نرمالسازها (Norms) و جاسازیها (Embeddings)
این سیاست بر اساس آزمایشهای perplexity به صورت دستی تنظیم شده است. مدل Q4_K_M با ۴.۵ بیت بر وزن، در بنچمارک WikiText بین ۱ تا ۳ امتیاز perplexity بهتر از Q4_0 قدیمی عمل میکند.
عبور از مرز ۴ بیت
وقتی دقت به زیر ۳ بیت میرسد، کوانتش اسکالر استاندارد به بنبست میرسد، جایی که خطا یکنواخت و غیرقابل کاهش میشود. برای مقابله با این موضوع، I-quants (از IQ1 تا IQ4) اعداد صحیح با فاصله یکسان را با «کتابهای کد» (Codebooks) یادگرفته جایگزین میکنند. در این حالت، گروههای ۸ تایی از وزنها به یک جدول از الگوهای مجاز علامت/مقدار (sign/magnitude) اشاره میکنند.
این روشها از یک ماتریس اهمیت (یک تقریب دیاگونال از هسین حاصل از کالیبراسیون) برای وزندهی به تصمیمات گرد کردن استفاده میکنند. بدون فایل .imatrix تولید شده توسط llama-imatrix ،کوانتایزر اجازه اجرای مدل زیر ۳ بیت را نمیدهد. مثالها عبارتند از:
- IQ4_XS: با ۴.۲۵ بیت بر وزن، از Q4_K_S (۴.۵ بیت) بهتر عمل میکند.
- IQ3_XXS: با ۳.۰۶ بیت، در جایی که Q3_K_M تخریب میشود، منسجم میماند.
- IQ1_M: با ۱.۷۵ بیت بر وزن که به سختی قابل استفاده است اما وجود دارد.
نقطه شکست کیفیت (the knee) در ۴ بیت است. مدل Q4_K_M معمولاً کمتر از ۱٪ افت کیفیت نسبت به FP16 دارد، اما افت به ۲ بیت (Q2_K) میتواند منجر به کاهش ۱۰ درصدی یا بیشتر در کیفیت شود.
اجرای سختافزاری
نحوه اجرای این مدلها کاملاً به بکاِند وابسته است.
llama.cpp (که در Ollama و LM Studio استفاده میشود) این مسیر را دنبال میکند:
۱. mmap(model.gguf) دادههای تنسور را در فضای آدرس مجازی نگاشت میکند.
۲. هدر و متادیتا در یک ایندکس کوچک در RAM تجزیه میشوند.
۳. برای هر گام تولید، کرنلهای SIMD بلاکهای Q4_K ۲۵۶ تایی را به فضای موقت FP32 تبدیل (dequantize) میکنند.
۴. ضرب ماتریسی (matmul) در FP32 اجرا میشود، زیرا در CPU گلوگاه اصلی پهنای باند حافظه وزن است، نه قدرت محاسباتی.
۵. حافظه KV cache در RAM به صورت FP16 باقی میماند مگر اینکه از --kv-cache-dtype استفاده شود.
در مقابل، فرمتهای بهینه برای GPU مثل AWQ از کرنلهای ادغامشده INT4 GEMM، مانند کرنل Marlin استفاده میکنند. این کرنل به GPU اجازه میدهد مستقیماً در Tensor Coreهای INT4 (در تراشههای Hopper و جدیدتر) محاسبه کند یا در سختافزارهای قدیمیتر به FP16 تبدیل کند. کرنل Marlin باعث شد GPTQ-INT4 روی H200 به سرعت ۷۱۲ توکن بر ثانیه برسد (۵۴٪ سریعتر از FP16)، در حالی که AWQ با Marlin به ۷۴۱ توکن بر ثانیه میرسد.
منطق انتخاب کاربردی
برای توسعهدهندگان و علاقهمندان، انتخاب کوانتش از دو قانون سخت پیروی میکند. اول، جای دادن کامل مدل در VRAM بسیار مهمتر از سطح کوانتش است؛ یک مدل Q4_K_M که کاملاً در VRAM جای بگیرد، مدل Q6_K را که بخشی از آن به رم سیستم (System RAM) سرریز میشود، در هم میشکند. دوم، یک مدل بزرگتر با کوانتش پایینتر (مثلاً مدل 13B با ۴ بیت) تقریباً همیشه از یک مدل کوچکتر با دقت بالاتر (مثلاً مدل 7B با ۸ بیت) بهتر عمل میکند. این رویکرد به ویژه برای محیطهای حساس که نیاز به اجرای محلی دارند حیاتی است، همانطور که در بررسی مدلهای MLX برای حذف ریسکهای حریم خصوصی در دفاتر حقوقی اشاره شد که اجرای محلی را تنها گزینه امن میداند.
| فرمت | بیت اسمی | بیت موثر | حجم 7B | کیفیت نسبت به FP16 |
|---|---|---|---|---|
| Q8_0 | 8 | 8.5 | $\approx 8.1$ GB | $<0.1%$ (غیرقابل تشخیص) |
| Q6_K | 6 | 6.6 | $\approx 6.3$ GB | $\approx 0.1%$ (شفاف) |
| Q5_K_M | 5 | 5.7 | $\approx 5.4$ GB | $\approx 0.3%$ (عالی) |
| Q4_K_M | 4 | 4.8 | $\approx 4.7$ GB | $\approx 0.8%$ (بسیار خوب) |
| Q4_K_S | 4 | 4.5 | $\approx 4.5$ GB | $\approx 1.2%$ (خوب) |
| Q3_K_M | 3 | 3.9 | $\approx 3.8$ GB | $\approx 3-4%$ (قابل تشخیص) |
| IQ3_XXS | 3 | 3.1 | $\approx 3.0$ GB | $\approx 6%$ (تخریب شده) |
| Q2_K | 2 | 2.6 | $\approx 2.5$ GB | $10%+$ (به وضوح تخریب شده) |
این تغییر دیدگاه، کوانتش را از یک وظیفه «فشردهسازی» به یک وظیفه «تخصیص بودجه بیتی» تبدیل میکند. هدف دیگر کوچک کردن مدل نیست، بلکه قرار دادن دقت دقیقاً در جایی است که هوشمندی مدل شکنندهترین حالت خود را دارد. چه از هسین GPTQ، چه از آمار فعالساز AWQ و چه از مقیاسهای سلسلهمراتبی K-quants استفاده شود، هدف تخصیص بودجه در حساسترین نقاط مدل است. برای درک عمیقتر از نحوه پیادهسازی این بهینهسازیها در موتورهای اجرا، معماری ترکیبی ZGCM-1 برای بهینهسازی موتور ۷ میلیاردی نمونهای برجسته از مدیریت دقیق منابع محاسباتی است.
گام بعدی شما
- اگر بین دو مدل مردد هستید، همیشه مدلی را انتخاب کنید که بهطور کامل در VRAM جای بگیرد؛ یک مدل Q4_K_M که در حافظه گرافیکی باشد، بسیار سریعتر از مدل Q6_K است که بخشی از آن به رم سیستم منتقل شود.
- برای حداکثر کیفیت در مدلهای کوچک، از نسخههای I-quant (مانند IQ4_XS) استفاده کنید.
- اگر از سختافزار قدیمی استفاده میکنید، فرمت GGUF را برای توزیع بار بین CPU و GPU اولویت دهید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما درباره تراشههای Blackwell و مدیریت حافظه در مقیاس صنعتی مراجعه کنید.




گفتگو