KV cache به زبون ساده و چرا برای ایجنتها حیاتیه
خلاصهٔ کاملتر
KV cache حافظهایه که یه مدل زبانی بزرگ نگه میداره تا تو هر جواب کل گفتگو رو از اول نخونه. KV یعنی keys و values، یعنی نمایشهای عددیای که مدل برای هر توکن حساب میکنه. اگه اینا ذخیره بشن، مدل فقط بخش جدید گفتگو رو پردازش میکنه. مقاله یه تشبیه ساده داره: کش مثل یادداشتهاته از خوندن یه کتاب؛ اگه نگهشون داری فقط فصل جدید رو میخونی.
به گفتهی مقاله، این موضوع برای ایجنتها خیلی مهمتر از چتباتهاست. هر tool call، هر فایلی که خونده میشه و هر جواب به تاریخچه اضافه میشه و بدون کش، کل این تاریخچه تو هر نوبت دوباره پردازش میشه. تو یه تست، زمان جواب از حدود یک دهم ثانیه تو نوبت اول به نزدیک 19 ثانیه تو نوبت 25 رسید. یه جلسهی 30 نوبتی بدون کش، فقط تو نوبت آخر حدود 115 هزار توکن و در کل بیش از 2 میلیون توکن رو دوباره خوند.
عددهای تستها هم قابلتوجهه. یه پرسش روی یه سند بزرگ بدون کش حدود 1.35 ثانیه طول کشید و با کش به 112 تا 122 میلیثانیه رسید، یعنی حدود 11 تا 12 برابر سریعتر. با 16 کلاینت همزمان، زمان از 187 ثانیه بدون کش به 107 ثانیه با کش پیشفرض GPU و 69 ثانیه با CPU offload رسید. تو یه جلسهی ایجنت کدنویسی با هشت ایجنت روی یه GPU، تأخیر نوبتهای آخر از 104 ثانیه به حدود 2.1 ثانیه افتاد و تو یه ترکیب دیگه بهرهوری تا 7.5 برابر شد.
جای نگهداری کش هم مهمه. کش باید نزدیک GPU باشه و هرچی مدل از حافظهی GPU بگیره، از سهم کش کم میشه. چهار حالت مقایسه شدن: بدون کش؛ prefix cache داخلی (یعنی کشی که فقط وقتی پرامپت جدید دقیقاً با همون شروع قبلی شروع بشه کار میکنه و تو vLLM پیشفرض روشنه)؛ CPU offload که اضافهی کش رو به RAM سیستم میریزه؛ و یه لایهی کش جدا مثل پروژهی متنباز LMCache که بیرون از پروسهی سرور، تو RAM یا حتی NVMe نگه داشته میشه.
فرق اصلی موقع ریاستارت معلوم شد. بعد از ریاستارت سرور، prefix cache داخلی و CPU offload هر دو پاک شدن و جواب دوباره به حدود 1.35 ثانیه برگشت. ولی کش خارجی چون تو یه پروسهی دیگه بود سالم موند و بلافاصله جواب 141 میلیثانیهای داد. LMCache همچنین میتونه تیکههای کششده رو حتی وقتی ترتیب سندها عوض شده دوباره استفاده کنه، که برای RAG (یعنی وقتی سندهای بازیابیشده به پرامپت اضافه میشن) بهدرد میخوره.
نویسنده معتقده لایهی کش جدا همیشه لازم نیست. اگه کش تو حافظهی GPU جا بشه، همون کش پیشفرض vLLM کافیه و اگه گاهی سرریز بشه ولی تو RAM جا بشه، CPU offload تقریباً همونقدر خوبه. کش خارجی سرویس جدا و تنظیمات بیشتری میخواد، گاهی ریاستارت رو کندتر کرده و پشتیبانیش از مدلهای با معماری غیرمعمول مثل hybrid attention عقبتره. یادت باشه کش فقط سرعت و هزینه رو بهتر میکنه و روی کیفیت جواب هیچ اثری نداره.
نکات کلیدی:
- جلسهی 30 نوبتی بدون کش بیش از 2 میلیون توکن رو دوباره پردازش کرد
- پرسش روی سند بزرگ: 1.35 ثانیه بدون کش، حدود 112 تا 122 میلیثانیه با کش
- هشت ایجنت روی یه GPU: از 104 ثانیه به حدود 2.1 ثانیه در هر نوبت
- prefix cache داخلی vLLM با ریاستارت سرور پاک میشه
- LMCache بعد از ریاستارت در 141 میلیثانیه جواب داد
- کش هیچ اثری روی دقت یا هوش مدل نداره




