یک مدل ۷۰ میلیاردی در دقت FP16 به حدود ۱۴۰ گیگابایت حافظه نیاز دارد — یعنی معادل هشت کارت گرافیک A100 با حافظهٔ ۸۰ گیگابایتی. تأمین چنین سختافزاری برای بیشتر تیمها غیرممکن است. اما با استفاده از روشی به نام کوانتش، میتوان همان مدل را چنان فشرده کرد که روی یک کارت گرافیک واحد جا شود. در این راهنما، محاسبهٔ حافظه را گامبهگام پیش میبریم و بررسی میکنیم که در این مسیر چه چیزهایی به دست میآوریم و چه چیزهایی را از دست میدهیم.
محاسبهٔ حافظه
شروع کار ساده است: تعداد پارامترها ضرب در تعداد بایتهای هر پارامتر. در دقت FP16، هر پارامتر دو بایت اشغال میکند؛ بنابراین حافظهٔ موردنیاز برای ۷۰ میلیارد پارامتر حدود ۱۴۰ گیگابایت خواهد بود. کوانتش تعداد بیتهای موردنیاز برای ذخیرهسازی هر پارامتر را کاهش میدهد:
| دقت | بیت به ازای هر پارامتر | حافظهٔ یک مدل ۷۰ میلیاردی |
|---|---|---|
| FP16 | ۱۶ | ~۱۴۰ گیگابایت |
| INT8 | ۸ | ~۷۰ گیگابایت |
| INT4 | ۴ | ~۳۵ گیگابایت |
با استفاده از INT8، حجم مدل به نصف کاهش مییابد و روی یک کارت ۸۰ گیگابایتی جا میگیرد. با INT4 این میزان به حدود ۳۵ گیگابایت میرسد — حجمی که حتی روی کارتهای گرافیک مصرفیِ بزرگتر نیز قابلاجراست و فضای کافی برای حافظهٔ KV و پردازش دستهای باقی میگذارد.
کوانتش دقیقاً چه میکند
در فرایند کوانتش، هر وزن به نزدیکترین مقدار در یک شبکهٔ محدودتر از اعداد گرد میشود. در دقت FP16 بیش از ۶۰ هزار مقدار ممکن وجود دارد، در حالی که در INT8 تنها ۲۵۶ مقدار و در INT4 فقط ۱۶ مقدار دردسترس است. این گرد کردن مقادیر خطا ایجاد میکند، اما میزان این خطا ناچیز است و — نکتهٔ کلیدی دقیقاً همینجاست — مدلهای زبانی مقاومت بسیار بالایی در برابر این خطاها دارند؛ چرا که تعداد بیشمار پارامترها و افزونگی درونیشان به آنها اجازه میدهد خطاهای اندک را «دور بزنند».
چه چیزهایی را از دست میدهیم
بهای استفاده از کوانتش، افت اندک کیفیت مدل است که با افزایش میزان فشردهسازی بیشتر میشود:
- INT8: افت کیفیتِ کمتر از یک درصد و معمولاً افزایش سرعت تا حدود دو برابر. این تفاوت در عمل اصلاً محسوس نیست.
- INT4: افت کیفیت در حدود یک تا سه درصد، البته به شرط استفاده از روشهای کارآمد. این میزان برای بیشتر کاربردها کاملاً پذیرفتنی است.
- مقادیر پایینتر از این (مانند INT2): افت کیفیت بسیار شدید خواهد بود؛ استفاده از این محدوده برای کارهای جدی توصیه نمیشود.
نکتهٔ مهم این است که نوع روش کوانتش اهمیت زیادی دارد. کوانتش ساده و خام میتواند کیفیت مدل را ۵ تا ۱۰ درصد کاهش دهد، در حالی که روشهای هوشمندتر همان میزان فشردهسازی را با افت بسیار کمتری انجام میدهند.
چالش مقادیر پرت
چرا کوانتش خام ضعیف عمل میکند؟ علت اصلی آن، وجود مقادیر پرت است. در میان وزنهای یک مدل، همواره چند وزن بسیار بزرگ وجود دارد. اگر بازهٔ شبکهٔ کوانتش را آنقدر گسترده در نظر بگیریم که این مقادیر بزرگ را هم شامل شود، دقت خود را در محدودهٔ مقادیر متداول — یعنی جایی که اکثریت وزنها قرار دارند — از دست خواهیم داد. روشهای پیشرفته دقیقاً حل همین مشکل را هدف میگیرند.
رویکرد عملی
برای اعمال کوانتش INT4 روی یک مدل بزرگ، روشهایی مانند GPTQ و AWQ رایجترین گزینهها هستند؛ هر دو روش مقادیر پرت را هوشمندانه مدیریت میکنند تا افت کیفیت به حداقل برسد. قالب NF4 نیز که در QLoRA به کار میرود، برای توزیع نرمال وزنها بهینهسازی شده است. مسیر عملی پیشنهادی این است: ابتدا روش INT8 را بیازمایید؛ اگر مدل روی سختافزارتان جا شد و کیفیت مطلوبی داشت، به هدف خود رسیدهاید. اما اگر به فشردهسازی بیشتری نیاز دارید، به سراغ INT4 با یک روش کارآمد بروید و عملکرد مدل را روی سناریوی واقعی خود بسنجید، نه صرفاً بر اساس معیارهای ارزیابی عمومی.
جمعبندی
کوانتش از آن دست فناوریهایی است که محاسبات مالی و هزینهها را دگرگون میکند؛ کاری که تا دیروز به هشت کارت گرافیک نیاز داشت، امروز تنها با یک کارت امکانپذیر است. نکتهٔ کلیدی، انتخاب سطح مناسبی از فشردهسازی است؛ یعنی فشردهسازی تا حدی که مدل روی حافظه جا بگیرد، بدون اینکه کیفیت آن از دست برود. در نهایت، درست مانند همیشه، معیار اصلی نه اعداد روی کاغذ، بلکه نحوهٔ رفتار مدل روی دادههای واقعی شماست.