Decoding autoregresif dapat memakai ulang tensor key dan value dari posisi token sebelumnya tanpa menghitungnya kembali pada setiap tahap. KV cache konvensional karena itu bertambah seiring generation berjalan. Sliding-window cache membatasi state yang dipertahankan dengan menyimpan hanya area terbaru.
Batas memori tersebut tidak sekadar mengubah ukuran alokasi. Setelah entri key-value lama dikeluarkan, operasi attention berikutnya tidak dapat lagi mengakses posisi itu secara langsung melalui cache. Perilaku akhirnya bergantung pada pola attention model, skema posisi, implementasi cache, dan kemungkinan adanya layer dengan rentang attention berbeda.
State KV mewakili posisi lampau yang dipakai attention
Pada satu layer attention, token di posisi t menghasilkan key dan value yang dapat ditulis sebagai
k_t = x_t W_K
v_t = x_t W_VPada tahap decoding berikutnya, query baru dapat mengakses key yang tersimpan dan menggabungkan value terkait. Dengan causal cache tanpa batas lokal, state setelah T posisi memuat entri posisi sebelumnya yang diizinkan oleh attention mask model.
Cache menghindari pengulangan proyeksi key dan value untuk posisi tersebut. Namun, cache tidak membuat biaya attention terlepas dari panjang konteks: lebih banyak posisi membutuhkan lebih banyak memori cache, dan mengakses lebih banyak key juga dapat mengubah jumlah kerja yang dilakukan kernel attention.
Sliding window mengubah himpunan yang dipertahankan. Untuk window selebar W, implementasi dapat menyimpan interval terbaru yang terbatas alih-alih seluruh pasangan key-value sejak awal sequence. Batas tepat dan konvensi indeksnya bergantung pada implementasi, sehingga reproduksi perilaku memerlukan semantik cache yang benar-benar dipakai serving stack.
Eviction menghapus target attention langsung
Anggap query pada posisi berikutnya akan memberi bobot attention bukan nol kepada token yang jauh di luar window. Jika key dan value token itu sudah dikeluarkan, operasi attention tidak dapat memasukkan posisi tersebut sebagai target langsung. Kondisi ini berbeda dari sekadar memberinya bobot kecil: posisi itu tidak lagi berada dalam himpunan kandidat operasi tersebut.
Pemisahan ini relevan untuk prompt panjang. Panjang request dapat melampaui jumlah posisi yang dipertahankan oleh kebijakan cache lokal. Model masih dapat membawa informasi ke depan melalui hidden state yang dibentuk pada posisi perantara, tetapi mekanisme itu tidak sama dengan mempertahankan token awal sebagai entri key-value yang tetap dapat diakses langsung.
Informasi yang diteruskan melalui representasi berikutnya dapat berubah, tercampur dengan konten lain, terkompresi, atau tidak lagi terbawa. Eviction cache karena itu menetapkan batas akses, bukan pernyataan bahwa seluruh informasi lama hilang dari setiap representasi downstream.
Cache terbatas tidak berarti semua layer berperilaku sama
Varian Transformer tidak selalu memakai satu rentang attention yang seragam. Sebagian arsitektur menggabungkan local attention dengan layer yang memiliki rentang lebih luas. Arsitektur lain dapat memakai kebijakan cache atau attention mask berbeda pada layer tertentu.
Akibatnya, satu angka yang disebut sebagai ukuran window belum sepenuhnya menjelaskan pola akses efektif model. Jika satu layer mempertahankan konteks luas sementara layer lain memakai window lokal, query pada kedua layer tersebut melihat himpunan posisi lampau yang berbeda.
Kode serving dapat menambah perbedaan lain. Objek cache dapat memiliki kapasitas storage tetap sementara attention mask menentukan area yang lebih kecil, atau storage dapat disusun sebagai ring buffer yang memakai ulang slot fisik ketika posisi logis terus maju. Lokasi buffer fisik dan posisi token logis tidak boleh dianggap sebagai koordinat yang sama.
Penanganan posisi harus tetap benar saat slot dipakai ulang
Implementasi ring buffer dapat menimpa slot lama sambil terus menghasilkan token dengan posisi logis yang meningkat. Kode attention perlu membawa informasi posisi yang cukup untuk membedakan token baru dari token lama yang sebelumnya menempati slot fisik tersebut.
Hal ini relevan ketika informasi posisi ikut membentuk key dan query. Pemakaian ulang storage tidak dengan sendirinya mengatur ulang posisi sequence. Cache manager, kernel attention, dan mekanisme posisi harus sepakat mengenai pemetaan antara posisi logis dan entri yang masih dipertahankan.
Kesalahan pada pemetaan tersebut dapat terlihat seperti kerusakan konteks meskipun bentuk tensor dan batas memori tampak benar. Pengujian kapasitas cache saja belum cukup; progres posisi dan batas eviction juga merupakan bagian dari kontrak serving.
Prefill dan decode dapat memakai jalur cache berbeda
Prompt prefill sering memproses banyak token sekaligus, sedangkan decode biasanya menambahkan satu atau sedikit posisi per iterasi. Implementasi dapat memakai kernel atau jalur pembaruan cache yang berbeda untuk kedua fase tersebut.
Dengan sliding window, transisi ini menjadi relevan ketika prompt sudah lebih panjang daripada rentang yang dipertahankan. Serving stack perlu menetapkan posisi prompt mana yang mengisi cache pada akhir prefill dan bagaimana tahap decode pertama menafsirkan posisi logisnya. Sistem yang mempertahankan W entri terbaru setelah prefill tidak setara dengan sistem yang mematerialisasi subset lain lalu menerapkan masking belakangan.
Chunked prefill menambah batas lain. Pemrosesan prompt panjang dalam beberapa chunk harus mempertahankan state cache logis yang dimaksud pada setiap batas chunk. Ukuran chunk hanya menjadi detail eksekusi jika implementasi menjaga visibilitas attention dan semantik posisi yang setara.
Ukuran cache dan batas konteks model adalah kendala berbeda
Model dapat memiliki batas konteks yang lebih besar daripada local attention window. Kedua besaran tersebut menggambarkan batas berbeda. Batas konteks mengatur posisi yang diterima model atau konfigurasi serving; sliding window mengatur posisi tersimpan yang dapat dipakai langsung oleh operasi attention tertentu.
Sebaliknya, mengalokasikan cache dengan kapasitas besar tidak otomatis memberi model konteks yang lebih luas. Perilaku posisi, attention mask, arsitektur, dan validasi serving dapat menetapkan batas yang tidak bergantung pada memori tersedia.
Untuk deployment, kontrak yang berguna karena itu bukan sekadar jumlah byte cache. Kontrak tersebut mencakup rentang posisi logis yang dipertahankan, span attention per layer, aturan eviction, pemetaan posisi, perilaku prefill, dan semantik pembaruan saat decode. Dengan rincian tersebut, perhitungan memori dan analisis perilaku model mengacu pada kebijakan cache yang sama, bukan dua pengertian konteks yang berbeda.