تصور کنید تنها یک تصمیم کوچک در نحوه ذخیرهسازی دادهها، دقت مدل شما را از ۶۳.۵۳٪ به ۲.۸۸٪ سقوط دهد، در حالی که حجم حافظه مصرفی و بودجه بیتی هیچ تغییری نکرده است. این سناریوی ترسناک، واقعیتِ کوانتش (Quantization) در حافظه KV است؛ جایی که نادیده گرفتن هندسه ریاضیِ معادله توجه، مدل را عملاً ناکارآمد میکند. در حالی که امتیاز دقت کامل برای مجموعه داده CoQA برابر با ۶۶.۳۷ است، یک تصمیم پیادهسازی در مورد محورهای کوانتش میتواند عملکرد Llama-2-13B را بهشدت تخریب کند.
این شکست ناشی از کمبود دقت نیست، بلکه نتیجه عدم احترام به هندسه معادله توجه است. وقتی از اندازه گروه ۳۲ با دقت ۲ بیت استفاده میکنیم، عملکرد مدل کاملاً به این بستگی دارد که برای محاسبه ضریب مقیاس، کدام محور را برای گروهبندی انتخاب کنیم. اگر محور کانال را برای کلیدها (Keys) و محور توکن را برای مقادیر (Values) انتخاب کنید، عملکرد مدل در محدوده چهار نقطه از دقت کامل باقی میماند. اما اگر هر یک از این انتخابها را جابهجا کنید، کیفیت بهشدت افت میکند و اگر هر دو را تغییر دهید، مدل دیگر کار نمیکند. این موضوع ثابت میکند که کوانتش در حافظه KV، یک پیچ تنظیم ساده از ۸، ۴ یا ۲ بیت نیست، بلکه انتخابی میان سیستمهای مختصاتی است.
این چالش فنی در حالی رخ میدهد که KV Cache (حافظه کلید-مقدار) به گلوگاه اصلی حافظه در مدلهای زبانی بزرگ با پنجرههای متنی طولانی تبدیل شده است. همانطور که در تحلیلهای پیشین ما درباره اینکه چگونه هشهای کامیت (Commit Hashes) از رانش خاموش مدل در استقرار Llama جلوگیری میکنند اشاره کردیم، تمرکز صنعت اکنون از پایداری وزنها به مدیریت حافظه متغیر و پرنوسان در مرحله تولید (Generation Phase) تغییر یافته است.
گلوگاه حافظه
در یک معماری ترنسفورمر (Transformer)، حافظه KV تمام دادههای تصویر کلید و مقدار توکنهای پردازششده قبلی را ذخیره میکند تا از محاسبات تکراری جلوگیری شود. این حافظه بهصورت خطی با اندازه دسته (Batch Size) و طول زمینه (Context Length) رشد میکند و در نهایت میتواند از خودِ مدل بزرگتر شود.
بر اساس تحلیل KVQuant روی مدل LLaMA-7B، در توالیهای ۵۱۲ توکنی، وزنها ۹۸٪ حافظه را اشغال میکنند و فعالسازها تنها ۲٪ هستند. اما در زمینه ۱۲۸ هزار توکنی، این نسبت معکوس میشود: وزنها به ۱۶٪ کاهش یافته و حافظه KV حدود ۸۴٪ حافظه را میبلعد. در مدل OPT-175B، این حافظه در اندازه دسته ۵۱۲ با یک پرامپت ۵۱۲ توکنی میتواند به ۱.۲ ترابایت برسد که بسیار فراتر از حجم وزنهای مدل است.
مشکل تنها ظرفیت نیست؛ بلکه GPU باید برای تولید هر توکن جدید، کل حافظه KV را از حافظه دستگاه بخواند. در حالی که GPU در حال خواندن حافظه پنهان است، هستههای محاسباتی بیکار میمانند. بنابراین، کاهش اندازه حافظه مستقیماً باعث افزایش فضای پردازشی (Processing Headroom) و کاهش زمان انتظار برای انتقال دادهها میشود.
هندسه خطای کوانتش
در کوانتش صحیح عدد یکنواخت (Uniform Integer Quantization)، کوچکترین عدد به عنوان نقطه صفر ثبت شده و محدوده گروه بر تعداد سطوح قابل نمایش تقسیم میشود تا اندازه گام (Step Size) به دست آید. سپس هر عنصر به نزدیکترین گام گرد میشود. این فرآیند دو نتیجه دارد: خطای هر عنصر توسط نصف یک گام محدود میشود و اندازه گام برابر است با محدوده گروه تقسیم بر 2^B - 1.
در دقت ۲ بیت، تنها ۴ سطح وجود دارد. اگر یک عنصر ۱۰۰ برابر بزرگتر از همسایگانش باشد، اندازه گام را برای کل گروه افزایش داده و باعث میشود تمام عناصر دیگر با دقت بسیار کمی (خشنتر) نمایش داده شوند. در اینجا «گروه» واحد آسیب است. سوال این نیست که «چه تعداد بیت میتوانیم متحمل شویم؟»، بلکه این است که «مقادیر پرت (Extreme Values) کجا هستند و آیا میتوانیم آنها را ایزوله کنیم؟»

یافتههای کلیدی مطالعه KIVI نشان میدهد که کلیدها و مقادیر ساختارهای متفاوتی از مقادیر پرت دارند:
- کلیدها (مشکل کانال): مدلهای زبانی دارای «چاههای توجه» (Attention Sinks) هستند؛ کانالهای ثابتی با مقادیر بسیار عظیم. در مدل Mixtral 8x7B، بزرگترین مقدار نزدیک به ۷۰۰۰ است در حالی که میانه مقادیر حدود ۰.۳ است؛ تفاوتی در ابعاد چهار مرتبه بزرگی. اینها سوگیریهای ضمنی هستند که توجه را روی چند توکن خاص متمرکز میکنند.
- راهکار کلیدها: در حافظه کلید، کانالهای خاصی بهطور مداوم در تمام توکنها مقادیر بزرگی دارند. گروهبندی بر اساس توکن باعث میشود هر گروه شامل این مقادیر پرت باشد و اندازه گام را برای کانالهای عادی افزایش دهد. اما گروهبندی بر اساس کانال، مقادیر پرت را در گروههای خودشان ایزوله میکند.
- معیارهای کلید: KIVI گزارش میدهد که خطای بازسازی کلید در گروهبندی توکن-محور ۱۳.۶۷ است، در حالی که در کانال-محور به ۴.۵۵ میرسد. مهمتر از آن، خطای امتیاز توجه در حالت توکن-محور ۴۷.۰۰ و در حالت کانال-محور ۹.۶۰ است؛ یعنی کوانتش توکن-محور تقریباً ۵ برابر خطای بیشتری در امتیازات ایجاد میکند.
- مقادیر (مشکل توکن): حافظه مقدار نسبتاً تخت است و الگوی پرتهای کانالی را ندارد. بر اساس استدلالهای محدوده، انتظار میرود هر دو محور کیفیت مشابهی ایجاد کنند، اما اینطور نیست. فشردهسازی مقادیر بهصورت کانال-محور، مدل را بدون توجه به نحوه پیادهسازی کلیدها، تخریب میکند.
تله خطای بازسازی
یکی از خطرناکترین یافتههای پژوهش KIVI این است که «خطای بازسازی خام» (Raw Reconstruction Error) برای حافظه مقادیر، معیاری فریبنده است. روی کاغذ، کوانتش کانال-محور برای مقادیر کمی بهتر به نظر میرسد، با معیار تنسور ذخیرهشده ۳.۷۳ در مقابل ۴.۵۷ برای توکن-محور.
اما حافظه مقدار هرگز مستقیماً خوانده نمیشود. این حافظه در یک ضرب ماتریسی مصرف میشود که در آن خروجی توجه، مجموع وزنی بردارهای مقدار در تمام توکنهاست و از امتیازات توجه softmax به عنوان وزن استفاده میکند. خطای مربوطه، خطایی است که در این فرآیند ایجاد میشود، نه خطای موجود در خود تنسورها.
از آنجا که توجه پراکنده (Sparse) است — که در حدود ۸۴.۳٪ اندازهگیری شده — اکثر اطلاعات خروجی از تعداد کمی توکن مهم میآید.
- کوانتش توکن-محور: خطا را به توکنهای خاص محدود میکند. خطاهای توکنهای غیرمهم در ضرب با وزنهای توجه نزدیک به صفر، عملاً ناپدید میشوند.
- کوانتش کانال-محور: خطای هر توکن را در یک مقیاس کانال مشترک پخش میکند. توکنهایی که بد نمایش داده شدهاند، نمایش توکنهایی را که واقعاً اهمیت دارند، آلوده میکنند.
در اندازهگیری خروجی توجه، خطای نسبی برای کوانتش توکن-محور ۳.۵۵ بود، در حالی که برای کانال-محور ۴۹.۸۹ بود؛ یعنی بیش از ۱۴ برابر بیشتر برای روشی که بر اساس خطای بازسازی، بهتر به نظر میرسید.

این یک درس کلیتر است: خطای فشردهسازی را در جایی اندازهگیری کنید که تنسور مصرف میشود، نه جایی که ذخیره شده است. خطای بازسازی فرض میکند هر جزء تنسور وزن یکسانی دارد، اما مکانیزم توجه صراحتاً اینطور نیست. هر عملیاتی که ورودی را وزندهی، گیت (Gate) یا پراکنده کند، این فرض را میشکند.
موانع پیادهسازی و RoPE
رمزگذاری موقعیت چرخشی (RoPE) با چرخاندن جفتکانالها بر اساس موقعیت نسبی هر توکن، این موضوع را پیچیده میکند. این ترکیب، ساختار کانالهای ثابت کلیدها را از بین میبرد؛ یک کانال پرت به همسایگانش میچرخد و آن همسایگان محدوده بزرگ را به ارث میبرند.
پژوهشها روی RotateKV گزارش دادند که پس از افزودن RoPE، خطاهای کوانتش ۱۴۵٪ افزایش مییابد. کانالهای پرت در سرهای توجه (Attention Heads) مختلف متفاوت هستند، به این معنی که یک ماتریس چرخش مشترک کافی نیست و چرخشهای تطبیقی با هر سر (Head-adaptive) عملکرد بهتری دارند.
برای حل این مشکل، KVQuant ترتیب خاصی را پیشنهاد میکند: ابتدا کلیدها را کوانتش کنید، سپس چرخش را اعمال کنید و در نهایت بعد از رمزگشایی (Dequantization)، RoPE را اجرا کنید. این رویکرد، در ترکیب با انواع دادههای غیریکنواخت و ایزوله کردن بخش کوچکی از مقادیر پرت، به LLaMA-7B اجازه میدهد تا روی یک GPU مدل A100-80GB، تا ۱ میلیون توکن زمینه را با کاهش کمتر از ۰.۱ در perplexity در دقت ۳ بیت پشتیبانی کند.
هزینه سیستمی و بافرهای باقیمانده
کوانتش توکن-محور با جریان رمزگشایی (Decoding) سازگار است: هر توکن که میرسد، کوانتش شده و در امتداد محور توکن به توالی اضافه میشود.
اما کوانتش کانال-محور با این جریان سازگار نیست. زیرا آمار یک کانال شامل توکنهایی است که هنوز تولید نشدهاند، بنابراین نمیتوانید در لحظه رسیدن یک توکن، ضریب مقیاس را محاسبه کنید. KIVI این مشکل را با یک بافر باقیمانده (Residual Buffer) حل میکند که ۱۲۸ توکن اخیر را با دقت کامل نگه میدارد و تنها پس از تجمع تعداد کافی، آنها را در گروهها کوانتش میکند.
این بافر برای صحت مدل حیاتی است. در آزمون GSM8K با مدل Llama-2-7B، نمره دقت کامل ۱۳.۵۰ است. کوانتش کامل ۲ بیتی با محورهای درست نمره ۵.۷۶ میگیرد، اما با افزودن بافر باقیمانده با دقت کامل، این نمره به ۱۲.۷۴ جهش میکند. یک پنجره لغزان از توکنهای اخیر، بسیاری از تلفات در مسائل دشوار چندمرحلهای را جبران میکند، احتمالاً به این دلیل که این توکنها در زنجیرههای محاسباتی بهشدت مورد توجه قرار میگیرند.
دستاوردهای عملکردی
بهینهسازیهای هندسی در صورت اجرای درست، دستاوردهای عظیمی دارند. KIVI گزارش میدهد:
- کاهش ۲.۶ برابری در اوج مصرف حافظه برای Llama-2-7B.
- امکان پشتیبانی از اندازه دستههای تا ۴ برابر بزرگتر.
- بهبود ۲.۳۵ تا ۳.۴۷ برابری در توان عملیاتی (Throughput) برای وظایف واقعی.
این تغییر، فرض بنیادی کوانتش را از یک «بودجه دقت» (چند بیت میتوانم متحمل شوم؟) به یک سوال ساختاری تغییر میدهد (کدام محور به نحوه مصرف تنسور احترام میگذارد؟).
دستورالعملهای عملی برای پیادهسازی
برای متخصصان، دستورالعمل روشن است:
- هرگز از یک کوانتایزر برای هر دو استفاده نکنید: برای کلیدها از کانال-محور و برای مقادیر از توکن-محور استفاده کنید. استفاده از یک کوانتایزر واحد برای کل حافظه KV، بیشتر کیفیت ممکن در بیتهای پایین را قربانی میکند.
- کلیدها را پیش از RoPE کوانتش کنید: این یک موضوع مربوط به صحت است، نه ترجیح شخصی.
- یک پنجره با دقت کامل ذخیره کنید: بافری از توکنهای اخیر تولید شده را نگه دارید. اگرچه حافظه کمی مصرف میکند، اما برای دقت در وظایف دشوار حیاتی است.
- از خطای بازسازی دوری کنید: اعتبارسنجی را بر اساس خروجی توجه یا عملکرد نهایی تسک انجام دهید. معیار ذخیرهسازی نه تنها نویز دارد، بلکه برای مقادیر، در جهت اشتباه اشاره میکند.
- از بنچمارکهای چندگزینهای با زمینه کوتاه دوری کنید: نویسندگان KIVI از تسکهای بسته مانند MMLU دوری کردند زیرا یک مرحله رمزگشایی که تنها لوجیتهای خروجی را میخواند، بهسختی حافظه KV را به چالش میکشد. ارزیابی باید با ایجاد حافظه در طول زمان و انجام تولید متن صورت گیرد تا شکستهای سیستمی مشاهده شوند.
مسیرهای آینده
پژوهشها اکنون به سمت InnerQ حرکت میکنند که نرمالسازی کانال-محور کلیدها را در طول مرحله prefill در وزنهای کلید و کوئری ادغام میکند تا سربار زمان اجرا حذف شود. InnerQ همچنین پنجرههای با دقت بالا را هم برای توکنهای اخیر و هم برای توکنهای «چاه توجه» (Attention Sink) ذخیره میکند تا از آلودگی کانالهای همسایه توسط پرتهای چاه جلوگیری شود.
پیشنهادهای دیگر، ذخیره تنها مقدار کافی از اطلاعات برای بازسازی (Rematerialize) کلیدها و مقادیر در صورت نیاز از یک نمایش ذخیرهشده کوچکتر را مطرح میکنند.
در نهایت، دقت تنها پارامتر تحت تأثیر نیست. تحقیقات اخیر نشان میدهد که کوانتش حافظههای KV منجر به تخریب تراز (Alignment Degradation) میشود، حتی در محیطهای تولیدی vLLM که از حافظههای FP8 استفاده میکنند. در حالی که یک پروتکل بازیابی بدون نیاز به آموزش میتواند تا ۹۷٪ از تراز از دست رفته را برگرداند، پیکربندیای که نتایج بنچمارک را حفظ میکند، ممکن است همچنان سایر پارامترهای حیاتی را از دست بدهد.
اصل کلی
دقت در گروهها تخصیص مییابد؛ گروه، واحد آسیب است و محوری که در امتداد آن گروهبندی میکنید، تعیین میکند کدام عناصر سرنوشت مشترکی داشته باشند. محور درست، محوری است که تنسور شما در آن مصرف میشود — یعنی نحوه استفاده شما از تنسور، نه نحوه ظاهر شدن آن در حافظه.
کلیدها از طریق محاسبه ضرب داخلی با کوئری استفاده میشوند؛ یک کانال فاسد، تمام امتیازات را مسموم میکند. مقادیر از طریق یک محاسبه میانگین وزنی پراکنده در تمام توکنها مصرف میشوند؛ بنابراین، یک توکن فاسد بهسادگی توسط وزنها حذف میشود. هنگام فشردهسازی هر فعالساز، باید پرسید: چه عملیاتی این داده را منقبض میکند و آیا گروهبندی من به آن احترام میگذارد؟




گفتگو