کوانتیزیشن: راز کوچیکسازی مدلهای زبانی
خلاصهٔ کاملتر
Qwen3-Coder-Next یه مدل ۸۰ میلیارد پارامتریه که حدود ۱۵۹ گیگابایت رم برای اجراش لازمه؛ و طبق این مقاله، این حتی یه مدل «بزرگ» هم حساب نمیشه، چون شایعه شده مدلهای فرانتیر بیش از ۱ تریلیون پارامتر دارن که به ۲ ترابایت رم نیاز دارن. نویسنده میگه با تکنیک کوانتیزیشن (quantization) میشه مدلها رو تا ۴ برابر کوچیکتر و ۲ برابر سریعتر کرد، اونم فقط با ۵ تا ۱۰ درصد افت دقت.
پارامترهای یه مدل زبانی همون وزنهایی هستن که معمولاً به فرمت float32 ذخیره میشن؛ یعنی هر عدد با ۳۲ بیت و ۷ رقم اعشار دقیق نگه داشته میشه. چون بیشتر پارامترها مقادیر کوچیکی نزدیک صفر دارن، نیازی به این همه دقت نیست. فرمتهای کوچیکتر مثل float16 (نصف حجم، ۳ رقم دقت) و bfloat16 (طراحی گوگل، بازهی وسیعتر ولی فقط ۲ رقم دقت) همین کارو با حافظهی کمتر انجام میدن.
کوانتیزیشن یعنی مقادیر رو از یه بازهی بزرگ به یه بازهی کوچیکتر (مثلاً ۴ بیتی) فشرده کنی. اگه فقط مقادیر رو گرد کنی، بعضی پارامترها صفر میشن و کل مدل خراب میشه؛ برای همین از «کوانتیزیشن متقارن» استفاده میشه که با پیدا کردن بزرگترین مقدار، یه ضریب مقیاس (scale) حساب میکنه:
const vmax = Math.max(...values.map(Math.abs));
const qmax = 2 ** (bits - 1) - 1;
const scale = vmax / qmax;
const quantized = values.map(v => Math.round(v / scale));نویسنده تو یه مثال کوچیک نشون میده که این روش خطای متوسط حدود ۱۸ درصد داره و خروجی نهایی مدل رو حدود ۳۰ درصد جابهجا میکنه؛ که به مراتب بهتر از خراب شدن کامل مدله.
مشکل کوانتیزیشن متقارن اینه که همیشه صفر رو وسط بازه نگه میداره، در حالی که ممکنه مقادیر واقعی اصلاً متقارن نباشن (مثلاً از ۰.۸۹- تا ۰.۱۶+). کوانتیزیشن نامتقارن بهجای صفر، دور میانهی دادهها میچرخه و یه «نقطهی صفر» (zero point) اضافه محاسبه میکنه تا موقع برگردوندن مقادیر به حالت اول ازش استفاده کنه؛ همین باعث میشه از بازهی موجود بهتر استفاده بشه و دقت نهایی بیشتر بمونه.
نکات کلیدی:
- Qwen3-Coder-Next: ۸۰ میلیارد پارامتر، حدود ۱۵۹.۴ گیگابایت رم
- کوانتیزیشن مدل رو تا ۴ برابر کوچیکتر و ۲ برابر سریعتر میکنه، با ۵ تا ۱۰ درصد افت دقت
- float32: ۳۲ بیت و ۷ رقم دقت؛ float16: نصف حجم و ۳ رقم دقت؛ bfloat16 گوگل: بازهی وسیع و ۲ رقم دقت
- کوانتیزیشن متقارن حول صفر گرد میکنه؛ نامتقارن با یه zero point بازه رو بهتر استفاده میکنه




