Serving transformer autoregresif sering memproses prefix prompt yang sama pada banyak request: system message, header dokumen panjang, atau tool schema tetap dapat muncul sebelum teks khusus pengguna. Prefix caching menyimpan state key-value yang dihasilkan prefix bersama tersebut sehingga request berikutnya dapat melanjutkan komputasi dari batas cache tanpa menghitung ulang seluruh prefix.
Batas yang berguna lebih sempit daripada sekadar “prompt yang mirip.” Reuse bergantung pada urutan token yang identik dan state model yang memengaruhi aktivasi tersimpan. Perubahan satu karakter dapat mempertahankan sebagian besar token, menggeser tokenisasi di sekitar perubahan, atau mengubah semua token setelah batas format tertentu. Cache hanya dapat memakai ulang bagian yang input efektifnya tetap identik.
Objek yang disimpan adalah state perantara model
Pada causal self-attention, setiap token yang telah diproses menghasilkan key dan value yang dapat diakses token berikutnya. Untuk satu layer transformer, representasi sederhananya dapat ditulis sebagai:
K_prefix = [k_1, k_2, ..., k_n]
V_prefix = [v_1, v_2, ..., v_n]Setelah token 1..n diproses, generasi token n+1 dapat memakai tensor tersebut tanpa menghitung ulang key dan value prefix. Sistem serving dapat mempertahankan state itu setelah satu request lalu memasangnya pada request lain yang dimulai dengan prefix yang kompatibel terhadap cache.
Ini berbeda dari menyimpan teks akhir. State tersimpan terikat pada konteks eksekusi model tertentu. Isinya merepresentasikan aktivasi setelah tokenisasi, embedding, perlakuan posisi, dan seluruh layer transformer hingga batas cache.
Penghematan komputasi berlaku pada prefill token yang dipakai ulang. Decode tetap harus memproses token baru yang dihasilkan, dan suffix yang tidak berada di cache tetap memerlukan prefill.
Kesamaan teks bukan cache key yang sebenarnya
Dua string yang tampak setara bagi manusia dapat menghasilkan tokenisasi berbeda. Whitespace, normalisasi Unicode, format template, special token, atau marker role chat dapat mengubah token ID yang diberikan ke model. Reuse prefix karena itu perlu dinilai pada level token dan state eksekusi, bukan hanya dari teks yang dirender.
Pertimbangkan dua request:
A = [system tokens][document tokens][question A tokens]
B = [system tokens][document tokens][question B tokens]Jika dua segmen pertama menghasilkan token ID yang sama dalam kondisi eksekusi yang sama, state tersimpannya dapat menjadi prefix bersama. Pertanyaan khusus request memulai suffix baru.
Memindahkan request identifier, timestamp, atau field lain yang berubah-ubah ke bagian awal akan memperpendek prefix bersama:
A = [system][request-id A][document][question A]
B = [system][request-id B][document][question B]Walaupun dokumennya identik, perbedaan muncul sebelum dokumen. Prefix cache sederhana tidak dapat melompati bagian yang berbeda lalu melanjutkan reuse pada bagian identik setelahnya, sebab hidden state berikutnya bergantung pada token sebelumnya.
Susunan prompt dengan demikian menjadi bagian dari desain serving. Materi stabil yang ditempatkan sebelum materi volatil membuka prefix kontigu yang lebih panjang untuk reuse tanpa mengubah arsitektur model.
Perlakuan posisi termasuk bagian dari kompatibilitas
Key dan value tersimpan dihasilkan untuk token pada posisi sequence tertentu berdasarkan mekanisme posisi model. Memakainya kembali pada posisi efektif berbeda secara umum tidak setara dengan menghitung ulang sequence.
Pada model dengan rotary position embeddings, rotasi yang bergantung pada posisi masuk ke representasi attention. Skema posisi lain memiliki state atau batas indexing masing-masing. Serving engine dapat menyediakan transformasi atau strategi pengelolaan cache khusus untuk arsitektur tertentu, tetapi perilaku tersebut bersifat spesifik implementasi.
Invarian yang aman adalah sebuah cache entry hanya valid di bawah semantik posisi yang diasumsikan saat entry dibuat. Menggabungkan segmen cache secara arbitrer tidak menjadi valid hanya karena token ID lokalnya sama.
Hal ini juga membatasi truncation. Menghapus token dari awal context dapat mengubah posisi efektif atau attention context token yang dipertahankan. Cache dari sequence asli tidak otomatis dapat diperlakukan sebagai state untuk sequence yang telah dipotong.
Identitas model mencakup lebih dari nama file bobot
KV cache mengenkode aktivasi yang dihasilkan parameter model. Perubahan parameter mengubah fungsi yang menghasilkan key dan value tersimpan. Cache entry karena itu perlu dipisahkan antar revisi model kecuali implementasi serving memiliki kontrak kompatibilitas yang spesifik.
Prinsip yang sama berlaku pada pengaturan eksekusi yang mengubah hidden state atau perilaku attention. Pemilihan adapter, konfigurasi arsitektur, attention mask, multimodal embedding, atau input lain yang relevan terhadap cache dapat membuat prefix token yang identik menjadi tidak kompatibel.
Tidak semua opsi request perlu masuk ke identitas cache. Sampling temperature yang diterapkan hanya setelah logits tersedia tidak mengubah key dan value prompt yang sudah dihitung. Sebaliknya, adapter yang mengubah projection transformer dapat langsung mengubah tensor cache.
Cache key yang tepat merepresentasikan input dan state model yang menentukan aktivasi tersimpan, bukan setiap field dalam objek request.
Panjang prefix dan batas block mengubah reuse yang terealisasi
Serving engine sering mengelola memori KV dalam block atau page, bukan satu alokasi per request. Prefix cache yang dibangun di atas unit tersebut dapat hanya memakai ulang block cache lengkap, sehingga tail pendek yang tidak cocok perlu dihitung ulang. Perilaku persis bergantung pada serving engine.
Hal ini menciptakan perbedaan antara panjang prefix bersama secara logis dan reuse cache yang benar-benar terjadi. Dua request dapat berbagi 2.050 token, sementara implementasi dengan cache block tetap dapat mengekspos wilayah reuse yang sedikit lebih pendek jika hanya block lengkap yang dapat dibagikan.
Hashing pada level block juga membuat lookup praktis: identitas block berikutnya dapat memasukkan identitas block sebelumnya bersama token atau data relevan lain di block saat ini. Struktur tersebut mempertahankan relasi prefix kausal. Block dengan token lokal identik tidak dianggap dapat dipertukarkan jika context sebelumnya berbeda.
Metrik cache karena itu sebaiknya melaporkan token atau block yang benar-benar dipakai ulang, bukan menyimpulkan reuse dari kemiripan prompt.
Reuse mengurangi kerja prefill tetapi mempertahankan state di memori
Prefix caching menukar komputasi ulang dengan KV state yang tetap disimpan. Prefix populer dapat mengurangi prefill berulang sambil menempati memori accelerator atau host selama cache mempertahankannya.
Biaya memori bertambah sesuai panjang sequence tersimpan, jumlah layer, konfigurasi KV head, head dimension, tipe data, dan jumlah prefix berbeda yang dipertahankan. Rumus byte persis bergantung pada arsitektur dan format penyimpanan, terutama saat engine melakukan quantization atau offload state cache.
Kebijakan eviction kemudian menjadi bagian dari perilaku serving. Cache dengan kapasitas tidak cukup dapat terus mengeluarkan prefix besar sebelum dipakai kembali, sehingga reuse aktual tetap kecil walaupun common-prefix rate secara teoritis tinggi. Sebaliknya, mempertahankan banyak prefix berfrekuensi rendah dapat menggusur sedikit entry yang sering dipakai.
Ini merupakan properti workload, bukan properti kualitas model. Model dapat menghasilkan output yang sama dengan atau tanpa prefix caching ketika cache diimplementasikan sebagai reuse eksak atas state perantara yang valid; perbedaannya terletak pada kerja serving dan penggunaan resource.
Isolasi cache dapat memiliki konsekuensi keamanan
Sistem serving bersama dapat memproses prompt dari pengguna atau tenant berbeda. Reuse KV state tidak mengharuskan teks prompt asli diekspos kepada pemanggil lain, tetapi lookup cache, timing, accounting, dan perilaku eviction tetap dapat melintasi batas isolasi jika implementasi berbagi entry secara global.
Batas yang tepat bergantung pada threat model. Sebagian sistem dapat mempartisi cache berdasarkan tenant atau authorization context. Sistem lain dapat mengizinkan sharing hanya untuk prefix yang dikendalikan penyedia, seperti system prompt tetap. Cache key berbasis konten saja tidak menetapkan otorisasi untuk berbagi state.
Siklus hidup cache juga relevan saat model diperbarui atau kebijakan berubah. Entry lama tidak semestinya bertahan ke konteks eksekusi yang sudah tidak memenuhi kondisi identitas ketika entry tersebut dibuat.
Prefix caching paling dapat diprediksi ketika diperlakukan sebagai memoization atas prefix eksekusi kausal, bukan semantic matching. Unit yang dapat dipakai ulang adalah prefix kontigu terpanjang dengan token, posisi, state model, dan input relevan terhadap cache yang masih mendeskripsikan komputasi yang sama. Semua bagian setelah batas inkompatibilitas pertama menjadi jalur eksekusi baru.