کوانتایز کردن مدل، تکنیکی برای کاهش حجم و توان مورد نیاز برای اجرای مدل‌هاست. در حین این تکنیک، پارامترهای مدل به نوعی فشرده می‌شوند و در قالب کوچک‌تری قرار می‌گیرند. به عنوان مثال، اگر پارامترهای مدل را اعدادی اعشاری در نظر بگیریم، در حالت عادی برای هر پارامتر ۳۲ بیت حافظه (یعنی ۳۲ خانه که می‌توانند ۰ یا ۱ باشند) اختصاص پیدا می‌کند. مثلاً عدد ۰٫۱۵۶۲۵ به این شکل در کامپیوتر ذخیره می‌شود:

‌ فرآیند تبدیل عدد به فرمت float32

برای تبدیل عدد ۰٫۱۵۶۲۵ به متغیر float32، به ترتیب مراحل زیر طی می‌شود:

  • اول از همه عدد باید به مبنای دو برده شود. عدد ۰٫۱۵۶۲۵ در مبنای دو برابر 0.00101 است.
  • عدد حاصل شده باید به صورت ترکیبی از توان و عدد علمی نوشته شود: بخش علمی آن برابر 1.01 و توان آن برابر -3‌است.
  • بعد از این دیگر نوبت به جاگذاری مقادیر در قالب float32 می‌رسد.
  • چون عدد مثبت است، مقدار sign برابر 0 می‌شود.
  • مقدار توان به دلیل بایاس ۱۲۷1 قالب float32 برابر ۱۲۴ است که در مبنای دو برابر 01111100 است.
  • مقدار اعشار هم برابر 010‌است. باقی خانه‌های حافظه بعد از آن هم برابر 0 می‌شود.
  • پس عدد ۰٫۱۵۶۲۵ در قالب float32 برابر 00111110001000000000000000000000‌خواهد بود.

اما float32‌تنها راه ذخیره‌سازی اعداد در حافظه نیست. فرمت‌های دیگری مثل float16‌(FP16) یا حتی int هم برای این کار وجود دارند. این فرمت‌ها به نسبت FP32 حجم کمتری برای ذخیرهٔ متغیرها می‌گیرند. مثلاً مقدار ۰٫۱۵۶۲۵ در فرمت FP16‌برابر 0011000100000000 خواهد بود که نصف فرمت FP32 حجم می‌گیرد.

در نتیجهٔ کوانتایز کردن مدل، حجم مدل به شکل قابل توجهی کاهش پیدا می‌کند. به دلیل ساده‌تر شدن ضرب و جمع ماتریسی، سرعت آن هم افزایش پیدا می‌کند. البته که همهٔ این‌ها با ریسک کاهش دقت مدل مواجه است. با این وجود، تجربه نشان داده که دقت مدل‌های کوانتایز شده تفاوتی اساسی با مدل‌های اصلی ندارد. در پایین به عنوان نمونه، جدولی از تفاوت نسخه‌های کوانتایزشدهٔ مدل ۱۲ میلیارد پارامتری Flux Schnell آمده است:

مدلحجم
Original23.8 GB
F1623.8 GB
Q812.6 GB
Q58.18 GB
Q46.69 GB
Q23.9 GB
یک نمونه از کوانتایز کردن مقادیر اعشاری و تبدیل آن‌ها به اعداد صحیح

Footnotes

  1. دلیل وجود بایاس این است که از اعداد منفی هم پشتیبانی کند.