KV cache berbatas tampaknya cocok dengan aturan eviction sederhana: pertahankan token terbaru dan buang token paling lama. Pada sebagian model bahasa transformer, aturan ini dapat menurunkan kualitas generasi meskipun prefix yang dibuang hanya membawa sedikit nilai semantik yang jelas. Sejumlah kecil posisi awal dapat menarik porsi attention yang besar sepanjang langkah decoding berikutnya. Posisi-posisi ini lazim disebut attention sink.

Perilaku ini penting untuk streaming inference karena cache eviction mengubah komputasi attention itu sendiri. Cache berukuran tetap yang mempertahankan beberapa posisi sink ditambah window terbaru dapat berperilaku berbeda dari cache yang hanya berisi jumlah posisi terbaru yang sama.

Normalisasi attention membuat eviction dapat diamati

Dalam causal self-attention, query pada posisi saat ini memberi skor pada key dari posisi yang masih terlihat. Softmax kemudian menormalisasi skor tersebut di seluruh himpunan yang terlihat. Menghapus cached key tidak sekadar menghapus value terkait: tindakan itu mengubah himpunan tempat attention mass didistribusikan.

Untuk satu attention head, weight dapat ditulis sebagai:

a_i = exp(s_i) / sum_j exp(s_j)

dengan s_i sebagai skor untuk visible key i. Jika key lama dengan skor besar dihapus, setiap weight yang tersisa dinormalisasi ulang. Output attention yang dihasilkan dapat bergeser meskipun token yang di-evict tampak tidak relevan jika prompt dibaca secara semantik.

Attention sink adalah posisi yang berulang kali menerima attention mass secara tidak proporsional. Token awal dapat mengambil peran ini pada sebagian model yang telah dilatih. Perilakunya bergantung pada model, sehingga sistem serving tidak boleh menganggap setiap arsitektur, checkpoint, layer, atau head memiliki pola sink yang sama.

Cache yang hanya menyimpan token terbaru mengubah lebih dari panjang konteks

Sliding cache dengan lebar W mempertahankan W pasangan key-value terbaru. Setelah generasi melampaui lebar tersebut, entry tertua dihapus untuk setiap entry baru. Penggunaan memori tetap berbatas, tetapi model tidak lagi menerima attention state yang sama seperti full-cache decoding.

Perbedaan ini mudah terlewat ketika ukuran cache disebut sebagai kapasitas konteks. Model yang dilatih dengan full causal attention dapat bergantung pada posisi yang dihapus oleh kebijakan recent-only. Mismatch yang dihasilkan tidak setara dengan memberikan prompt lebih pendek yang dibuat secara independen kepada model, karena positional encoding dan KV state yang dipertahankan masih mencerminkan riwayat generasi yang lebih panjang.

Kebijakan sink-aware sebaliknya mencadangkan slot cache untuk posisi awal tertentu dan memakai slot sisanya untuk token terbaru. Dengan total cache budget B, mempertahankan S posisi sink menyisakan kira-kira B - S slot untuk moving recent window. Memori tetap berbatas sementara komputasi attention mempertahankan posisi yang mungkin digunakan model sebagai tujuan stabil bagi attention mass.

Mempertahankan sink tidak menjaga informasi long-range secara sembarang

Mempertahankan posisi sink menyelesaikan masalah yang lebih sempit daripada retensi long-context secara umum. Token sink dapat menstabilkan perilaku attention, tetapi tidak memuat setiap fakta dari teks yang telah di-evict.

Misalkan sequence yang dihasilkan memuat definisi variabel yang jauh dari region sink awal maupun recent window. Setelah KV state-nya di-evict, token berikutnya tidak dapat melakukan attention langsung ke posisi tersebut dengan cached self-attention biasa. Mempertahankan beberapa token pertama tidak memulihkan dependency itu.

Hal ini menghasilkan dua persoalan terpisah. Retensi sink dapat mengurangi degradasi akibat penghapusan posisi awal yang penting secara struktural. Long-range retrieval membutuhkan kebijakan atau arsitektur yang juga mempertahankan posisi pembawa informasi di luar recent window. Menganggap keduanya sebagai masalah yang sama dapat menghasilkan cache yang mampu menghasilkan teks lancar tetapi gagal pada dependency yang melintasi region yang telah di-evict.

Penanganan posisi harus sesuai dengan model

KV eviction berinteraksi dengan positional encoding. Cached key dibuat pada posisi sequence tertentu, dan implementasi serving tidak dapat dengan aman menganggap eviction sebagai izin untuk menomori ulang state tersebut secara sembarang.

Untuk model yang menggunakan rotary position embeddings, informasi posisi dimasukkan ke representasi query dan key. Karena itu, implementasi cache membutuhkan strategi posisi yang konsisten dengan model dan metode inferensi. Sebagian skema streaming menggunakan transformasi posisi atau aturan indexing khusus cache; yang lain mempertahankan logical position asli. Ini adalah pilihan implementasi dengan konsekuensi spesifik terhadap model, bukan detail bookkeeping yang dapat dipertukarkan.

Kehati-hatian yang sama berlaku untuk absolute position embeddings dan mekanisme posisi lainnya. Kebijakan cache yang bekerja pada satu keluarga model tidak membuktikan perilaku yang setara pada keluarga lain.

Ukuran cache dan effective dependency span adalah kuantitas berbeda

Sink-aware cache dapat memiliki storage konstan sementara generasi berlanjut jauh melampaui jumlah token yang dapat ditampung cache. Hal itu tidak membuat effective attention span model menjadi tanpa batas.

Pada setiap langkah decoding, direct attention terbatas pada KV state yang masih tersedia. Model dapat membawa sebagian informasi terdahulu secara tidak langsung melalui hidden state terbaru, tetapi itu tidak sama dengan mempertahankan akses langsung ke setiap token sebelumnya. Klaim tentang panjang streaming karena itu harus membedakan bounded memory, stabilitas generasi, dan preservasi long-range dependency.

Perbedaan ini juga memengaruhi evaluasi. Perplexity atau kualitas continuation lokal dapat memperlihatkan sebagian kerusakan akibat kebijakan cache, sedangkan task yang membutuhkan referensi ke konten jauh menguji kemampuan yang berbeda. Desain cache untuk open-ended generation dan desain untuk long-document question answering dapat membutuhkan bukti yang berbeda.

Full-cache decoding menyediakan referensi yang berguna

Evaluasi praktis membandingkan output bounded-cache dengan model yang sama menggunakan KV cache tanpa pruning dalam kondisi decoding yang sama. Perbandingan ini dapat mengisolasi efek eviction dari perubahan sampling, format prompt, quantization, atau weight model.

Pengukuran yang berguna bergantung pada aplikasi. Token-level logit divergence dapat menunjukkan perubahan lokal sebelum sampled text terlihat menyimpang. Task metric dapat mengungkap long-range dependency yang hilang. Pengukuran memori mengonfirmasi batas cache sebenarnya. Pemeriksaan pola attention dapat membantu diagnosis, tetapi attention weight yang tinggi saja tidak membuktikan bahwa sebuah token secara kausal diperlukan untuk output tertentu.

Cache budget juga perlu divariasikan. Mencadangkan slot sink mengurangi ruang yang tersedia bagi recent context, sehingga reserved region yang terlalu besar dapat menukar satu sumber degradasi dengan sumber lainnya. Setting yang relevan adalah region sink terkecil yang tetap mempertahankan perilaku target untuk model dan workload tertentu.

Attention sink adalah constraint serving, bukan aturan token universal

Attention sink berguna karena memperlihatkan asumsi tersembunyi dalam naive KV eviction: posisi lama tidak selalu dapat dipertukarkan. Sebagian posisi dapat penting bagi struktur numerik attention meskipun teksnya tidak tampak informatif.

Hal ini tidak membenarkan hard-coding jumlah prefix token universal untuk semua model. Perilaku sink harus diverifikasi pada checkpoint yang benar-benar di-serving, dengan implementasi posisi dan cache yang benar-benar digunakan. Setelah perilaku tersebut terbukti, sink-aware retention dapat membatasi memori KV tanpa menyamakan penyimpanan recent-token dengan preservasi full attention state model.