Cache hit pada prefix berhenti di titik pertama ketika request baru tidak lagi dapat memakai state yang sudah dihitung. Objek yang digunakan ulang bukan sekadar potongan teks. Objek tersebut adalah state model dari urutan prefix token tertentu, dengan kondisi eksekusi yang membuat state itu kompatibel dengan request baru.

Pada inference transformer, state tersebut umumnya berupa key-value cache yang dibentuk saat prefill. Pemakaiannya kembali dapat menghapus komputasi berulang pada prefix yang sama, sedangkan suffix setelah titik divergensi tetap diproses secara normal.

Reuse mengikuti identitas dan urutan token

Perhatikan dua sequence token:

A = [t0, t1, t2, t3, a0, a1]
B = [t0, t1, t2, t3, b0, b1]

Empat posisi pertama membentuk prefix yang sama. Jika state cache-nya kompatibel, request B dapat melanjutkan dari state KV setelah t3 tanpa menghitung ulang keempat posisi tersebut.

Batas yang relevan bersifat posisional. Rentang token yang kebetulan sama di bagian lain request tidak memberikan properti yang sama. State attention autoregresif pada suatu token bergantung pada konteks sebelumnya, sehingga token ID identik yang dicapai melalui prefix berbeda pada umumnya bukan state KV yang dapat saling menggantikan.

Karena itu, kesamaan teks bukan kunci cache yang paling kuat. Tokenisasi, identitas model, state adapter, input multimodal, dan input lain yang memengaruhi eksekusi dapat mengubah state meskipun prompt terlihat serupa.

Granularitas blok dapat memperpendek prefix yang terpakai

Inference engine sering mengelola memori KV dalam blok. Dua request dapat berbagi lebih banyak token daripada jumlah yang dapat dialamatkan cache sebagai unit reusable.

Dengan blok empat token, misalnya, request lama berisi:

[A B C D] [E F G H]

sedangkan request baru dimulai dengan:

[A B C D] [E F X Y]

Secara logis keduanya memiliki enam token awal yang sama. Namun cache yang hanya mendaftarkan blok penuh berukuran empat token dapat langsung memakai blok pertama. Blok kedua tidak identik sebagai satu unit cache penuh.

Batas ini berasal dari implementasi, bukan aturan transformer. Engine dengan granularitas pencocokan prefix yang lebih halus dapat menghasilkan batas reuse berbeda tanpa mengubah semantik model.

Desain prefix caching vLLM saat ini membentuk hash unit cache dari token ID, hash prefix induk, dan field identitas tambahan. Dokumentasinya juga membedakan granularitas pencocokan prefix dari ukuran blok KV fisik pada konfigurasi yang mendukung pencocokan lebih halus.

Cache hit mengurangi prefill, bukan decode

Untuk prompt sepanjang P token dengan prefix reusable sepanjang C token, bagian prompt yang tidak berasal dari cache berjumlah:

P - C

token. Prefix caching dapat menghindari komputasi model untuk bagian yang sudah tersimpan selama prefill. Mekanisme ini tidak menghapus forward pass autoregresif untuk token baru yang dihasilkan.

Perbedaan tersebut menentukan karakter workload yang mendapat manfaat besar. Prefix panjang yang berulang menyediakan prefill dalam jumlah besar untuk dipakai kembali. Request dengan continuation keluaran yang panjang masih dapat menghabiskan sebagian besar waktu eksekusi pada decode meskipun prefix hit-nya besar.

Cache juga tidak mengubah semantik sampling dengan sendirinya. Jika state KV yang dipakai ulang sama dengan state yang akan dihasilkan oleh komputasi ulang pada kondisi eksekusi kompatibel, reuse hanya mengganti prefill berulang dengan intermediate state yang sudah tersimpan.

Identitas cache lebih luas daripada token yang terlihat

Kunci cache yang aman perlu memisahkan state yang tidak dapat saling menggantikan. Karena itu, engine praktis dapat memasukkan data selain token ID ke dalam identitas cache.

Contohnya meliputi identifier adapter, hash input multimodal, data isolasi cache, atau parameter eksekusi model lain. Field persisnya bergantung pada implementasi. Fungsinya sama: mencegah prefix token yang tampak cocok memilih state dari kondisi yang tidak kompatibel.

Chained hash merupakan salah satu cara menjaga identitas prefix. Secara konseptual, kunci sebuah blok dapat ditulis sebagai:

H_i = H(H_{i-1}, tokens_i, extra_i)

dengan H_{i-1} mewakili prefix sebelumnya, tokens_i mengidentifikasi unit cache saat ini, dan extra_i membawa identitas eksekusi tambahan.

Nilai induk penting karena dua blok yang berisi token ID lokal sama tetapi memiliki token pendahulu berbeda tidak otomatis mewakili state autoregresif yang sama.

Eviction membuat reuse bergantung pada waktu

Prefix yang pernah dihitung hanya dapat digunakan ulang selama state cache-nya masih tersedia. Kapasitas memori KV yang terbatas membuat reuse bergantung pada residensi cache selain kemiripan request.

Engine dapat mempertahankan blok yang sedang tidak aktif untuk request berikutnya, lalu melakukan eviction saat memori diperlukan. Request berikutnya bisa memiliki prefix token yang sama persis tetapi tidak memperoleh cache hit karena blok terkait sudah direklamasi.

Pelacakan referensi menambahkan batas lain. State yang sedang dipakai request aktif tidak dapat diperlakukan sama dengan blok cache tanpa referensi yang boleh dieviction. Cache manager umumnya melacak identitas sekaligus liveness untuk menentukan blok fisik yang dapat dialokasikan kembali.

Dengan demikian, hit rate dipengaruhi urutan workload, tekanan memori, kebijakan eviction, dan granularitas pencocokan. Duplikasi prompt saja tidak menentukannya.

Cache bersama membentuk batas isolasi

Reuse antar-request dapat membocorkan informasi melalui timing. Request yang mendapat hit pada prefix besar dapat mencapai token keluaran pertama lebih cepat dibanding miss yang setara. Pada layanan bersama, latency dapat menjadi sinyal bahwa state tertentu sudah berada di cache jika cache tidak dipartisi atau diisolasi.

vLLM mendokumentasikan cache salting untuk batas ini. Salt ikut menjadi bagian identitas cache sehingga request dengan salt berbeda tidak berbagi blok prefix. Konsekuensinya adalah pengurangan sebagian reuse antar-request untuk membentuk isolasi di antara trust domain.

Pemilihan hash juga merupakan detail implementasi penting. Lookup cache berbasis hash perlu memperhitungkan risiko collision karena pemilihan state KV yang salah bukan sekadar collision pada cache metadata biasa. Dokumentasi vLLM saat ini memakai SHA-256 sebagai hash default untuk prefix caching dan memperingatkan bahwa alternatif non-kriptografis memiliki profil risiko collision berbeda.

Reuse berhenti saat ekuivalensi state berhenti

Prefix caching merupakan penggunaan ulang state secara eksak, bukan pencocokan prompt secara aproksimatif. Rentangnya dibatasi oleh prefix token kompatibel terpanjang yang dapat dialamatkan engine dan masih berada di cache.

Batas tersebut dapat lebih pendek daripada teks yang terlihat sama karena tokenisasi atau unit cache berbeda. Batasnya dapat hilang karena blok telah dieviction. Metadata isolasi juga dapat sengaja memperpendek cakupan berbagi state.

Karena itu, optimasi ini lebih tepat dinyatakan sebagai ekuivalensi state: entri KV yang tersimpan menggantikan prefill berulang hanya pada posisi dengan konteks sebelumnya dan identitas eksekusi yang cocok dengan state yang sudah ada. Setelah batas itu, eksekusi model kembali berjalan normal.