KV cache در تولید خودبازگشتیِ ترنسفورمر، K و V توکنهای قبلی را نگه میدارد تا برای ادامهٔ همان پیشوند، دوباره از ابتدا ساخته نشوند. این با ذخیرهٔ جواب نهاییِ یک پرسش فرق دارد. کش میتواند محاسبهٔ تکراری را کم کند و در عوض حافظه بگیرد؛ مقدار آن به شکل معماری و طول دنباله وابسته است.
چه چیزی دوباره استفاده میشود؟
در attention علّی، توکنِ مرحلهٔ تازه به سابقه نگاه میکند. با ثابتبودن همان پیشوند و تنظیمات، K و V گذشته را میتوان نگه داشت و K/Vتوکن جدید را به آن افزود. این کار در هر لایه انجام میشود. کشِ این بحث، پایگاه دانش، حافظهٔ شخصی کاربر یا شاهد یادگیری تازهٔ وزن مدل نیست.
فرض کنید برای ساخت K/V، سه وضعیت طول۲،۳و۴را پشتسرهم بررسی میکنیم. بدون استفادهٔ دوباره، تعداد موقعیتهای توکنیِ پردازششده در این حساب ساده۲+۳+۴=۹است؛ با نگهداشتن گذشته،۲+۱+۱=۴. این، شمار موقعیتها برای همین سه طول است، نه تعداد عملیات کل، سه توکن خروجی یا نسبت زمان اجرای واقعی.
یک شکل کوچک را به بایت تبدیل کنیم
برای یک کشِ فرضیِ کامل، شکل K در هر لایه را batch×kv_heads×length×head_dimensionمیگیریم؛ Vهم همین تعداد مقدار دارد. پس بایت خام برابر است با 2 × layers × batch × length × kv_heads × head_dimension × bytes_per_value. ضریب۲برای KوVاست؛ تعداد لایهها هم جدا وارد شده است.
| تنظیم آموزشی | محاسبه | بایت خام K/V |
|---|---|---|
| ۲لایه،batch۱،طول۸،۲سرKV،بعد۴،۲بایت | 2×2×1×8×2×4×2 | 512 |
| همان تنظیم، طول۹ | یک توکن بیشتر | 576 |
| همان تنظیم اول،batch۲ | دو دنبالهٔ مستقلِ همطول | 1024 |
در همین مثال هر توکن۶۴بایت خام اضافه میکند. این مدل کوچک، مشخصات یک مدل واقعی نیست. کد فقط تعداد عنصر و بایت نظری را میشمارد؛ اشیای Python واقعاً در دو بایت برای هر مقدار تخصیص داده نشدهاند و مصرفGPUاندازهگیری نشده است.
چرا تعداد سرهای KV را جدا نوشتیم؟
در معماریهایی با گروهبندی یا اشتراک K/V، تعداد سرهای KVمیتواند با تعداد سرهای Queryفرق داشته باشد. مشخصات همان مدل و پیادهسازی را بخوانید؛ جایگزینکردن کورکورانهٔ هر عددی به نام «heads» میتواند برآورد را عوض کند. کش ثابتِ ازپیشاختصاصیافته، پنجرهٔ لغزان، نوع داده و روش ذخیره نیز میتوانند قرارداد حافظه را تغییر دهند.
این فرمول سربار، فضای موقت، padding، وزن مدل و سایر اجزاء را شامل نمیشود. برای برآورد کل، تفکیک وزن، کش و سربار مدل را ببینید و مقدار نظری را با اندازهگیریِ همان بار واقعی مقایسه کنید؛۵۱۲بایت این تمرین، نیاز کل مدل نیست.
با عوضشدن پیشوند چه میشود؟
استفادهٔ دوباره باید به پیشوند، موقعیتها، مدل و پیکربندی سازگار متصل باشد. عوضکردن متن قبلی یا جابهجایی موقعیتها را بیاثر فرض نکنید. همچنین کوتاهکردن یا حذف کش بدون قرارداد روش، تضمین حفظ همان رفتار نیست. مستندات همان موتور دربارهٔ نوع cacheوشرایط استفاده تعیینکنندهاند.
کش پاسخ و ابطال آن دربارهٔ ذخیرهٔ نتیجه و مرز مجوز است؛ آن مسئله با نگهداشتن K/Vداخل محاسبه تفاوت دارد. هر دو به حدود داده نیاز دارند، اما کلید، محتوا و هدفشان یکسان نیست.
تمرین و کنترل
CSVسه تنظیم و Python محاسبهٔ۵۱۲،۵۷۶،۱۰۲۴و تفاوت۶۴بایت را واقعاً کنترل کرده است. مدل، attentionواقعی، GPUیابنچمارک اجرا نشده است. برای تمرین، فقط تعدادسرKVرااز۲به۱تغییر دهید و ببینید سهم خام این کش چه میشود؛ سپس توضیح دهید چرا این کار بهتنهایی توصیهٔ تغییر معماری یک مدل آماده نیست. مسیر ادامه در مبانی هوش مصنوعی است؛ قابلیت داخلی محصول اپرا در این مثال اعلام نشده است.
فایل تمرین و منبع
سه شکل فرضی و تعداد بایت خام کش K و V · کد محلی شکل و شمارش؛ اندازهگیری VRAM نیست
منابع در ۳ نوامبر ۲۰۲۶ خوانده شدند؛ این تاریخ، تاریخ انتشار منبع نیست. مثالها و فایلهای این راهنما آموزشی و ساختهٔ تحریریهاند.