رفتن به محتوای اصلی
کوهستان
توضیح کوهستانزیرساخت هوش مصنوعیمقاله تشریحی· 5 دقیقه مطالعه· در هوش مصنوعی

چگونه کش KV مشکل تاخیر در مدل‌های زبانی بزرگ را حل می‌کند

در حالی که سازندگان سخت‌افزار بر سرعت خام پردازش تاکید دارند، گلوگاه اصلی در استنتاج هوش مصنوعی مدرن، کش KV است؛ یک بانک حافظه عظیم که از محاسبه مجدد زمینه قبلی توسط مدل جلوگیری می‌کند. با بزرگ‌تر شدن پنجره‌های زمینه، این حافظه کوتاه‌مدت از خود مدل پیشی می‌گیرد و نیاز به مدیریت پیشرفته حافظه را ضروری می‌سازد.

به قلم آزاده ابراهیمی

به‌طور خلاصه

  • کش KV محاسبات قبلی توکن‌ها را ذخیره می‌کند تا هوش مصنوعی مجبور نباشد تاریخچه کل مکالمه را برای هر کلمه جدید دوباره محاسبه کند.
  • اگرچه این روش مشکل گلوگاه پردازشی را حل می‌کند، اما خود باعث ایجاد یک گلوگاه عظیم در حافظه می‌شود که به صورت خطی با طول زمینه رشد می‌کند.
  • یک پنجره زمینه ۱۲۸ هزار توکنی در یک مدل ۷۰ میلیارد پارامتری، صرفاً برای کش خود به ۴۰ گیگابایت حافظه اختصاصی VRAM نیاز دارد.

سازندگان سخت‌افزار و تابلوهای امتیازات بنچمارک اغلب ادعا می‌کنند که سرعت خام پردازش گرافیکی (GPU) - که با ترافلاپس اندازه‌گیری می‌شود - گلوگاه اصلی برای تولید سریع‌تر متن است. اما داده‌های پروفایلینگ از سرورهای استنتاج در محیط‌های عملیاتی این فرض را رد می‌کند.

برای مدل‌های زبانی بزرگ مدرن، پهنای باند حافظه است که زمان تولید را تعیین می‌کند، نه محاسبات ریاضی خام. محدودیت واقعی سرعت، زمان صرف شده برای واکشی کلیدها (Keys) و مقادیر (Values) از پیش محاسبه شده از مکانیزمی به نام کش KV است؛ مکانیزمی که از محاسبه مجدد کل تاریخچه مکالمه برای هر کلمه‌ای که مدل می‌نویسد، جلوگیری می‌کند.[1][4][5]

با گسترش مدل‌های زبانی برای پشتیبانی از پنجره‌های زمینه ۱۲۸ هزار توکنی یا بیشتر، حافظه مورد نیاز برای ذخیره این تاریخچه مکالمه به صورت خطی رشد می‌کند و اغلب از اندازه خود مدل فراتر می‌رود. هنگام تولید هر توکن، معماری‌های مدرن ضرب‌های ماتریس-بردار نسبتاً سبکی را انجام می‌دهند، اما این عملیات نیازمند بارگذاری مکرر مقادیر عظیمی از داده‌ها از حافظه است. این پویایی، چالش اساسی استقرار هوش مصنوعی را از یک مشکل پردازشی به یک مشکل ظرفیت حافظه تبدیل می‌کند.[1][3][4][5]

برای درک چرایی وجود این کش، باید به نحوه عملکرد مکانیزم توجه (Attention) نگاه کرد. وقتی یک مدل هوش مصنوعی جمله‌ای را تولید می‌کند، در یک حلقه خودهمبسته (Autoregressive) هر بار یک توکن را پیش‌بینی می‌کند. برای هر توکن جدید، مدل باید یک امتیاز توجه در برابر تمام توکن‌های قبلی محاسبه کند تا زمینه را درک کرده و انسجام متن را حفظ کند.[1][4]

بدون مکانیزم کش، تولید یک پاسخ ۱۰۰۰ کلمه‌ای مستلزم آن است که مدل روابط ریاضی را برای کلمه اول ۱۰۰۰ بار، برای کلمه دوم ۹۹۹ بار و به همین ترتیب دوباره محاسبه کند. این محاسبات اضافی به صورت نمایی (درجه دوم) افزایش می‌یابد، که باعث می‌شود چت‌بات‌های بلادرنگ و جریان‌های کاری عامل‌محور (Agentic) به طرز غیرممکنی کند و به شدت پرهزینه شوند.[1]

کش KV هزینه محاسباتی درجه دوم (Quadratic) در تولید خودهمبسته را به یک هزینه خطی تبدیل می‌کند.

کش KV با عمل کردن به عنوان یک بانک حافظه اختصاصی این مشکل را حل می‌کند. هنگامی که بردارهای کلید (Key) و مقدار (Value) یک توکن در یک لایه محاسبه می‌شوند، به جای دور ریخته شدن، در حافظه GPU ذخیره می‌شوند. وقتی مدل نیاز به تولید توکن بعدی دارد، به سادگی این بردارهای از پیش محاسبه شده را بازیابی کرده و تنها محاسبات جدیدترین توکن را به کش اضافه می‌کند.[1][2]

این بهینه‌سازی با موفقیت تولید متن را از یک مشکل محاسباتی درجه دوم به یک مشکل خطی تبدیل می‌کند. با این حال، این روش یک گلوگاه پردازشی را با یک گلوگاه ظرفیت حافظه معاوضه می‌کند. حجم عظیم داده‌های تولید شده توسط کش KV، به ویژه برای استقرارهای در مقیاس سازمانی، حیرت‌انگیز است.[1][2][4]

برای یک مدل ۷۰ میلیارد پارامتری مانند Llama 3.3، هر توکن در پنجره زمینه به حدود ۰٫۳۲ مگابایت فضای ذخیره‌سازی کش KV با دقت ۱۶ بیتی نیاز دارد. یک جلسه منفرد با ۱۲۸ هزار توکن زمینه، تقریباً ۴۰ گیگابایت از فضای ذخیره‌سازی کش KV را مصرف می‌کند.[1]

برای یک مدل ۷۰ میلیارد پارامتری، یک پنجره زمینه ۱۲۸ هزار توکنی صرفاً برای کش KV به ۴۰ گیگابایت VRAM نیاز دارد.

در یک محیط عملیاتی با ۱۰۰ کاربر همزمان که هر کدام یک سند ۳۲ هزار توکنی را ارسال می‌کنند، کش KV به تنهایی حدود یک ترابایت VRAM مصرف می‌کند. این مقدار بسیار بیشتر از ظرفیت ۸۰ گیگابایتی یک پردازنده گرافیکی پیشرفته H100 است و صرفاً برای نگهداری تاریخچه مکالمه به خوشه‌های سرور عظیمی نیاز دارد، حتی اگر پردازنده‌های محاسباتی بیکار بمانند.[2][5]

ناکارآمدی پیاده‌سازی‌های اولیه این مشکل را تشدید کرد. همان‌طور که مهندسان GMI Cloud در آگوست ۲۰۲۶ اشاره کردند: «کش KV بزرگ‌ترین هزینه متغیر در استنتاج LLM است که اکثر تیم‌ها آن را به طور صریح مدیریت نمی‌کنند.»

سیستم‌های استنتاج سنتی بین ۶۰ تا ۸۰ درصد از حافظه تخصیص‌یافته کش KV را از طریق تکه‌تکه شدن (Fragmentation) و تخصیص بیش از حد هدر می‌دادند. از آنجا که حافظه در بلوک‌های پیوسته رزرو می‌شد، طول متغیر درخواست‌ها شکاف‌های عظیمی از VRAM غیرقابل استفاده به جا می‌گذاشت که به طور مصنوعی طول زمینه و توان عملیاتی را محدود می‌کرد.[1][6]

برای کاهش این مشکل، مهندسان تکنیک‌هایی مانند PagedAttention را توسعه داده‌اند که کش را به بلوک‌های غیرپیوسته تقسیم می‌کند و هدررفت حافظه را به زیر ۴ درصد کاهش می‌دهد. بهینه‌سازی حیاتی دیگر، کش کردن پیشوند (Prefix Caching) است که کش KV را برای پرامپت‌های سیستمی مشترک یا اسناد بازیابی شده یک بار ذخیره کرده و آن را در بین چندین کاربر مجدداً استفاده می‌کند، که این امر هزینه‌های ورودی موثر را برای زمینه‌های مشترک تا ۹۰ درصد کاهش می‌دهد.[1][5][6]

تکنیک‌هایی مانند PagedAttention کش را به بلوک‌های غیرپیوسته تقسیم کرده و هدررفت حافظه را به شدت کاهش می‌دهند.

با وجود این بهینه‌سازی‌های نرم‌افزاری، محدودیت‌های فیزیکی سخت‌افزار همچنان پابرجاست. یک مدل ۷۰ میلیارد پارامتری که به دقت ۴ بیتی کوانتیزه شده است، برای وزن‌های استاتیک خود به حدود ۳۵ گیگابایت VRAM نیاز دارد. با نرخ تخصیص ۰٫۳۲ مگابایت به ازای هر توکن، کش KV در دقیقاً ۱۱۲ هزار توکن از وزن‌های مدل به عنوان مصرف‌کننده اصلی حافظه پیشی می‌گیرد. پس از این آستانه، ردپای حافظه مدل کاملاً تحت سلطه حافظه کوتاه‌مدت خودش قرار می‌گیرد.[1][3][7]

تا سال ۲۰۲۶، با حرکت مدل‌ها به سمت پنجره‌های زمینه یک میلیون توکنی، صنعت در حال تغییر مسیر از بهینه‌سازی صرفاً محاسباتی به سمت مدیریت پیشرفته حافظه است. نسل بعدی سخت‌افزارهای استنتاج احتمالاً نه با تعداد ضرب‌های ماتریسی که می‌توانند در ثانیه انجام دهند، بلکه با میزان کارایی آن‌ها در مسیریابی، فشرده‌سازی و بازیابی جداول عظیم کلیدها و مقادیری تعریف می‌شود که به یک هوش مصنوعی اجازه می‌دهد رشته افکار منسجمی را حفظ کند.[4][5]

اصطلاحات کلیدی

کش KV
یک بانک حافظه که بردارهای کلید و مقدار از پیش محاسبه شده را در طول تولید متن ذخیره می‌کند و از محاسبه مجدد کل زمینه برای هر کلمه جدید توسط مدل جلوگیری می‌کند.
تولید خودهمبسته
فرآیندی که طی آن یک مدل هوش مصنوعی کلمه بعدی در یک دنباله را بر اساس تمام کلمات تولید شده قبلی پیش‌بینی می‌کند.
حافظه ویدیویی (VRAM)
حافظه پرسرعتی که به صورت فیزیکی به یک پردازنده گرافیکی متصل است و برای ذخیره وزن‌های مدل و کش KV در طول استنتاج استفاده می‌شود.
PagedAttention
یک الگوریتم مدیریت حافظه که کش KV را به بلوک‌های کوچک‌تر و غیرپیوسته تقسیم می‌کند تا تکه‌تکه شدن حافظه را از بین برده و اندازه دسته‌ها (Batch Sizes) را افزایش دهد.
کوانتیزاسیون
تکنیکی که دقت وزن‌های مدل یا کش KV را (مثلاً از ۱۶ بیت به ۴ بیت) کاهش می‌دهد تا حافظه را به قیمت افت جزئی در دقت ذخیره کند.

پرسش‌های متداول

کش KV دقیقاً چه چیزی را ذخیره می‌کند؟

این کش بردارهای کلید و مقدار تولید شده توسط مکانیزم توجه را برای تمام توکن‌های پردازش شده قبلی ذخیره می‌کند و به مدل اجازه می‌دهد تاریخچه مکالمه را بدون محاسبه مجدد آن به خاطر بسپارد.

چرا کش KV باعث خطاهای کمبود حافظه (Out-of-Memory) می‌شود؟

برخلاف وزن‌های مدل که اندازه ثابتی دارند، کش KV با هر توکن جدید تولید شده و هر کاربر همزمان به صورت خطی رشد می‌کند و به سرعت VRAM پردازنده گرافیکی را تخلیه می‌کند.

تکنیک PagedAttention چگونه کمک می‌کند؟

تکنیک PagedAttention با ذخیره کش KV در بلوک‌های غیرپیوسته، مشابه نحوه مدیریت حافظه مجازی توسط سیستم‌عامل‌ها، تکه‌تکه شدن حافظه را کاهش داده و هدررفت حافظه را از ۸۰ درصد به زیر ۴ درصد می‌رساند.

کش کردن پیشوند (Prefix Caching) چیست؟

کش کردن پیشوند، کش KV را برای متن‌های مشترک، مانند پرامپت‌های سیستمی یا اسناد بازیابی شده، ذخیره می‌کند تا بتوان آن را در بین چندین کاربر مجدداً استفاده کرد، که این امر مصرف حافظه و هزینه‌های ورودی را به میزان قابل توجهی کاهش می‌دهد.

بررسی عمیق دیدگاه‌ها

سازندگان سخت‌افزار

اولویت دادن به قدرت محاسباتی خام و سرعت ضرب ماتریس.

تولیدکنندگان سیلیکون به طور سنتی شتاب‌دهنده‌های خود را بر اساس ترافلاپس و قابلیت‌های محاسباتی خام بازاریابی می‌کنند. از این منظر، هدف به حداکثر رساندن تعداد عملیات ریاضی است که یک تراشه می‌تواند در ثانیه انجام دهد. با این حال، این جهان‌بینی مبتنی بر محاسبات اغلب واقعیت استنتاج LLM را پنهان می‌کند، جایی که پردازنده‌ها غالباً در انتظار تکمیل انتقال حافظه بیکار می‌مانند.

مهندسان استنتاج

تمرکز بر پهنای باند حافظه، ظرفیت VRAM و تکنیک‌های بهینه‌سازی کش.

برای تیم‌هایی که در واقع مدل‌ها را در محیط‌های عملیاتی مستقر می‌کنند، حافظه محدودیت اصلی است. آن‌ها کش KV را نه تنها به عنوان یک بهینه‌سازی، بلکه به عنوان یک مشکل عظیم مدیریت داده می‌بینند. تمرکز آن‌ها بر توسعه راه‌حل‌های نرم‌افزاری مانند PagedAttention، کش کردن پیشوند و کوانتیزاسیون برای گنجاندن توکن‌های بیشتر در VRAM محدود است و استدلال می‌کنند که پهنای باند حافظه - نه محاسبات - توان عملیاتی سیستم را دیکته می‌کند.

توسعه‌دهندگان برنامه‌ها

اولویت دادن به اندازه پنجره زمینه، تاخیر در تولید اولین توکن و هزینه به ازای هر درخواست.

توسعه‌دهندگانی که جریان‌های کاری عامل‌محور و سیستم‌های RAG را می‌سازند، در درجه اول به این اهمیت می‌دهند که چقدر زمینه می‌توانند به مدل بدهند و مدل با چه سرعتی پاسخ می‌دهد. آن‌ها کش KV را به عنوان یک توانمندساز برای برنامه‌های دارای زمینه طولانی، اما در عین حال به عنوان یک محرک هزینه پنهان می‌بینند. وقتی حافظه کش پر می‌شود، برنامه‌های آن‌ها از افت تاخیر نهایی (Tail Latency) و هزینه‌های بالاتر به ازای هر درخواست به دلیل محاسبه مجدد و اضافی پرامپت رنج می‌برند.

مهندسان استنتاج 40%سازندگان سخت‌افزار 30%توسعه‌دهندگان برنامه‌ها 30%
مهندسان استنتاج
تمرکز بر پهنای باند حافظه، ظرفیت VRAM و تکنیک‌های بهینه‌سازی کش.
سازندگان سخت‌افزار
اولویت دادن به قدرت محاسباتی خام و سرعت ضرب ماتریس.
توسعه‌دهندگان برنامه‌ها
اولویت دادن به اندازه پنجره زمینه، تاخیر در تولید اولین توکن و هزینه به ازای هر درخواست.

دیدگاه‌هایی که این گزارش پوشش نداده

  • توسعه‌دهندگان مدل‌های متن‌باز
  • مصرف‌کنندگان نهایی برنامه‌های کاربردی

منابع

پوشش منابع

7 منبع

3 دیدگاه شناسایی‌شده

مهندسان استنتاج 40%سازندگان سخت‌افزار 30%توسعه‌دهندگان برنامه‌ها 30%
  1. [1]GMI Cloudمهندسان استنتاج

    KV Cache Optimization for LLM Inference: How Cache-Aware Serving Reduces Cost and Latency

    مطالعه در GMI Cloud →
  2. [2]CloudSwitchمهندسان استنتاج

    KV Cache Is Growing Rapidly

    مطالعه در CloudSwitch →
  3. [3]Spheron Networkتوسعه‌دهندگان برنامه‌ها

    How Context Length Multiplies Memory

    مطالعه در Spheron Network →
  4. [4]Wekaمهندسان استنتاج

    KV Cache is the Bottleneck Nobody Talks About

    مطالعه در Weka →
  5. [5]BentoMLمهندسان استنتاج

    KV cache is often the real memory bottleneck

    مطالعه در BentoML →
  6. [6]Introlمهندسان استنتاج

    Traditional inference wasting 60-80% of KV cache memory

    مطالعه در Introl →
  7. [7]تیم سردبیری کوهستانمهندسان استنتاج

    تحلیل تیم سردبیری کوهستان

    مطالعه در تیم سردبیری کوهستان →

نظرات

همیشه در جریان باشید

هر زاویه. هر روز.

اخبار هوش مصنوعی با پوشش کامل منابع و تحلیل دیدگاه‌ها، هر روز و رایگان.